Proposal matcher implementation By Matt McCutchen in collaboration with Samir Khuller TODO: There is probably more to say here about the program, even after we add the paper about the algorithm/reduction. Setup ----- Requirements: - GHC on your $PATH - GHC "fgl" package (Required packages on Fedora 33 as of 2021-08-12: ghc-{fgl,random}-devel) Compile with "make". Interactive experimentation --------------------------- "./run" starts GHCi with all of the important definitions of the proposal matcher in scope. This is good for interactive experimentation. Batch front-end --------------- ./match is a front-end that reads an instance from stdin and prints the matching to stdout. Input: A tab-separated array with a header row followed by two rows per proposal and a header column followed by one column per reviewer. The header row specifies the relative loads of the reviewers as integers. The header column specifies the number of reviews each proposal must receive, in the first of the proposal's two rows. The remainder of the array contains, for each (proposal, reviewer) pair, a preference value (an integer from 100, best, to -99, worst, with -100 indicating conflict of interest) and below it, an expertise value (an integer from 3, best, to 0, worst). The preference value may optionally be followed by a * to require that that (proposal, reviewer) pair be matched in the output. This way, if the user obtains a matching and the reviewers start working and then minor changes to the input are needed, the user can request a matching that still includes most of the reviews already started. See the example.in. Reviewers and proposals are numbered from 0 in the order they appear in the input. Output: A tab-separated array. Each row gives the reviewer number and proposal number of a matched pair.