Roth · Joint team and project optimization

Fictional student teams and projects

12 students · 5 available projects · 4 teams · Preference source: synthetic

The complete lexicographic optimum was found. Each student belongs to one team, and each used project has exactly one team. This is Borda-score optimization, with no claim of stability or strategy-proofness.

See the preference inputs · See assignments · Market JSON · Preference JSON · Borda scores · Solver result · Assignment CSV

The preferences we imported

These are ordered lists, best first. They are inputs to the optimization, not inferred from its outcome. The bundled classroom example uses hand-built fictional rankings; no people, surveys, or model calls generated them.

StudentProjects, best firstTeammates, best first
AlexCampus climate dashboard → Student housing survey → Accessible campus transportBlair → Casey → Emery
BlairStudent housing survey → Campus climate dashboard → Food waste reductionAlex → Casey → Finley
CaseyAccessible campus transport → Student housing survey → Library discovery toolAlex → Blair → Gray
DevonStudent housing survey → Food waste reduction → Campus climate dashboardEmery → Finley → Harper
EmeryFood waste reduction → Student housing survey → Library discovery toolDevon → Finley → Indigo
FinleyCampus climate dashboard → Accessible campus transport → Student housing surveyDevon → Emery → Jules
GrayAccessible campus transport → Library discovery tool → Food waste reductionHarper → Indigo → Kai
HarperLibrary discovery tool → Accessible campus transport → Campus climate dashboardGray → Indigo → Lane
IndigoFood waste reduction → Accessible campus transport → Student housing surveyGray → Harper → Alex
JulesFood waste reduction → Campus climate dashboard → Library discovery toolKai → Lane → Blair
KaiCampus climate dashboard → Food waste reduction → Accessible campus transportJules → Lane → Casey
LaneLibrary discovery tool → Food waste reduction → Student housing surveyJules → Kai → Devon

Unlisted options earn zero Borda points and remain unranked; they are available unless explicitly excluded. A submitted empty list is different from a missing submission, which blocks solving.

Explicit hard exclusions (a teammate exclusion from either side prevents the pair):

How rankings become the objective

For M available options, rank r earns M − r Borda points. A sole option earns 1. The option count is the full project list or every other student, so submitting a shorter list does not change the points assigned to its first choice.

Project points are divided by 4. The sum of each student's teammate points is divided by 20: the highest peer Borda score times target size minus one. This uses the target size as a fixed reference; it does not average over realized team size, and a larger team can earn more social points.

Student score = 0.5 × normalized project score + 0.5 × normalized teammate score. Both directions of a teammate preference contribute. Scores are declared preference measures, not interpersonal cardinal welfare.

The organizer requests teams of 3, allowing 2–4. First the integer program minimizes total absolute deviation from the target among used teams. It then maximizes total student score while preserving that minimum deviation. Every stage assigns students and projects jointly.

Realized teams and projects

Campus climate dashboard

Alex, Blair, Casey

3 students

Student housing survey

Devon, Emery, Finley

3 students

Accessible campus transport

Gray, Harper, Indigo

3 students

Food waste reduction

Jules, Kai, Lane

3 students

Unused projects: Library discovery tool. Total size deviation: 0. Total weighted score: 10.200.

4/12 students get their first-choice project; 11/12 get a top-three project; 12/12 receive at least one ranked teammate. 1 students receive an unranked project.

Matrix cells show ranks (1 is best). Green cells labeled ASSIGNED or TEAM show realized outcomes. A dot means unranked; × means excluded; — is the diagonal. Read teammate rows directionally: Alex's rank of Blair may differ from Blair's rank of Alex.

Project rankings and assignments

Student ↓Campus climate dashboardStudent housing surveyAccessible campus transportFood waste reductionLibrary discovery tool
Alex1ASSIGNED23·×
Blair2ASSIGNED1·3·
Casey·ASSIGNED21·3
Devon31ASSIGNED·2·
Emery·2ASSIGNED·13
Finley13ASSIGNED2··
Gray··1ASSIGNED32
Harper3·2ASSIGNED·1
Indigo·32ASSIGNED1·
Jules2··1ASSIGNED3
Kai1·32ASSIGNED·
Lane·3·2ASSIGNED1

Teammate rankings and realized teams

Student ↓AlexBlairCaseyDevonEmeryFinleyGrayHarperIndigoJulesKaiLane
Alex1TEAM2TEAM·3······×
Blair1TEAM2TEAM··3······
Casey1TEAM2TEAM···3·····
Devon···1TEAM2TEAM·3····
Emery···1TEAM2TEAM··3···
Finley···1TEAM2TEAM···3··
Gray······1TEAM2TEAM·3·
Harper······1TEAM2TEAM··3
Indigo3·····1TEAM2TEAM···
Jules·3·······1TEAM2TEAM
Kai··3······1TEAM2TEAM
Lane×··3·····1TEAM2TEAM

Each student's score

StudentProjectProject rankProject BordaTeammate BordaCombined
AlexCampus climate dashboard14190.975
BlairCampus climate dashboard23190.850
CaseyCampus climate dashboardUnranked0190.475
DevonStudent housing survey14190.975
EmeryStudent housing survey23190.850
FinleyStudent housing survey32190.725
GrayAccessible campus transport14190.975
HarperAccessible campus transport23190.850
IndigoAccessible campus transport23190.850
JulesFood waste reduction14190.975
KaiFood waste reduction23190.850
LaneFood waste reduction23190.850

Reproduce this result

From this report directory, solve its frozen input files into a new output directory:

roth teams solve market.json --preferences preferences.json --output rerun

From a source checkout, install the optional solver with python -m pip install -e '.[teams]'. Solver: HiGHS via scipy.optimize.milp · SciPy 1.17.1.

PhaseStatusRelative MIP gap
team_sizeOptimal0.0
preferencesOptimal0.0

The input snapshot, scores, assignments, solver bounds, and statuses are saved alongside this page. Existing output directories are never overwritten. Equal-score assignments may differ across solver versions.

Input SHA-256: d68058d5d1c8ae6db375d0ce91f94116969cb6b348d9980d31a420025eda55f7

Organizer report: contains everyone's private preference rankings.