Copyright | (c) Masahiro Sakai 2012 |
---|---|
License | BSD-style |
Maintainer | masahiro.sakai@gmail.com |
Stability | provisional |
Portability | non-portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Extensions |
|
ToySolver.Arith.Simplex
Description
Naïve implementation of Simplex method
Reference:
- http://www.math.cuhk.edu.hk/~wei/lpch3.pdf
- Bruno Dutertre and Leonardo de Moura. A Fast Linear-Arithmetic Solver for DPLL(T). Computer Aided Verification In Computer Aided Verification, Vol. 4144 (2006), pp. 81-94. http://yices.csl.sri.com/cav06.pdf
- Bruno Dutertre and Leonardo de Moura. Integrating Simplex with DPLL(T). CSL Technical Report SRI-CSL-06-01. 2006. http://yices.csl.sri.com/sri-csl-06-01.pdf
Synopsis
- type Solver = GenericSolver Rational
- type GenericSolver v = GenericSolverM IO v
- data GenericSolverM m v
- class (VectorSpace v, Scalar v ~ Rational, Ord v) => SolverValue v where
- newSolver :: (PrimMonad m, SolverValue v) => m (GenericSolverM m v)
- cloneSolver :: PrimMonad m => GenericSolverM m v -> m (GenericSolverM m v)
- type Var = Int
- newVar :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Var
- data RelOp
- (.<.), (.<=.), (.>.), (.>=.) :: IsOrdRel e r => e -> e -> r
- (.<.), (.<=.), (.>.), (.>=.) :: IsOrdRel e r => e -> e -> r
- (.==.) :: IsEqRel e r => e -> e -> r
- (.<.), (.<=.), (.>.), (.>=.) :: IsOrdRel e r => e -> e -> r
- (.<.), (.<=.), (.>.), (.>=.) :: IsOrdRel e r => e -> e -> r
- type Atom r = OrdRel (Expr r)
- type ConstrID = Int
- type ConstrIDSet = IntSet
- assertAtom :: PrimMonad m => GenericSolverM m Rational -> Atom Rational -> m ()
- assertAtom' :: PrimMonad m => GenericSolverM m Rational -> Atom Rational -> Maybe ConstrID -> m ()
- assertAtomEx :: PrimMonad m => GenericSolverM m (Delta Rational) -> Atom Rational -> m ()
- assertAtomEx' :: PrimMonad m => GenericSolverM m (Delta Rational) -> Atom Rational -> Maybe ConstrID -> m ()
- assertLower :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> m ()
- assertLower' :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> Maybe ConstrID -> m ()
- assertUpper :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> m ()
- assertUpper' :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> Maybe ConstrID -> m ()
- setObj :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Expr Rational -> m ()
- getObj :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m (Expr Rational)
- data OptDir
- setOptDir :: PrimMonad m => GenericSolverM m v -> OptDir -> m ()
- getOptDir :: PrimMonad m => GenericSolverM m v -> m OptDir
- check :: forall m v. (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Bool
- pushBacktrackPoint :: PrimMonad m => GenericSolverM m v -> m ()
- popBacktrackPoint :: PrimMonad m => GenericSolverM m v -> m ()
- data Options = Options {}
- data OptResult
- optimize :: forall m. PrimMonad m => GenericSolverM m Rational -> Options -> m OptResult
- dualSimplex :: forall m. PrimMonad m => GenericSolverM m Rational -> Options -> m OptResult
- type Model = IntMap Rational
- getModel :: (SolverValue v, PrimMonad m) => GenericSolverM m v -> m Model
- type RawModel v = IntMap v
- getRawModel :: PrimMonad m => GenericSolverM m v -> m (RawModel v)
- getValue :: PrimMonad m => GenericSolverM m v -> Var -> m v
- getObjValue :: PrimMonad m => GenericSolverM m v -> m v
- explain :: PrimMonad m => GenericSolverM m v -> m ConstrIDSet
- getTableau :: PrimMonad m => GenericSolverM m v -> m (IntMap (Expr Rational))
- getRow :: PrimMonad m => GenericSolverM m v -> Var -> m (Expr Rational)
- getCol :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> m (IntMap Rational)
- getCoeff :: PrimMonad m => GenericSolverM m v -> Var -> Var -> m Rational
- nVars :: PrimMonad m => GenericSolverM m v -> m Int
- isBasicVariable :: PrimMonad m => GenericSolverM m v -> Var -> m Bool
- isNonBasicVariable :: PrimMonad m => GenericSolverM m v -> Var -> m Bool
- isFeasible :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Bool
- isOptimal :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Bool
- getLB :: PrimMonad m => GenericSolverM m v -> Var -> m (Bound v)
- getUB :: PrimMonad m => GenericSolverM m v -> Var -> m (Bound v)
- type Bound v = Maybe (v, ConstrIDSet)
- boundValue :: SolverValue v => Bound v -> Maybe v
- boundExplanation :: SolverValue v => Bound v -> ConstrIDSet
- setLogger :: PrimMonad m => GenericSolverM m v -> (String -> m ()) -> m ()
- clearLogger :: PrimMonad m => GenericSolverM m v -> m ()
- enableTimeRecording :: GenericSolverM IO v -> IO ()
- disableTimeRecording :: PrimMonad m => GenericSolverM m v -> m ()
- data Config = Config {}
- setConfig :: PrimMonad m => GenericSolverM m v -> Config -> m ()
- getConfig :: PrimMonad m => GenericSolverM m v -> m Config
- modifyConfig :: PrimMonad m => GenericSolverM m v -> (Config -> Config) -> m ()
- data PivotStrategy
- showPivotStrategy :: PivotStrategy -> String
- parsePivotStrategy :: String -> Maybe PivotStrategy
- setPivotStrategy :: PrimMonad m => GenericSolverM m v -> PivotStrategy -> m ()
- dump :: PrimMonad m => SolverValue v => GenericSolverM m v -> m ()
- simplifyAtom :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Atom Rational -> m (Var, RelOp, Rational)
The Solver
type
type Solver = GenericSolver Rational Source #
type GenericSolver v = GenericSolverM IO v Source #
data GenericSolverM m v Source #
class (VectorSpace v, Scalar v ~ Rational, Ord v) => SolverValue v where Source #
Methods
toValue :: Rational -> v Source #
showValue :: Bool -> v -> String Source #
getModel :: PrimMonad m => GenericSolverM m v -> m Model Source #
Instances
newSolver :: (PrimMonad m, SolverValue v) => m (GenericSolverM m v) Source #
cloneSolver :: PrimMonad m => GenericSolverM m v -> m (GenericSolverM m v) Source #
Problem specification
newVar :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Var Source #
type ConstrIDSet = IntSet Source #
assertAtom :: PrimMonad m => GenericSolverM m Rational -> Atom Rational -> m () Source #
assertAtom' :: PrimMonad m => GenericSolverM m Rational -> Atom Rational -> Maybe ConstrID -> m () Source #
assertAtomEx :: PrimMonad m => GenericSolverM m (Delta Rational) -> Atom Rational -> m () Source #
assertAtomEx' :: PrimMonad m => GenericSolverM m (Delta Rational) -> Atom Rational -> Maybe ConstrID -> m () Source #
assertLower :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> m () Source #
assertLower' :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> Maybe ConstrID -> m () Source #
assertUpper :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> m () Source #
assertUpper' :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> v -> Maybe ConstrID -> m () Source #
setObj :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Expr Rational -> m () Source #
getObj :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m (Expr Rational) Source #
The OptDir
type represents optimization directions.
Instances
Data OptDir | |
Defined in Data.OptDir Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> OptDir -> c OptDir # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c OptDir # toConstr :: OptDir -> Constr # dataTypeOf :: OptDir -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c OptDir) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OptDir) # gmapT :: (forall b. Data b => b -> b) -> OptDir -> OptDir # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> OptDir -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> OptDir -> r # gmapQ :: (forall d. Data d => d -> u) -> OptDir -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> OptDir -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> OptDir -> m OptDir # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> OptDir -> m OptDir # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> OptDir -> m OptDir # | |
Bounded OptDir | |
Enum OptDir | |
Defined in Data.OptDir | |
Generic OptDir | |
Ix OptDir | |
Read OptDir | |
Show OptDir | |
NFData OptDir | |
Defined in Data.OptDir | |
Eq OptDir | |
Ord OptDir | |
Hashable OptDir | |
Defined in Data.OptDir | |
type Rep OptDir | |
Solving
check :: forall m v. (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Bool Source #
pushBacktrackPoint :: PrimMonad m => GenericSolverM m v -> m () Source #
popBacktrackPoint :: PrimMonad m => GenericSolverM m v -> m () Source #
Options for solving.
The default option can be obtained by def
.
results of optimization
Instances
Show OptResult Source # | |
Eq OptResult Source # | |
Ord OptResult Source # | |
dualSimplex :: forall m. PrimMonad m => GenericSolverM m Rational -> Options -> m OptResult Source #
Extract results
getModel :: (SolverValue v, PrimMonad m) => GenericSolverM m v -> m Model Source #
getRawModel :: PrimMonad m => GenericSolverM m v -> m (RawModel v) Source #
getObjValue :: PrimMonad m => GenericSolverM m v -> m v Source #
explain :: PrimMonad m => GenericSolverM m v -> m ConstrIDSet Source #
Reading status
getTableau :: PrimMonad m => GenericSolverM m v -> m (IntMap (Expr Rational)) Source #
getCol :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Var -> m (IntMap Rational) Source #
isBasicVariable :: PrimMonad m => GenericSolverM m v -> Var -> m Bool Source #
isNonBasicVariable :: PrimMonad m => GenericSolverM m v -> Var -> m Bool Source #
isFeasible :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Bool Source #
isOptimal :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> m Bool Source #
type Bound v = Maybe (v, ConstrIDSet) Source #
boundValue :: SolverValue v => Bound v -> Maybe v Source #
boundExplanation :: SolverValue v => Bound v -> ConstrIDSet Source #
Configulation
setLogger :: PrimMonad m => GenericSolverM m v -> (String -> m ()) -> m () Source #
set callback function for receiving messages.
clearLogger :: PrimMonad m => GenericSolverM m v -> m () Source #
enableTimeRecording :: GenericSolverM IO v -> IO () Source #
disableTimeRecording :: PrimMonad m => GenericSolverM m v -> m () Source #
Constructors
Config | |
Fields |
modifyConfig :: PrimMonad m => GenericSolverM m v -> (Config -> Config) -> m () Source #
data PivotStrategy Source #
Instances
setPivotStrategy :: PrimMonad m => GenericSolverM m v -> PivotStrategy -> m () Source #
Deprecated: Use setConfig instead
Debug
dump :: PrimMonad m => SolverValue v => GenericSolverM m v -> m () Source #
Misc
simplifyAtom :: (PrimMonad m, SolverValue v) => GenericSolverM m v -> Atom Rational -> m (Var, RelOp, Rational) Source #