org.apache.commons.math3.optim.linear

## Class SimplexSolver

- java.lang.Object
- - org.apache.commons.math3.optim.BaseOptimizer<PAIR>
  - - org.apache.commons.math3.optim.BaseMultivariateOptimizer<PointValuePair>
    - - org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer
      - - org.apache.commons.math3.optim.linear.LinearOptimizer
        - - org.apache.commons.math3.optim.linear.SimplexSolver

    public class SimplexSolver
    extends LinearOptimizer

Solves a linear problem using the "Two-Phase Simplex" method.

Since:
  2.0
Version:
  $Id: SimplexSolver.java 1416643 2012-12-03 19:37:14Z tn $

### Field Summary

Fields
`private static double` `DEFAULT_EPSILON` Default amount of error to accept for algorithm convergence.
`private static int` `DEFAULT_ULPS` Default amount of error to accept in floating point comparisons (as ulps).
`private double` `epsilon` Amount of error to accept for algorithm convergence.
`private int` `maxUlps` Amount of error to accept in floating point comparisons (as ulps).

### Fields inherited from class org.apache.commons.math3.optim.BaseOptimizer

`evaluations, iterations`

### Constructor Summary

Constructors
Constructor and Description
`SimplexSolver()` Builds a simplex solver with default settings.
`SimplexSolver(double epsilon, int maxUlps)` Builds a simplex solver with a specified accepted amount of error.

### Method Summary

Methods
`protected void` `doIteration(SimplexTableau tableau)` Runs one iteration of the Simplex method on the given model.
`PointValuePair` `doOptimize()` Performs the bulk of the optimization algorithm.
`private java.lang.Integer` `getPivotColumn(SimplexTableau tableau)` Returns the column with the most negative coefficient in the objective function row.
`private java.lang.Integer` `getPivotRow(SimplexTableau tableau, int col)` Returns the row with the minimum ratio as given by the minimum ratio test (MRT).
`protected void` `solvePhase1(SimplexTableau tableau)` Solves Phase 1 of the Simplex method.

### Methods inherited from class org.apache.commons.math3.optim.linear.LinearOptimizer

`getConstraints, getFunction, isRestrictedToNonNegative, optimize`

### Methods inherited from class org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer

`computeObjectiveValue, getGoalType`

### Methods inherited from class org.apache.commons.math3.optim.BaseMultivariateOptimizer

`getLowerBound, getStartPoint, getUpperBound`

### Methods inherited from class org.apache.commons.math3.optim.BaseOptimizer

`getConvergenceChecker, getEvaluations, getIterations, getMaxEvaluations, getMaxIterations, incrementEvaluationCount, incrementIterationCount`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### DEFAULT_EPSILON

    private static final double DEFAULT_EPSILON

Default amount of error to accept for algorithm convergence.

See Also:
  Constant Field Values

#### DEFAULT_ULPS

    private static final int DEFAULT_ULPS

Default amount of error to accept in floating point comparisons (as ulps).

See Also:
  Constant Field Values

#### epsilon

    private final double epsilon

Amount of error to accept for algorithm convergence.

#### maxUlps

    private final int maxUlps

Amount of error to accept in floating point comparisons (as ulps).

### Constructor Detail

#### SimplexSolver

    public SimplexSolver()

Builds a simplex solver with default settings.

#### SimplexSolver

    public SimplexSolver(double epsilon,
                 int maxUlps)

Builds a simplex solver with a specified accepted amount of error.

Parameters:
  `epsilon` - Amount of error to accept for algorithm convergence.
  `maxUlps` - Amount of error to accept in floating point comparisons.

### Method Detail

#### getPivotColumn

    private java.lang.Integer getPivotColumn(SimplexTableau tableau)

Returns the column with the most negative coefficient in the objective function row.

Parameters:
  `tableau` - Simple tableau for the problem.
Returns:
  the column with the most negative coefficient.

#### getPivotRow

    private java.lang.Integer getPivotRow(SimplexTableau tableau,
                                int col)

Returns the row with the minimum ratio as given by the minimum ratio test (MRT).

Parameters:
  `tableau` - Simple tableau for the problem.
  `col` - Column to test the ratio of (see `getPivotColumn(SimplexTableau)`).
Returns:
  the row with the minimum ratio.

#### doIteration

    protected void doIteration(SimplexTableau tableau)
                        throws TooManyIterationsException,
                               UnboundedSolutionException

Runs one iteration of the Simplex method on the given model.

Parameters:
  `tableau` - Simple tableau for the problem.
Throws:
  `TooManyIterationsException` - if the allowed number of iterations has been exhausted.
  `UnboundedSolutionException` - if the model is found not to have a bounded solution.

#### solvePhase1

    protected void solvePhase1(SimplexTableau tableau)
                        throws TooManyIterationsException,
                               UnboundedSolutionException,
                               NoFeasibleSolutionException

Solves Phase 1 of the Simplex method.

Parameters:
  `tableau` - Simple tableau for the problem.
Throws:
  `TooManyIterationsException` - if the allowed number of iterations has been exhausted.
  `UnboundedSolutionException` - if the model is found not to have a bounded solution.
  `NoFeasibleSolutionException` - if there is no feasible solution?

#### doOptimize

    public PointValuePair doOptimize()
                              throws TooManyIterationsException,
                                     UnboundedSolutionException,
                                     NoFeasibleSolutionException

Performs the bulk of the optimization algorithm.

Specified by:
  `doOptimize` in class `BaseOptimizer<PointValuePair>`
Returns:
  the point/value pair giving the optimal value of the objective function.
Throws:
  `TooManyIterationsException`
  `UnboundedSolutionException`
  `NoFeasibleSolutionException`