| 1 | module PMInstance where |
| 2 | import Data.Array.IArray |
| 3 | import Data.Array.Unboxed |
| 4 | import ArrayStuff |
| 5 | import Formatter |
| 6 | |
| 7 | type Wt = Double -- Can be any RealFrac. |
| 8 | numAsWt x = fromInteger (toInteger x) |
| 9 | |
| 10 | data PMInstance = PMInstance |
| 11 | Int -- numReviewers |
| 12 | Int -- numProposals |
| 13 | (UArray Int Wt) -- ! reviewer -> relative load |
| 14 | (UArray (Int, Int) Wt) -- ! (reviewer, proposal) -> pref |
| 15 | deriving Eq |
| 16 | |
| 17 | instance Show PMInstance where |
| 18 | show (PMInstance numRvrs numProps loadA prefA) = |
| 19 | let theRvrs = [0..numRvrs-1]; theProps = [0..numProps-1] in |
| 20 | "Instance with " ++ show numRvrs ++ " reviewers and " ++ show numProps ++ " proposals:\n" ++ formatTable ( |
| 21 | ( "" : map (\i -> "R#" ++ show i ) theRvrs) : |
| 22 | ( "RLoad" : map (\i -> show (loadA ! i) ) theRvrs) : |
| 23 | map (\j -> ("P#" ++ show j) : map (\i -> show (prefA ! (i, j))) theRvrs) theProps |
| 24 | ) |
| 25 | |
| 26 | type PMatching = [(Int, Int)] |