module PMDefaults where import PMInstance import PMConfig import qualified NaiveMinCostFlow import qualified CS2MinCostFlow pmDefaults = PMConfig { -- === Choose a min-cost flow implementation (timings on mattlaptop2) === -- A naive implementation that is slow for all but the smallest instances -- (30s on a 20x50 example). minCostFlow = NaiveMinCostFlow.minCostFlow, -- Uses CS2 (http://www.igsystems.com/cs2/), which requires a license for -- non-research use but is faster (<1s on a 20x50 example, 64s on a 60x500 -- example). Configure the path to cs2.exe in CS2MinCostFlow.hs. Remember to -- compile CS2 with -DPRINT_ANS, or this won't work! --minCostFlow = CS2MinCostFlow.minCostFlow, -- The number of reviews each proposal should get. reviewsEachProposal = 3, -- === Interpretation of the preference values === prefIsExpert = \p -> p <= 10, prefIsKnowledgeable = \p -> p <= 20, prefIsBoring = \p -> p > 15, prefIsVeryBoring = \p -> p > 25, prefIsConflict = \p -> p >= 40, -- === Tuning parameters for the matcher === -- The number of reviews by which a reviewer's load may exceed his/her target -- load of (relativeLoad * ceiling(numProps * reviewsEachProposal / -- totalRelativeLoad)). For now this is an additive constant; perhaps it should -- be proportional to the target load. loadTolerance = 1, -- Cost to overload by one review. -- tx = 0 at target load, 1 at end of tolerance. marginalLoadCost = \tx -> 1000 + tx*1000, -- Cost to review a boring (or very boring) proposal. -- lx = 0 at no load, 1 at target load. marginalBoringCost = \lx -> 1000 + lx*1000, -- Additional cost to review a very boring proposal. marginalVeryBoringCost = \lx -> 1000 + lx*1000, -- Cost to make a review. Used by the evaluator too. -- I'm using quadratic cost functions as a first attempt. assignmentCost = \pref -> (numAsWt 10 + pref) ^ 2, -- Bonus for a first knowledgeable or expert review. knowledgeableBonus = 1000, -- Bonus for an additional expert review. expertBonus = 1000 }