| 1 | Proposal matcher implementation |
| 2 | |
| 3 | By Matt McCutchen <matt@mattmccutchen.net> |
| 4 | in collaboration with Samir Khuller <samir@cs.umd.edu> |
| 5 | |
| 6 | TODO: There is probably more to say here about the program, even after we add |
| 7 | the paper about the algorithm/reduction. |
| 8 | |
| 9 | Setup |
| 10 | ----- |
| 11 | |
| 12 | Requirements: |
| 13 | - GHC on your $PATH |
| 14 | - GHC "fgl" package |
| 15 | |
| 16 | Compile with "make". |
| 17 | |
| 18 | Interactive experimentation |
| 19 | --------------------------- |
| 20 | |
| 21 | "./run" starts GHCi with all of the important definitions of the proposal |
| 22 | matcher in scope. This is good for interactive experimentation. |
| 23 | |
| 24 | Batch front-end |
| 25 | --------------- |
| 26 | |
| 27 | ./match is a front-end that reads an instance from stdin and prints the matching |
| 28 | to stdout. |
| 29 | |
| 30 | Input: A tab-separated array with a header row followed by two rows per proposal |
| 31 | and a header column followed by one column per reviewer. The header row |
| 32 | specifies the relative loads of the reviewers as integers. The header column |
| 33 | specifies the number of reviews each proposal must receive, in the first of the |
| 34 | proposal's two rows. |
| 35 | |
| 36 | The remainder of the array contains, for each (proposal, reviewer) pair, a |
| 37 | preference value (an integer from 100, best, to -99, worst, with -100 indicating |
| 38 | conflict of interest) and below it, an expertise value (an integer from 3, best, |
| 39 | to 0, worst). The preference value may optionally be followed by a * to require |
| 40 | that that (proposal, reviewer) pair be matched in the output. This way, if the |
| 41 | user obtains a matching and the reviewers start working and then minor changes |
| 42 | to the input are needed, the user can request a matching that still includes |
| 43 | most of the reviews already started. |
| 44 | |
| 45 | See the example.in. |
| 46 | |
| 47 | Reviewers and proposals are numbered from 0 in the order they appear in the |
| 48 | input. |
| 49 | |
| 50 | Output: A tab-separated array. Each row gives the reviewer number and proposal |
| 51 | number of a matched pair. |