Simplex Algorithm #
To obtain required vector in Linarith.SimplexAlgorithm.findPositiveVector
we run the Simplex
Algorithm. We use Bland's rule for pivoting, which guarantees that the algorithm terminates.
An exception in the SimplexAlgorithmM
monad.
- infeasible: Linarith.SimplexAlgorithm.SimplexAlgorithmException
The solution is infeasible.
Instances For
The mutable state for the SimplexAlgorithmM
monad.
- table : Linarith.SimplexAlgorithm.Table
Current table.
Instances For
The monad for the Simplex Algorithm.
Equations
Instances For
Given indexes exitIdx
and enterIdx
of exiting and entering variables in the basic
and free
arrays, performs pivot operation, i.e. expresses one through the other and makes the free one basic
and vice versa.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Check if the solution is found: the objective function is positive and all basic variables are nonnegative.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Chooses an entering variable: among the variables with a positive coefficient in the objective function, the one with the smallest index (in the initial indexing).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Chooses an exiting variable: the variable imposing the strictest limit on the increase of the entering variable, breaking ties by choosing the variable with smallest index.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Chooses entering and exiting variables using Bland's rule that guarantees that the Simplex Algorithm terminates.
Equations
- Linarith.SimplexAlgorithm.choosePivots = do let enterIdx ← Linarith.SimplexAlgorithm.chooseEnteringVar let exitIdx ← Linarith.SimplexAlgorithm.chooseExitingVar enterIdx pure (exitIdx, enterIdx)
Instances For
Implementation of runSimplexAlgorithm
in SimplexAlgorithmM
monad.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Runs Simplex Algorithm starting with initTable
. It always terminates, finding solution if
such exists. Returns the table obtained at the last step.
Equations
- One or more equations did not get rendered due to their size.