|
| 1 | +# Teambuilder |
| 2 | + |
| 3 | +Dribdat uses an optimization-based **matching algorithm** to help organizers form teams during hackathons. The algorithm is implemented using [Pyomo](https://www.pyomo.org/) and solved with the [HiGHS](https://highs.dev/) solver. In this documentation you can find some more information on how it works, and our outlook on this type of feature. |
| 4 | + |
| 5 | +The **Teambuilder** feature is an automated recommendation engine designed to match participants to projects based on their skills, interests, and preferences. Originally developed as an external algorithm by students of Prof. Dr. Marek Pycia at the University of Zürich (UZH), the tool has been successfully integrated into Dribdat as part of the HackIntegration project. |
| 6 | + |
| 7 | +It is now a standard offering in Dribdat, with growing demand from event organizers and participants. Details of the algorithm will be published soon, a basic overview of the approach is described in the following sections. |
| 8 | + |
| 9 | +## User guide |
| 10 | + |
| 11 | +Users can rank up to 5 projects for the current event using an intuitive drag-and-drop interface (powered by SortableJS). This is accessible via the upcoming event page (with the **Join Project**) button, or the user’s profile. |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | +Just drag and drop the projects you would like to work on from the right side to the left, and rank them from top (most preferrable) to bottom. |
| 16 | + |
| 17 | + |
| 18 | + |
| 19 | +Organizers can then get an overview of all projects and participants in a single, centralized dashboard in the Admin area. They can at a glance see who has ranked their projects, and start the teambuilding process. |
| 20 | + |
| 21 | + |
| 22 | + |
| 23 | +When you trigger the matching process, it suggests optimal assignments based on: |
| 24 | + |
| 25 | +- Participant rankings |
| 26 | +- Project capacity and skill constraints |
| 27 | +- Pre-made teams (users already joined to a project are kept together) |
| 28 | + |
| 29 | +The results are displayed in a review screen for organizer approval. |
| 30 | +Organizers can then send automated invitation emails to suggested matches. |
| 31 | + |
| 32 | + |
| 33 | + |
| 34 | +Emails include: basic project details, a customizable message from the organizer, and a direct link for participants to join the project. |
| 35 | + |
| 36 | +Participants must act on the recommendation, i.e. confirm the match by tapping the link and joining the project. |
| 37 | + |
| 38 | +## How the matching works |
| 39 | + |
| 40 | +The matching algorithm considers several factors to find an optimal assignment of participants to projects: |
| 41 | + |
| 42 | +1. **User Preferences:** Participants can rank projects they are interested in. The algorithm tries to assign each person to their highest-ranked project. |
| 43 | +2. **Project Capacities:** Each project has a maximum number of members it can accommodate (defaulting to the value of the `DRIBDAT_TEAM_SIZE` environment variable, or 5). |
| 44 | +3. **Skill Requirements:** Projects can specify required skills (using the `technai` field). The algorithm ensures that these requirements are met by assigning participants with the matching skills. |
| 45 | +4. **Team Imbalance:** The algorithm includes a small penalty for team size imbalance, encouraging teams of similar sizes. |
| 46 | +5. **Pre-made Teams:** If a participant has already "joined" (starred) a project in Dribdat, the algorithm treats this as a fixed assignment and keeps them in that project. |
| 47 | + |
| 48 | +## Solver Configuration |
| 49 | + |
| 50 | +The default solver is **HiGHS** (via the `highspy` package), which is an open-source high-performance solver for mixed-integer programming. |
| 51 | + |
| 52 | +### Customization |
| 53 | + |
| 54 | +- **Team Size:** You can set the `DRIBDAT_TEAM_SIZE` environment variable to change the default capacity for all projects. |
| 55 | +- **Skill Matching:** Skills are matched between the `User.my_skills` and `Project.technai` fields. |
| 56 | + |
| 57 | +## Development and Testing |
| 58 | + |
| 59 | +The matching logic is located in `dribdat/matching.py`. You can run the dedicated matching tests using: |
| 60 | + |
| 61 | +```bash |
| 62 | +PYTHONPATH=. python tests/test_matching.py |
| 63 | +``` |
| 64 | + |
| 65 | +For more information on optimization models and testing, refer to the [Pyomo documentation](https://pyomo.readthedocs.io/). |
| 66 | + |
| 67 | +## Acknowledgements |
| 68 | + |
| 69 | +Special thanks to Kiril and Martin for their contributions to the Teambuilder algorithm, and to the Bern University of Applied Sciences, University of Zürich, Innosuisse, and all [HackIntegration partners](https://hackintegration.ch) for their support. |
0 commit comments