module PMDefaults where import PMInstance import PMConfig import qualified NaiveMinCostFlow import qualified CS2MinCostFlow -- A default set of configuration values; see module PMConfig. 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 -> (widenInteger 10 + pref) ^ 2, -- Bonus for a first knowledgeable or expert review. knowledgeableBonus = 1000, -- Bonus for an additional expert review. expertBonus = 1000, -- === Parameters for the random-instance generator === -- Number of topics. numTopics = 20, -- Exponent of the Zipf distribution used to choose topics for each proposal. topicZipfExponent = -0.5, -- === Parameters for the matching evaluator === -- The weights given to the best, ..., worst review of a proposal in evaluating -- its "unhappiness". Default is [reviewsEachProposal, ..., 1] since it's most -- important for the best review to be good. reviewEvalWeights = let rep = reviewsEachProposal pmDefaults in map widenInteger [rep, rep-1 .. 1] }