type MatchingEvaluation = Array Int Wt
evaluateMatching :: PMConfig -> PMInstance -> PMatching -> MatchingEvaluation
-evaluateMatching cfg inst@(PMInstance numRvrs numProps rloadA prefA) matching =
+evaluateMatching cfg inst@(PMInstance numRvrs numProps rloadA prefA) (PMatching matching) =
let reviewersByProposal = accumArray (flip (:)) []
(0, numProps-1) $ map (\(i,j) -> (j,i)) matching
:: Array Int [Int] in
map (\j -> ("P#" ++ show j) : map (\i -> show (prefA ! (i, j))) theRvrs) theProps
)
-type PMatching = [(Int, Int)]
+newtype PMatching = PMatching [(Int, Int)]
+ deriving Show
(n1, n2, REdgeF i ca (fa ! i) co)) $ labEdges g) :: Gr () REdgeF
showInstanceAsGraph :: PMInstance -> PMatching -> Gr String String
-showInstanceAsGraph (PMInstance numRvrs numProps rloadA prefA) matchedPairs =
+showInstanceAsGraph (PMInstance numRvrs numProps rloadA prefA) (PMatching matchedPairs) =
let
rvrNode i = i
propNode j = numRvrs + j
runEvaluation cfg nr np = do
let inst = runRandom myGen $ randomInstance cfg nr np
putStr (show inst ++ "\n")
- let m0 = doMatching cfg{loadTolerance = 0} inst
+ let PMatching m0 = doMatching cfg{loadTolerance = 0} inst
putStr ("Matching with load tolerance 0:\n" ++ show m0 ++ "\n")
- let m1 = doMatching cfg{loadTolerance = 1} inst
+ let PMatching m1 = doMatching cfg{loadTolerance = 1} inst
putStr ("Matching with load tolerance 1:\n" ++ show m1 ++ "\n")
putStr ("Differences:\n" ++ show (m0 /\ m1) ++ "\n")
- let e0 = evaluateMatching cfg{loadTolerance = 0} inst m0
+ let e0 = evaluateMatching cfg{loadTolerance = 0} inst (PMatching m0)
putStr ("Evaluation of first matching:\n" ++ show e0 ++ "\n")
- let e1 = evaluateMatching cfg{loadTolerance = 1} inst m1
+ let e1 = evaluateMatching cfg{loadTolerance = 1} inst (PMatching m1)
putStr ("Evaluation of second matching:\n" ++ show e1 ++ "\n")
putStr ("Evaluation differences:\n" ++
show (sortedDiffEvaluations e0 e1) ++ "\n")