Skip to content

Algorithm for judge assignments #14

@ben-m-young

Description

@ben-m-young

Given each judge's first, second, and third prize preferences in Judge and the list of projects submitted for each prize in ProjectForPrize, find an optimal assignment of judges to prizes and projects that maximizes the number of judges assigned to their highest-preference prizes, and also maximizes the number of times each project is judged for each prize (favor the second if you can't simultaneously maximize both). Each judge can score for multiple prizes and does not have to score every project submitted for a prize they're assigned to. The assignment should satisfy the following constraints:

  1. No judge should score more than a given total number N of projects
  2. No judge should be assigned to more than 2 (preferably) or 3 prizes
  3. No judge should score < 5 projects for a given prize (unless there are < 5 projects submitted for that prize)
  4. All projects submitted for a prize should be judged the same number (> 2) of times for that prize
  5. If possible, minimize the number of times a judge scores the same project for multiple different prizes. It's ok to have this, but they count as distinct scorings for point 1.

Enter the resulting assignments into JudgesProject.

For example, if projects 1-5 are submitted for the following prizes

Fintech Health Maker
1 2 1
3 4 2
5 3
4
5

and there are 7 judges A-G and N=5, then the following assignment is valid (ignoring constraint 3 because the example is small)

Fintech Health Maker
A 1,3 - 2,4,5
B 1,3 - 2,4,5
C - 2,4,5 1,3
D - 2,4,5 1,3
E 1,3 2,4,5 -
F - - 1,2,3,4,5
G 1,3 2,4,5 -

because no judge scores more than 5 projects, every project in Fintech and Health are scored 4 times and every project in Maker is scored 3 times, every judge scores for at most 2 prizes, and as a bonus no judge scores the same project twice (this could happen if, for example, A scores 1 for both Fintech and Maker)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions