Skip to content

Commit 06d117a

Browse files
committed
Matching
1 parent 4aadbc3 commit 06d117a

7 files changed

Lines changed: 1840 additions & 20 deletions

File tree

69.9 KB
Loading
69.9 KB
Loading
70.5 KB
Loading
37.8 KB
Loading

docs/matching.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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+
![Screenshot](images/features/teambuilder_ranking.png)
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+
![Screenshot](images/features/teambuilder_admin.png)
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+
![Screenshot](images/features/teambuilder_confirm.png)
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+
![Screenshot](images/features/teambuilder_mail.png)
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.

livemark.yaml

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,29 @@ pages:
1717
items:
1818
- path: docs/index
1919
name: Intro
20+
- path: docs/usage
21+
name: User Handbook
22+
items:
23+
- path: docs/sync
24+
name: How to sync data
25+
- path: docs/organiser
26+
name: How to organise
27+
- path: docs/matching
28+
name: Teambuilding
29+
- path: docs/deploy
30+
name: How to install
31+
- path: docs/contribute
32+
name: How to contribute
2033
- path: docs/purpose
2134
name: About Dribdat
22-
- path: docs/usage
23-
name: How to get started
24-
- path: docs/sync
25-
name: How to sync data
26-
- path: docs/organiser
27-
name: How to organise
28-
- path: docs/deploy
29-
name: How to install
30-
- path: docs/contribute
31-
name: How to contribute
32-
- path: docs/tour
33-
name: Tour de Hack
34-
- path: docs/whitepaper
35-
name: Whitepaper
36-
- path: docs/modernization
37-
name: Dribdat v3
38-
- path: docs/about
39-
name: History
35+
items:
36+
- path: docs/tour
37+
name: Tour de Hack
38+
- path: docs/whitepaper
39+
name: Whitepaper
40+
- path: docs/modernization
41+
name: Dribdat v3
42+
- path: docs/about
43+
name: History
4044
- path: docs/trouble
4145
name: F.A.Q.

0 commit comments

Comments
 (0)