simplex_clp.c File Reference

Detailed Description

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

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

Definition in file simplex_clp.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 22 of file simplex_clp.c.

References TSimplex::fakeRows, INF, TSimplex::lower, TSimplex::lp, NEW, TSimplex::obj, SIMPLEX_TIMEOUT, and TSimplex::upper.

void ResetSimplex ( TSimplex s)

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

Parameters
sThe simplex structure.

Definition at line 96 of file simplex_clp.c.

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 102 of file simplex_clp.c.

References TSimplex::lp.

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

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 107 of file simplex_clp.c.

References TSimplex::fakeRows, and TSimplex::lp.

Referenced by SimplexAddNewConstraintRaw(), and SimplexDelete().

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 113 of file simplex_clp.c.

References TSimplex::lower, LowerLimit(), TSimplex::lp, TSimplex::upper, and UpperLimit().

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 123 of file simplex_clp.c.

References 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 133 of file simplex_clp.c.

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

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 159 of file simplex_clp.c.

References TSimplex::lp.

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 168 of file simplex_clp.c.

References TSimplex::lp.

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 177 of file simplex_clp.c.

References TSimplex::lp.

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 187 of file simplex_clp.c.

References Error().

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 193 of file simplex_clp.c.

References TSimplex::fakeRows, TSimplex::lp, and NewInterval().

Referenced by 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 203 of file simplex_clp.c.

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

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 241 of file simplex_clp.c.

References TSimplex::fakeRows, and 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 250 of file simplex_clp.c.

References TSimplex::fakeRows, and TSimplex::lp.

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 259 of file simplex_clp.c.

References GetLinearConstraintCoefficients(), GetLinearConstraintError(), GetLinearConstraintVariables(), GetNumTermsInLinearConstraint(), LowerLimit(), TSimplex::lp, PrintInterval(), PrintLinearConstraint(), SimplexNRows(), TRUE, and UpperLimit().

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 286 of file simplex_clp.c.

References GetLinearConstraintCoefficient(), GetLinearConstraintVariable(), GetNumTermsInLinearConstraint(), TSimplex::lp, TSimplex::obj, and SimplexNColumns().

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 312 of file simplex_clp.c.

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

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 327 of file simplex_clp.c.

References TSimplex::lp.

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 332 of file simplex_clp.c.

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

void SimplexDelete ( TSimplex s)

Deletes the TSimplex structure and frees the allocated memory.

Parameters
sThe simplex structure.

Definition at line 367 of file simplex_clp.c.

References TSimplex::lower, TSimplex::lp, TSimplex::obj, SimplexNRows(), and TSimplex::upper.