- More evaluation.
authorMatt McCutchen <matt@mattmccutchen.net>
Mon, 28 Jul 2008 17:36:12 +0000 (13:36 -0400)
committerMatt McCutchen <matt@mattmccutchen.net>
Mon, 28 Jul 2008 17:36:12 +0000 (13:36 -0400)
- Introduce reviewer age into the instance generator.

program/PMInstanceGenerator.hs
program/Test.hs
program/TestUtils.hs

index 1143f61..97a546a 100644 (file)
@@ -14,8 +14,10 @@ data ReviewerInfo = ReviewerInfo {
 }
 
 randomReviewerInfo numProps = do
+       -- "Older" reviewers are more likely to be expert on topics.
+       age <- mrandomR (0.5, 1.0)
        expns <- indRandomArray (0, numTopics-1) $
-               withProb [(0.15, return 2), (0.4, return 1)] (return 0)
+               withProb [(0.15 * age, return 2), (0.4 * age, return 1)] (return 0)
        -- Samir: "Its often the case that each reviewer has a COI with say
        -- one proposal submitted either by their University (different faculty)
        -- or by a recent co-author."
index 1530aa9..2e42be1 100644 (file)
@@ -75,8 +75,3 @@ rrg2 = flowAnnotate rrg rdnFlowArray
 myMatching = doMatching pmDefaults myInst
 
 iGraph = showInstanceAsGraph myInst myMatching -- Visualize me!
-
--- Evaluation!
-eInst = runRandom myGen $ randomInstance 20 50
-eval1 = doEvaluateMatching pmDefaults eInst
-eval2 = doEvaluateMatching pmDefaults{loadTolerance = 2} eInst
index da68cf4..623391d 100644 (file)
@@ -4,6 +4,7 @@ import Data.Array.IArray
 import Data.Graph.Inductive.Graph
 import Data.Graph.Inductive.Graphviz
 import Data.Graph.Inductive.Tree
+import Data.List
 import System.IO
 import System.Random
 import System.Posix.IO
@@ -11,7 +12,11 @@ import System.Posix.Time
 import System.Process
 import PMInstance
 import ProposalMatcher
+import PMDefaults
+import PMInstanceGenerator
+import Evaluation
 import MonadStuff
+import RandomizedMonad
 
 -- This module has stuff that is helpful for testing but isn't itself an example.
 
@@ -76,3 +81,23 @@ goGraph theGraph =
        waitForProcess dotPid
        -- Then open the file.
        goFile fname
+
+-- Both-ways list difference
+(/\) :: Eq a => [a] -> [a] -> ([a], [a])
+l1 /\ l2 = (l1 \\ l2, l2 \\ l1)
+
+-- Evaluation!
+runEvaluation nr np = do
+       let inst = runRandom myGen $ randomInstance nr np
+       putStr (show inst ++ "\n")
+       let m0 = doMatching pmDefaults{loadTolerance = 0} inst
+       putStr ("Matching with load tolerance 0:\n" ++ show m0 ++ "\n")
+       let m1 = doMatching pmDefaults{loadTolerance = 1} inst
+       putStr ("Matching with load tolerance 1:\n" ++ show m1 ++ "\n")
+       putStr ("Differences:\n" ++ show (m0 /\ m1) ++ "\n")
+       let e0 = evaluateMatching pmDefaults{loadTolerance = 0} inst m0
+       putStr ("Evaluation of first matching:\n" ++ show e0 ++ "\n")
+       let e1 = evaluateMatching pmDefaults{loadTolerance = 1} inst m1
+       putStr ("Evaluation of second matching:\n" ++ show e1 ++ "\n")
+       putStr ("Evaluation differences:\n" ++
+               show (sortedDiffEvaluations e0 e1) ++ "\n")