A federation’s referee board solves the same problem every week: hundreds of matches, hundreds of referees, a distribution that follows the rules and is fair. Done by hand it takes hours, rule breaches slip through and fairness stays subjective — who got how many matches, who travelled how far, nobody can show with a number across a season.

Assignment is an optimization problem

Excuses, bans, league licences, city restrictions, the ban on refereeing the same team twice in a row, two matches on one day, monthly caps — all of these are constraints. Match-count fairness, travel balance, the fit between a match’s difficulty and the crew’s strength — these are objectives. Mixed-integer programming carries this structure naturally: constraints are never violated, objectives are balanced by their weights.

Control stays with the board

The system does not decide, it proposes. The board reviews the proposal, can change it one assignment at a time — every change is checked against the rules instantly — and commits it. Committed matches are never changed automatically again; they enter the following weeks’ solve as history. Every proposal’s reasoning is recorded: which rule, which value.

Rolling horizon

A long window is solved, only the first weeks are committed, the window rolls forward. When the fixture changes, only the affected weeks are re-solved; committed assignments are preserved.

Our work in this area