packages feed

cplex-hs-0.3.0.0: src/LSolver/Dummy.hs

module LSolver.Dummy(sol',  standardBounds) where

import Data.Ix as I
import qualified Data.Vector as V
import qualified Data.Sequence as S
import Data.Foldable as F
import LSolver.Bindings


data Equality = L Double | E Double | G Double
data Mat = Row Int | Col Int

data Var = X | Y | Z

objF :: Optimization Int
objF = Maximize [1 :# 0 , 2 :# 1, 3 :# 2]

st :: Constraints Int
st = Constraints [
                [(-1):#1, 1:#2, 1:#3] :< 20,
                [1:#1, (-3):#2, 1:#3] :< 30
            ]

bnds = [       (1, Just 0, Just 40),
            (2,Just 0,Nothing),
            (3, Just 0, Nothing)]

standardBounds (i,j) = map (\i' -> (i', Just 0, Nothing)) [i..j]

toBounds bounds varRange = F.toList $ aux bounds def
    where
        def = S.fromList [k | i <- I.range varRange, let k = (Just 0, Nothing)]
        aux [] s = s
        aux ((b,lb,ub):bs) s = aux bs (S.update (I.index varRange b) (lb,ub) s)

toConstraints constraints varRange = let (st, rhs) = toStandard constraints 0 [] [] varRange
    in (st, V.fromList rhs)
toStandard (Constraints []) _ accSt accRhs varRange = (reverse $ accSt, reverse $ accRhs)
toStandard (Constraints (b:bs)) rowI accSt accRhs varRange = case b of
        vars :< boundVal -> addRow vars L boundVal
        vars := boundVal -> addRow vars E boundVal
        vars :> boundVal -> addRow vars G boundVal
    where   addRow vars s boundVal = toStandard (Constraints bs) (rowI+1) (generateRow vars ++ accSt)
                                                ((s boundVal) : accRhs) varRange
            generateRow [] = []
            generateRow ((v :# i):vs) = (Row rowI, Col $ I.index varRange i, v):generateRow vs

sol' = do
    putStrLn "Test"