diff options
Diffstat (limited to 'packages/glpk')
-rw-r--r-- | packages/glpk/examples/simplex5.hs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/packages/glpk/examples/simplex5.hs b/packages/glpk/examples/simplex5.hs new file mode 100644 index 0000000..ecbcdaa --- /dev/null +++ b/packages/glpk/examples/simplex5.hs | |||
@@ -0,0 +1,27 @@ | |||
1 | import Numeric.LinearProgramming | ||
2 | |||
3 | -- This is a linear program from the paper "Picking vs. Guessing Secrets: A Game-theoretic Analysis" | ||
4 | |||
5 | gamma = 100000 :: Double | ||
6 | sigma = 1 :: Double | ||
7 | n = 64 :: Int | ||
8 | cost_fun :: Int -> Double | ||
9 | cost_fun i = (fromIntegral i) / (fromIntegral n) | ||
10 | size_fun :: Int -> Double | ||
11 | size_fun i = 2^(fromIntegral i) | ||
12 | |||
13 | prob = Minimize $ map cost_fun [1..n] | ||
14 | bnds = [i :&: (0,1) | i <- [1..n]] | ||
15 | |||
16 | constr1 = [[1 # i | i <- [1..n]] :==: 1] ++ | ||
17 | [[1/(size_fun i) # i, | ||
18 | -1/(size_fun (i+1)) # i+1] :>=: 0 | i <- [1..n-1]] ++ | ||
19 | [( | ||
20 | [gamma#i | i <- [1..k]] ++ | ||
21 | (concat [[sigma*(size_fun i) # j | j <- [1..i-1]] | i <- [1..k]]) ++ | ||
22 | [((size_fun i) - 1)/2 # i | i <- [1..k]]) | ||
23 | :<=: (sigma * (foldr (+) 0 (map size_fun [1..k]))) | k <- [1..n]] | ||
24 | |||
25 | main = do | ||
26 | print $ simplex prob (General constr1) bnds -- NoFeasible | ||
27 | print $ exact prob (General constr1) bnds -- solution found | ||