All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
List of all members | Public Types | Public Member Functions
LpSolver Class Referenceabstract

Detailed Description

This class is an abstract base class for LP solvers. This class provides a full interface for set and modify an LP problem, solve it and retrieve the solution. You can use one of the descendants as a concrete implementation, or the Lp default LP solver. However, if you would like to handle LP solvers as reference or pointer in a generic way, you can use this class directly.

#include <lemon/lp_base.h>

+ Inheritance diagram for LpSolver:

Public Types

enum  ProblemType {
  UNDEFINED = 0, INFEASIBLE = 1, FEASIBLE = 2, OPTIMAL = 3,
  UNBOUNDED = 4
}
 The problem types for primal and dual problems. More...
 
enum  VarStatus {
  BASIC, FREE, LOWER, UPPER,
  FIXED
}
 The basis status of variables. More...
 
- Public Types inherited from LpBase
enum  SolveExitStatus { SOLVED = 0, UNSOLVED = 1 }
 Possible outcomes of an LP solving procedure. More...
 
enum  Sense { MIN, MAX }
 Direction of the optimization. More...
 
enum  MessageLevel {
  MESSAGE_NOTHING, MESSAGE_ERROR, MESSAGE_WARNING, MESSAGE_NORMAL,
  MESSAGE_VERBOSE
}
 Enum for messageLevel() parameter. More...
 
typedef double Value
 The floating point type used by the solver.
 

Public Member Functions

virtual LpSolvernewSolver () const =0
 Allocate a new LP problem instance.
 
virtual LpSolvercloneSolver () const =0
 Make a copy of the LP problem.
 
Solve the LP
SolveExitStatus solve ()
 
Obtain the Solution
ProblemType primalType () const
 The type of the primal problem.
 
ProblemType dualType () const
 The type of the dual problem.
 
Value primal (Col c) const
 Return the primal value of the column. More...
 
Value primal (const Expr &e) const
 Return the primal value of the expression. More...
 
Value primalRay (Col c) const
 Returns a component of the primal ray. More...
 
Value dual (Row r) const
 Return the dual value of the row. More...
 
Value dual (const DualExpr &e) const
 Return the dual value of the dual expression. More...
 
Value dualRay (Row r) const
 Returns a component of the dual ray. More...
 
VarStatus colStatus (Col c) const
 Return the basis status of the column. More...
 
VarStatus rowStatus (Row r) const
 Return the basis status of the row. More...
 
Value primal () const
 The value of the objective function. More...
 
- Public Member Functions inherited from LpBase
virtual ~LpBase ()
 Virtual destructor.
 
const char * solverName () const
 Gives back the name of the solver.
 
Col addCol ()
 Add a new empty column (i.e a new variable) to the LP.
 
template<class T >
int addColSet (T &t)
 Adds several new columns (i.e variables) at once. More...
 
void col (Col c, const DualExpr &e)
 Set a column (i.e a dual constraint) of the LP. More...
 
DualExpr col (Col c) const
 Get a column (i.e a dual constraint) of the LP. More...
 
Col addCol (const DualExpr &e, Value o=0)
 Add a new column to the LP. More...
 
Row addRow ()
 Add a new empty row (i.e a new constraint) to the LP. More...
 
template<class T >
int addRowSet (T &t)
 Add several new rows (i.e constraints) at once. More...
 
void row (Row r, Value l, const Expr &e, Value u)
 Set a row (i.e a constraint) of the LP. More...
 
void row (Row r, const Constr &c)
 Set a row (i.e a constraint) of the LP. More...
 
Expr row (Row r) const
 Get a row (i.e a constraint) of the LP. More...
 
Row addRow (Value l, const Expr &e, Value u)
 Add a new row (i.e a new constraint) to the LP. More...
 
Row addRow (const Constr &c)
 Add a new row (i.e a new constraint) to the LP. More...
 
void erase (Col c)
 Erase a column (i.e a variable) from the LP. More...
 
void erase (Row r)
 Erase a row (i.e a constraint) from the LP. More...
 
std::string colName (Col c) const
 Get the name of a column. More...
 
void colName (Col c, const std::string &name)
 Set the name of a column. More...
 
Col colByName (const std::string &name) const
 Get the column by its name. More...
 
std::string rowName (Row r) const
 Get the name of a row. More...
 
void rowName (Row r, const std::string &name)
 Set the name of a row. More...
 
Row rowByName (const std::string &name) const
 Get the row by its name. More...
 
void coeff (Row r, Col c, Value val)
 Set an element of the coefficient matrix of the LP. More...
 
Value coeff (Row r, Col c) const
 Get an element of the coefficient matrix of the LP. More...
 
void colLowerBound (Col c, Value value)
 Set the lower bound of a column (i.e a variable) More...
 
Value colLowerBound (Col c) const
 Get the lower bound of a column (i.e a variable) More...
 
template<class T >
void colLowerBound (T &t, Value value)
 Set the lower bound of several columns (i.e variables) at once. More...
 
void colUpperBound (Col c, Value value)
 Set the upper bound of a column (i.e a variable) More...
 
Value colUpperBound (Col c) const
 Get the upper bound of a column (i.e a variable) More...
 
template<class T >
void colUpperBound (T &t, Value value)
 Set the upper bound of several columns (i.e variables) at once. More...
 
void colBounds (Col c, Value lower, Value upper)
 Set the lower and the upper bounds of a column (i.e a variable) More...
 
template<class T >
void colBounds (T &t, Value lower, Value upper)
 Set the lower and the upper bound of several columns (i.e variables) at once. More...
 
void rowLowerBound (Row r, Value value)
 Set the lower bound of a row (i.e a constraint) More...
 
Value rowLowerBound (Row r) const
 Get the lower bound of a row (i.e a constraint) More...
 
void rowUpperBound (Row r, Value value)
 Set the upper bound of a row (i.e a constraint) More...
 
Value rowUpperBound (Row r) const
 Get the upper bound of a row (i.e a constraint) More...
 
void objCoeff (Col c, Value v)
 Set an element of the objective function.
 
Value objCoeff (Col c) const
 Get an element of the objective function.
 
void obj (const Expr &e)
 Set the objective function. More...
 
Expr obj () const
 Get the objective function. More...
 
void sense (Sense sense)
 Set the direction of optimization.
 
Sense sense () const
 Query the direction of the optimization.
 
void max ()
 Set the sense to maximization.
 
void min ()
 Set the sense to maximization.
 
void clear ()
 Clear the problem.
 
void messageLevel (MessageLevel level)
 Set the message level of the solver.
 
void write (std::string file, std::string format="MPS") const
 Write the problem to a file in the given format. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from LpBase
static int id (const Col &col)
 Returns the ID of the column.
 
static Col colFromId (int id)
 Returns the column with the given ID. More...
 
static int id (const Row &row)
 Returns the ID of the row.
 
static Row rowFromId (int id)
 Returns the row with the given ID. More...
 
- Static Public Attributes inherited from LpBase
static const Value INF
 The infinity constant.
 
static const Value NaN
 The not a number constant.
 

Member Enumeration Documentation

Enumerator
UNDEFINED 

= 0. Feasible solution hasn't been found (but may exist).

INFEASIBLE 

= 1. The problem has no feasible solution.

FEASIBLE 

= 2. Feasible solution found.

OPTIMAL 

= 3. Optimal solution exists and found.

UNBOUNDED 

= 4. The cost function is unbounded.

enum VarStatus
Enumerator
BASIC 

The variable is in the basis.

FREE 

The variable is free, but not basic.

LOWER 

The variable has active lower bound.

UPPER 

The variable has active upper bound.

FIXED 

The variable is non-basic and fixed.

Member Function Documentation

SolveExitStatus solve ( )
inline

Solve the LP problem at hand

Returns
The result of the optimization procedure. Possible values and their meanings can be found in the documentation of SolveExitStatus.
Value primal ( Col  c) const
inline

Return the primal value of the column.

Precondition
The problem is solved.
Value primal ( const Expr e) const
inline

Return the primal value of the expression, i.e. the dot product of the primal solution and the expression.

Precondition
The problem is solved.
Value primalRay ( Col  c) const
inline

The primal ray is solution of the modified primal problem, where we change each finite bound to 0, and we looking for a negative objective value in case of minimization, and positive objective value for maximization. If there is such solution, that proofs the unsolvability of the dual problem, and if a feasible primal solution exists, then the unboundness of primal problem.

Precondition
The problem is solved and the dual problem is infeasible.
Note
Some solvers does not provide primal ray calculation functions.
Value dual ( Row  r) const
inline

Return the dual value of the row.

Precondition
The problem is solved.
Value dual ( const DualExpr e) const
inline

Return the dual value of the dual expression, i.e. the dot product of the dual solution and the dual expression.

Precondition
The problem is solved.
Value dualRay ( Row  r) const
inline

The dual ray is solution of the modified primal problem, where we change each finite bound to 0 (i.e. the objective function coefficients in the primal problem), and we looking for a ositive objective value. If there is such solution, that proofs the unsolvability of the primal problem, and if a feasible dual solution exists, then the unboundness of dual problem.

Precondition
The problem is solved and the primal problem is infeasible.
Note
Some solvers does not provide dual ray calculation functions.
VarStatus colStatus ( Col  c) const
inline
See Also
VarStatus
VarStatus rowStatus ( Row  r) const
inline
See Also
VarStatus
Value primal ( ) const
inline
Returns
  • INF or -INF means either infeasibility or unboundedness of the primal problem, depending on whether we minimize or maximize.
  • NaN if no primal solution is found.
  • The (finite) objective value if an optimal solution is found.