The SimplexSolver supports the following OptimizationData data provided
as arguments to optimize(OptimizationData.:
LinearObjectiveFunction - mandatoryLinearConstraintSet - mandatoryGoalType
- optional, default: MINIMIZENonNegativeConstraint - optional, default: truePivotSelectionRule - optional, default PivotSelectionRule#DANTZIGSolutionCallback - optionalorg.apache.commons.math3.optim.MaxIter - optional, default: Integer#MAX_VALUENote
Depending on the problem definition, the default convergence criteria
may be too strict, resulting in NoFeasibleSolutionException or
TooManyIterationsException. In such a case it is advised to adjust these
criteria with more appropriate values, e.g. relaxing the epsilon value.
Default convergence criteria:
The cut-off value has been introduced to handle the case of very small pivot elements
in the Simplex tableau, as these may lead to numerical instabilities and degeneracy.
Potential pivot elements smaller than this value will be treated as if they were zero
and are thus not considered by the pivot selection mechanism. The default value is safe
for many problems, but may need to be adjusted in case of very small coefficients
used in either the LinearConstraint or LinearObjectiveFunction.
| Modifier and Type | Field and Description |
|---|---|
| private final double | cutOff
Cut-off value for entries in the tableau: values smaller than the cut-off are treated as zero to improve numerical stability. |
| pack-priv static final double | DEFAULT_CUT_OFF
Default cut-off value. |
| private static final double | DEFAULT_EPSILON
Default amount of error to accept for algorithm convergence. |
| pack-priv static final int | DEFAULT_ULPS
Default amount of error to accept in floating point comparisons (as ulps). |
| private final double | epsilon
Amount of error to accept for algorithm convergence. |
| private final int | maxUlps
Amount of error to accept in floating point comparisons (as ulps). |
| private PivotSelectionRule | pivotSelection
The pivot selection method to use. |
| private SolutionCallback | solutionCallback
The solution callback to access the best solution found so far in case the optimizer fails to find an optimal solution within the iteration limits. |
| Access | Constructor and Description |
|---|---|
| public | |
| public | SimplexSolver(final double
Amount of error to accept for algorithm convergence. epsilon)Builds a simplex solver with a specified accepted amount of error. |
| public | SimplexSolver(final double
Amount of error to accept for algorithm convergence. epsilon, final int Amount of error to accept in floating point comparisons. maxUlps)Builds a simplex solver with a specified accepted amount of error. |
| public | SimplexSolver(final double
Amount of error to accept for algorithm convergence. epsilon, final int Amount of error to accept in floating point comparisons. maxUlps, final double Values smaller than the cutOff are treated as zero. cutOff)Builds a simplex solver with a specified accepted amount of error. |
| Modifier and Type | Method and Description |
|---|---|
| protected void | doIteration(final SimplexTableau
Simple tableau for the problem. tableau)Runs one iteration of the Simplex method on the given model. |
| public PointValuePair | doOptimize()
Implements abstract org. Performs the bulk of the optimization algorithm. |
| private Integer | Returns: the column with the most negative coefficient.Simple tableau for the problem. tableau)Returns the column with the most negative coefficient in the objective function row. |
| private Integer | Returns: the row with the minimum ratio.Simplex tableau for the problem. tableau, final int Column to test the ratio of (see col)getPivotColumn(SimplexTableau)).Returns the row with the minimum ratio as given by the minimum ratio test (MRT). |
| private boolean | Returns: true if the pivot column is valid, false otherwisesimplex tableau for the problem tableau, int the column to test col)Checks whether the given column is valid pivot column, i.e. will result in a valid pivot row. |
| public PointValuePair | Returns: a point/value pair that satisfies the convergence criteria.Optimization data. In addition to those documented in
optData)LinearOptimizer, this method will register the following data:
Overrides org. Stores data and performs the optimization. |
| protected void | parseOptimizationData(OptimizationData...
Optimization data.
In addition to those documented in
optData)LinearOptimizer, this method will register the following data:
Overrides org. Scans the list of (required and optional) optimization data that characterize the problem. |
| protected void | solvePhase1(final SimplexTableau
Simple tableau for the problem. tableau)Solves Phase 1 of the Simplex method. |
| cutOff | back to summary |
|---|---|
| private final double cutOff Cut-off value for entries in the tableau: values smaller than the cut-off are treated as zero to improve numerical stability. | |
| DEFAULT_CUT_OFF | back to summary |
|---|---|
| pack-priv static final double DEFAULT_CUT_OFF Default cut-off value. | |
| DEFAULT_EPSILON | back to summary |
|---|---|
| private static final double DEFAULT_EPSILON Default amount of error to accept for algorithm convergence. | |
| DEFAULT_ULPS | back to summary |
|---|---|
| pack-priv static final int DEFAULT_ULPS Default amount of error to accept in floating point comparisons (as ulps). | |
| epsilon | back to summary |
|---|---|
| private final double epsilon Amount of error to accept for algorithm convergence. | |
| maxUlps | back to summary |
|---|---|
| private final int maxUlps Amount of error to accept in floating point comparisons (as ulps). | |
| pivotSelection | back to summary |
|---|---|
| private PivotSelectionRule pivotSelection The pivot selection method to use. | |
| solutionCallback | back to summary |
|---|---|
| private SolutionCallback solutionCallback The solution callback to access the best solution found so far in case the optimizer fails to find an optimal solution within the iteration limits. | |
| SimplexSolver | back to summary |
|---|---|
| public SimplexSolver() Builds a simplex solver with default settings. | |
| SimplexSolver | back to summary |
|---|---|
| public SimplexSolver(final double epsilon) Builds a simplex solver with a specified accepted amount of error.
| |
| SimplexSolver | back to summary |
|---|---|
| public SimplexSolver(final double epsilon, final int maxUlps) Builds a simplex solver with a specified accepted amount of error.
| |
| SimplexSolver | back to summary |
|---|---|
| public SimplexSolver(final double epsilon, final int maxUlps, final double cutOff) Builds a simplex solver with a specified accepted amount of error.
| |
| doIteration | back to summary |
|---|---|
| protected void doIteration(final SimplexTableau tableau) throws TooManyIterationsException, UnboundedSolutionException Runs one iteration of the Simplex method on the given model.
| |
| doOptimize | back to summary |
|---|---|
| public PointValuePair doOptimize() throws TooManyIterationsException, UnboundedSolutionException, NoFeasibleSolutionException Implements abstract org. Doc from org. Performs the bulk of the optimization algorithm.
| |
| getPivotColumn | back to summary |
|---|---|
| private Integer getPivotColumn(SimplexTableau tableau) Returns the column with the most negative coefficient in the objective function row.
| |
| getPivotRow | back to summary |
|---|---|
| private Integer getPivotRow(SimplexTableau tableau, final int col) Returns the row with the minimum ratio as given by the minimum ratio test (MRT).
| |
| isValidPivotColumn | back to summary |
|---|---|
| private boolean isValidPivotColumn(SimplexTableau tableau, int col) Checks whether the given column is valid pivot column, i.e. will result in a valid pivot row. When applying Bland's rule to select the pivot column, it may happen that there is no corresponding pivot row. This method will check if the selected pivot column will return a valid pivot row.
| |
| optimize | back to summary |
|---|---|
| public PointValuePair optimize(OptimizationData... optData) throws TooManyIterationsException Overrides org. Doc from org. Stores data and performs the optimization. The list of parameters is open-ended so that sub-classes can extend it with arguments specific to their concrete implementations. When the method is called multiple times, instance data is overwritten only when actually present in the list of arguments: when not specified, data set in a previous call is retained (and thus is optional in subsequent calls). Important Note Subclasses must override
| |
| parseOptimizationData | back to summary |
|---|---|
| protected void parseOptimizationData(OptimizationData... optData) Overrides org. Doc from org. Scans the list of (required and optional) optimization data that characterize the problem.
| |
| solvePhase1 | back to summary |
|---|---|
| protected void solvePhase1(final SimplexTableau tableau) throws TooManyIterationsException, UnboundedSolutionException, NoFeasibleSolutionException Solves Phase 1 of the Simplex method.
| |