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
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.
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")