module ProposalMatcher where
-import NaiveMinCostFlow
import Data.Array.IArray
import Data.Graph.Inductive.Graph
import Data.Graph.Inductive.Tree
import Data.List
import Instance
-import ProposalMatcherConfig
+import ProposalMatcherConfig -- gives us minCostFlow
prefBoringness p = if prefIsVeryBoring p then 2
else if prefIsBoring p then 1 else 0
i <- [0 .. numRvrs - 1]
j <- [0 .. numProps - 1]
let pref = prefA ! (i, j)
- if prefIsConflict pref
- then []
- else [(rvrNode i (prefBoringness pref),
- propNode j (prefExpertness pref),
- REdge (edIdx (i, j)) 1 (assignmentCost pref))]
+ -- We must generate an edge even if there is a conflict
+ -- of interest; otherwise we'll fail to read its flow
+ -- value in doMatching.
+ [(rvrNode i (prefBoringness pref),
+ propNode j (prefExpertness pref),
+ REdge (edIdx (i, j))
+ (if prefIsConflict pref then 0 else 1)
+ (assignmentCost pref))]
edgesEFGH = do
j <- [0 .. numProps - 1]
let edgeE = (propNode j 2, propNode j 0, REdge undefined 1 (-expertBonus))