diff options
| -rw-r--r-- | Math/LinProg/LP.hs | 38 | 
1 files changed, 4 insertions, 34 deletions
| diff --git a/Math/LinProg/LP.hs b/Math/LinProg/LP.hs index 8670cdf..4ad8b79 100644 --- a/Math/LinProg/LP.hs +++ b/Math/LinProg/LP.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE TemplateHaskell, FlexibleInstances, ScopedTypeVariables #-} +{-# LANGUAGE FlexibleInstances, ScopedTypeVariables #-}  module Math.LinProg.LP (    compile @@ -6,21 +6,12 @@ module Math.LinProg.LP (  import Data.List  import Math.LinProg.Types +import Math.LinProg.Compile  import Control.Lens  import Control.Monad.State  import Control.Monad.Free  import Data.Maybe -type Equation t v = (LinExpr t v, t) -- LHS and RHS - -data CompilerS t v = CompilerS { -  _objective :: LinExpr t v -  ,_equals :: [Equation t v] -  ,_leqs :: [Equation t v] -} deriving (Eq) - -$(makeLenses ''CompilerS) -  instance (Show t, Num t, Ord t) => Show (CompilerS t String) where    show s = unlines $ catMaybes [        Just "Minimize" @@ -53,8 +44,8 @@ findBounds eqs = (mapMaybe bound singleTerms, eqs \\ filter (isBounded . head .      singleTermEqs = filter (\(ts, _) -> length (vars ts) == 1) eqs      singleTerms = nub $ concatMap (vars . fst) singleTermEqs -    upperBound x = mapMaybe (\(a, c) -> let w = getVar x a in if w == 1 then Nothing else Just c) singleTermEqs -    lowerBound x = mapMaybe (\(a, c) -> let w = getVar x a in if w == -1 then Nothing else Just c) singleTermEqs +    upperBound x = mapMaybe (\(a, c) -> let w = getVar x a in if w == 1 then Just (negate c) else Nothing) singleTermEqs +    lowerBound x = mapMaybe (\(a, c) -> let w = getVar x a in if w == -1 then Just c else Nothing) singleTermEqs      bound v = bound' (lowerBound v) (upperBound v) where        bound' [] _ = Nothing @@ -65,24 +56,3 @@ findBounds eqs = (mapMaybe bound singleTerms, eqs \\ filter (isBounded . head .          u = minimum us      isBounded v = isJust (bound v) - -compile :: (Num t, Show t, Ord t) => LinProg t String () -> String -compile ast = show $ compile' ast initCompilerS where -  compile' (Free (Objective a c)) state = compile' c $ state & objective +~ a -  compile' (Free (EqConstraint a b c)) state = compile' c $ state & equals %~ (split (b-a):) -  compile' (Free (LeqConstraint a b c)) state = compile' c $ state & leqs %~ (split (b-a):) -  compile' _ state = state - -  initCompilerS = CompilerS -    0 -    [] -    [] - -test :: LinProg Double String () -test = do -  let [x, y] = map var ["x", "y"] -  obj $ 1 + 5 * y + x -  y =: (1 + x) -  y >: (-5) -  x <: 10 -  x >: 0 | 
