simplex_lpsolve.c File Reference

Detailed Description

Implementation of the functions operating on TSimplex using the Lp_solve backend.

See Also
TSimplex, simplex.h, simplex_clp.c, simplex_glpk.c.

Definition in file simplex_lpsolve.c.

Functions

void SimplexCreate (double epsilon, unsigned int ncols, TSimplex *s)
 Constructor. More...
 
void ResetSimplex (TSimplex *s)
 Resets the simplex structure. More...
 
unsigned int SimplexNColumns (TSimplex *s)
 Gets the number of columns (i.e., variables) of the simplex structure. More...
 
unsigned int SimplexNRows (TSimplex *s)
 Gets the number of rows (i.e., constraints) of the simplex structure. More...
 
void SimplexSetColBounds (unsigned int ncol, Tinterval *i, TSimplex *s)
 Sets the bounds for a given column (i.e., variable). More...
 
void SimplexGetColBounds (unsigned int ncol, Tinterval *i, TSimplex *s)
 Gets the bounds for a given column (i.e., variable). More...
 
void SimplexGetColConstraint (unsigned int ncol, TLinearConstraint *lc, TSimplex *s)
 Gets a column from the simplex in the form of a linear constraint. More...
 
boolean SimplexColEmpty (unsigned int ncol, TSimplex *s)
 Checks if a simplex column is empty. More...
 
double SimplexGetColPrimal (unsigned int ncol, TSimplex *s)
 Gets a column primal value after solving the simplex. More...
 
double SimplexGetColDual (unsigned int ncol, TSimplex *s)
 Gets a column dual value after solving the simplex. More...
 
void SimplexSetRowBounds (unsigned int nrow, Tinterval *i, TSimplex *s)
 Sets the bounds for a given row (i.e., constraint). More...
 
void SimplexGetRowBounds (unsigned int nrow, Tinterval *i, TSimplex *s)
 Gets the bounds for a given row (i.e., constraint). More...
 
void SimplexGetRowConstraint (unsigned int nrow, TLinearConstraint *lc, TSimplex *s)
 Gets a row constraint from the simplex. More...
 
double SimplexGetRowPrimal (unsigned int nrow, TSimplex *s)
 Gets a row primal value after solving the simplex. More...
 
double SimplexGetRowDual (unsigned int nrow, TSimplex *s)
 Gets a row dual value after solving the simplex. More...
 
void SimplexAddNewConstraintRaw (TLinearConstraint *lc, TSimplex *s)
 Adds a row (i.e., a constraint) to the simplex. More...
 
void SimplexSetOptimizationFunction (TLinearConstraint *obj, TSimplex *s)
 Sets a new objective function. More...
 
void SimplexGetOptimizationFunction (TLinearConstraint *obj, TSimplex *s)
 Gets a current objective function. More...
 
double SimplexGetOptimalValueRaw (TSimplex *s)
 Gets the optimal value after optimizing the problem. More...
 
unsigned int SimplexSolve (TSimplex *s)
 Determines an optimal value. More...
 
void SimplexDelete (TSimplex *s)
 Destructor. More...
 

Function Documentation

void SimplexCreate ( double  epsilon,
unsigned int  ncols,
TSimplex s 
)

Creates a simplex structure with a given number of columns (i.e., variables) but with no rows (i.e., constraints).

Parameters
epsilonThreshold to decide if a value is too small to be added to the tableau. It is also used to set up internal simplex parameters.
ncolsNumber of columns for the tableau.
sThe simplex structure.

Definition at line 23 of file simplex_lpsolve.c.

References Error(), TSimplex::inf, TSimplex::lp, and SIMPLEX_TIMEOUT.

Referenced by ReduceBox().

void ResetSimplex ( TSimplex s)

Removes the rows (i.e., constraints) from the simplex structure.

Parameters
sThe simplex structure.

Definition at line 67 of file simplex_lpsolve.c.

References TSimplex::lp.

Referenced by ReduceBox(), and ReduceRange().

unsigned int SimplexNColumns ( TSimplex s)

Gets the number of columns (i.e., variables) of the simplex structure.

Parameters
sThe simplex structure.
Returns
The number of columns (i.e., variables) of the simplex structure.

Definition at line 72 of file simplex_lpsolve.c.

References TSimplex::lp.

Referenced by SimplexGetOptimalValue(), SimplexGetOptimizationFunction(), and SimplexGetRowConstraint().

unsigned int SimplexNRows ( TSimplex s)

Gets the number of rows (i.e., constraints) of the simplex structure.

Parameters
sThe simplex structure.
Returns
The number of rows (i.e., constraints) of the simplex structure.

Definition at line 77 of file simplex_lpsolve.c.

References TSimplex::lp.

Referenced by ReduceBox(), SimplexAddNewConstraintRaw(), SimplexColEmpty(), SimplexGetColConstraint(), SimplexGetColDual(), SimplexGetColPrimal(), SimplexGetOptimalValue(), SimplexGetOptimizationFunction(), and SimplexGetRowConstraint().

void SimplexSetColBounds ( unsigned int  ncol,
Tinterval i,
TSimplex s 
)

Sets the bounds for a given column (i.e., variable).

Parameters
ncolThe column whose range we have to update.
iThe new range for the column.
sThe simplex structure.

Definition at line 83 of file simplex_lpsolve.c.

References INF, TSimplex::inf, LowerLimit(), TSimplex::lp, and UpperLimit().

Referenced by SetSimplexBounds().

void SimplexGetColBounds ( unsigned int  ncol,
Tinterval i,
TSimplex s 
)

Gets the bounds for a given column (i.e., variable).

Parameters
ncolThe column whose range we have to update.
iThe output range with the column bounds.
sThe simplex structure.

Definition at line 103 of file simplex_lpsolve.c.

References INF, TSimplex::inf, TSimplex::lp, and NewInterval().

Referenced by SimplexGetColConstraint().

void SimplexGetColConstraint ( unsigned int  ncol,
TLinearConstraint lc,
TSimplex s 
)

Gets a column from the simplex in the form of a linear constraint.

Parameters
ncolThe column whose constraint we want to get.
lcThe output linear constraint.
sThe simplex structure.

Definition at line 121 of file simplex_lpsolve.c.

References AddTerm2LinearConstraint(), InitLinearConstraint(), TSimplex::lp, NEW, SetLinearConstraintError(), SimplexGetColBounds(), and SimplexNRows().

Referenced by SimplexGetOptimalValue().

boolean SimplexColEmpty ( unsigned int  ncol,
TSimplex s 
)

Gets a column constraint from the simplex.

Parameters
ncolThe column whose constraint we want to get.
sThe simplex structure.
Returns
TRUE if the simplex column is empty.

Definition at line 146 of file simplex_lpsolve.c.

References TSimplex::lp, NEW, and SimplexNRows().

Referenced by ReduceBox().

double SimplexGetColPrimal ( unsigned int  ncol,
TSimplex s 
)

Gets a column primal value after solving the simplex.

Parameters
ncolThe column whose primal value we need.
sThe simplex structure.
Returns
The primal value for the column.

Definition at line 166 of file simplex_lpsolve.c.

References TSimplex::lp, and SimplexNRows().

double SimplexGetColDual ( unsigned int  ncol,
TSimplex s 
)

Gets a column dual value after solving the simplex.

Parameters
ncolThe column whose dual value we need.
sThe simplex structure.
Returns
The primal value for the column.

Definition at line 171 of file simplex_lpsolve.c.

References TSimplex::lp, and SimplexNRows().

void SimplexSetRowBounds ( unsigned int  nrow,
Tinterval i,
TSimplex s 
)

Sets the bounds for a given row (i.e., constraint).

Parameters
nrowThe column whose range we have to update.
iThe new range for the row.
sThe simplex structure.

Definition at line 177 of file simplex_lpsolve.c.

References INF, TSimplex::inf, IntervalSize(), LowerLimit(), TSimplex::lp, and UpperLimit().

Referenced by SimplexAddNewConstraintRaw().

void SimplexGetRowBounds ( unsigned int  nrow,
Tinterval i,
TSimplex s 
)

Gets the bounds for a given row (i.e., constraint).

Parameters
nrowThe column whose range we have to update.
iThe output range with the column bounds.
sThe simplex structure.

Definition at line 229 of file simplex_lpsolve.c.

References INF, TSimplex::inf, TSimplex::lp, and NewInterval().

Referenced by SimplexGetOptimalValue(), and SimplexGetRowConstraint().

void SimplexGetRowConstraint ( unsigned int  nrow,
TLinearConstraint lc,
TSimplex s 
)

Gets a row constraint from the simplex.

Parameters
nrowThe row whose constraint we want to get.
lcThe output linear constraint.
sThe simplex structure.

Definition at line 269 of file simplex_lpsolve.c.

References AddTerm2LinearConstraint(), InitLinearConstraint(), TSimplex::lp, NEW, SetLinearConstraintError(), SimplexGetRowBounds(), SimplexNColumns(), and SimplexNRows().

double SimplexGetRowPrimal ( unsigned int  nrow,
TSimplex s 
)

Gets a row primal value after solving the simplex.

Parameters
nrowThe row whose primal value we need.
sThe simplex structure.
Returns
The primal value for the row.

Definition at line 297 of file simplex_lpsolve.c.

References TSimplex::lp.

double SimplexGetRowDual ( unsigned int  nrow,
TSimplex s 
)

Gets a row dual value after solving the simplex.

Parameters
nrowThe row whose dual value we need.
sThe simplex structure.
Returns
The dual value for the row.

Definition at line 302 of file simplex_lpsolve.c.

References TSimplex::lp.

Referenced by SimplexGetOptimalValue().

void SimplexAddNewConstraintRaw ( TLinearConstraint lc,
TSimplex s 
)

Adds a row (i.e., a constraint) to the simplex. This function adds the row without any process of the constraint.

The input linear constraint must have the bound properly expanded (see SimplexExpandBounds) before using this function.

Parameters
lcThe linear constraint to add to the simplex.
sThe simplex structure.
See Also
SimplexAddNewConstraint

Definition at line 307 of file simplex_lpsolve.c.

References GetLinearConstraintCoefficients(), GetLinearConstraintError(), GetLinearConstraintVariable(), TSimplex::lp, NEW, PrintInterval(), PrintLinearConstraint(), SimplexNRows(), SimplexSetRowBounds(), and TRUE.

Referenced by SimplexAddNewConstraint().

void SimplexSetOptimizationFunction ( TLinearConstraint obj,
TSimplex s 
)

Sets a new objective function. We always minimize the objective functions. To maximize just invert the linear constraint before setting it as an optimal function.

Parameters
objThe linear constraint representing the new objective function.
sThe simplex structure.
See Also
SimplexAddNewConstraint, InvertLinearConstraint.

Definition at line 340 of file simplex_lpsolve.c.

References GetLinearConstraintCoefficient(), GetLinearConstraintCoefficients(), GetLinearConstraintVariable(), GetNumTermsInLinearConstraint(), TSimplex::lp, and NEW.

Referenced by ReduceRange().

void SimplexGetOptimizationFunction ( TLinearConstraint obj,
TSimplex s 
)

Gets the current objective function.

Parameters
objThe output linear constraint with the current objective function.
sThe simplex structure.

Definition at line 374 of file simplex_lpsolve.c.

References AddTerm2LinearConstraint(), InitLinearConstraint(), TSimplex::lp, NEW, SimplexNColumns(), and SimplexNRows().

Referenced by SimplexGetOptimalValue().

double SimplexGetOptimalValueRaw ( TSimplex s)

Gets the optimal value after optimizing the problem. This function returns the value as given by the simplex engine in use. See SimplexGetOptimalValue for a procedure that adjusts this raw value to get a numerically safe optimal (i.e., it compensates for floating points rounding errors).

Parameters
sThe simplex structure.
Returns
The optimal value.
See Also
SimplexGetOptimalValue

Definition at line 394 of file simplex_lpsolve.c.

References TSimplex::lp.

Referenced by ReduceRange(), and SimplexGetOptimalValue().

unsigned int SimplexSolve ( TSimplex s)

Determines an optimal value given a set of constraints and an objective function.

Parameters
sThe simplex structure.
Returns
The state after solving: REDUCED_BOX, EMPTY_BOX, UNBOUNDED_BOX, ERROR_IN_PROCESS.

Definition at line 399 of file simplex_lpsolve.c.

References EMPTY_BOX, ERROR_IN_PROCESS, TSimplex::lp, REDUCED_BOX, and UNBOUNDED_BOX.

Referenced by ReduceRange().

void SimplexDelete ( TSimplex s)

Deletes the TSimplex structure and frees the allocated memory.

Parameters
sThe simplex structure.

Definition at line 423 of file simplex_lpsolve.c.

References TSimplex::lp.

Referenced by ReduceBox().