-- Sort this proposal's reviews, best first.
let jPrefsInc = sort $ map (\i -> prefA ! (i,j)) rl in
-- Charge each review's assignmentCost.
- sum $ zipWith (\wt prf -> (numAsWt wt) * assignmentCost cfg prf)
- -- The assignment costs are weighted by
- -- reviewsEachProposal, ..., 1 from best to worst.
- -- (It's most important for the best to be good.)
- (take (reviewsEachProposal cfg) $
- iterate (subtract 1) (reviewsEachProposal cfg))
+ sum $ zipWith (\wt prf -> wt * assignmentCost cfg prf)
+ (reviewEvalWeights cfg)
-- A missing review counts as a preference of 50 (really bad).
(jPrefsInc ++ repeat 50)
- )
+ )
reviewersByProposal
doEvaluateMatching :: PMConfig -> PMInstance -> MatchingEvaluation
knowledgeableBonus :: Wt,
expertBonus :: Wt,
numTopics :: Int,
- topicZipfExponent :: Wt
+ topicZipfExponent :: Wt,
+ reviewEvalWeights :: [Wt]
}
numTopics = 20,
-- Exponent of the Zipf distribution used to choose topics for each proposal.
-topicZipfExponent = -0.5
+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 numAsWt [rep, rep-1 .. 1]
}