FLOPC++
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | Friends | List of all members
flopc::MP_model Class Reference

This is the anchor point for all constructs in a FlopC++ model.The constructors take an OsiSolverInterface, and (optionally) a replacemente for the Messenger class. There are some built-in changes to the verbosity for output.
The main methods to use are: More...

#include <MP_model.hpp>

Collaboration diagram for flopc::MP_model:
Collaboration graph
[legend]

Public Types

enum  MP_direction { MINIMIZE =1, MAXIMIZE =-1 }
 used when calling the solve() method. More...
 
enum  MP_status {
  OPTIMAL, PRIMAL_INFEASIBLE, DUAL_INFEASIBLE, ABANDONED,
  SOLVER_ONLY, ATTACHED, DETACHED
}
 Reflects the state of the solution from solve() More...
 

Public Member Functions

 MP_model (OsiSolverInterface *s, Messenger *m=new NormalMessenger)
 Constructs an MP_model from an OsiSolverInterface *. More...
 
 ~MP_model ()
 
MP_status getStatus () const
 Returns the current status of the model-solver interaction. This method will return the current understanding of the model in regard to the solver's state. More...
 
void silent ()
 used to silence FlopC++ More...
 
void verbose ()
 used to help understanding and debugging FlopC++'s behavior. More...
 
void setSolver (OsiSolverInterface *s)
 allows for replacement of the solver used. More...
 
OsiSolverInterface * operator-> ()
 allows access to the OsiSolverInterface * More...
 
MP_modeladd (MP_constraint &c)
 Adds a constrataint block to the model. More...
 
void maximize ()
 
void maximize (const MP_expression &obj)
 
void minimize ()
 
void minimize (const MP_expression &obj)
 
void minimize_max (MP_set &d, const MP_expression &obj)
 
void setObjective (const MP_expression &o)
 sets the "current objective" to the parameter o More...
 
void attach (OsiSolverInterface *solver=NULL)
 attaches the symantic representation of a model and data to a particular OsiSolverInterface More...
 
void detach ()
 detaches an OsiSolverInterface object from the model. In essence, this will clean up any intermediate storage. A model may then be attached to another solverInterface. More...
 
MP_model::MP_status solve (const MP_model::MP_direction &dir)
 
double getInfinity () const
 
void add (MP_variable *v)
 Adds a variable to the MP_model. More...
 
void addRow (const Constraint &c)
 Adds a constraint to the MP_model. More...
 
MessengergetMessenger ()
 

Static Public Member Functions

static MP_modelgetDefaultModel ()
 
static MP_modelgetCurrentModel ()
 

Public Attributes

const double * solution
 
const double * reducedCost
 
const double * rowPrice
 
const double * rowActivity
 
OsiSolverInterface * Solver
 

Private Types

typedef std::set< MP_variable * >
::iterator 
varIt
 
typedef std::set
< MP_constraint * >::iterator 
conIt
 

Private Member Functions

 MP_model (const MP_model &)
 
MP_modeloperator= (const MP_model &)
 
void add (MP_constraint *c)
 

Static Private Member Functions

static void assemble (std::vector< Coef > &v, std::vector< Coef > &av)
 

Private Attributes

Messengermessenger
 
MP_expression Objective
 
std::set< MP_constraint * > Constraints
 
std::set< MP_variable * > Variables
 
int m
 
int n
 
int nz
 
int * Cst
 
int * Clg
 
int * Rnr
 
double * Elm
 
double * bl
 
double * bu
 
double * c
 
double * l
 
double * u
 
MP_status mSolverState
 

Static Private Attributes

static MP_modeldefault_model = *new MP_model(0)
 
static MP_modelcurrent_model = &MP_model::default_model
 

Friends

class MP_constraint
 

Detailed Description

This is the anchor point for all constructs in a FlopC++ model.

The constructors take an OsiSolverInterface, and (optionally) a replacemente for the Messenger class. There are some built-in changes to the verbosity for output.
The main methods to use are:

Definition at line 89 of file MP_model.hpp.

Member Typedef Documentation

typedef std::set<MP_constraint* >::iterator flopc::MP_model::conIt
private

Definition at line 240 of file MP_model.hpp.

typedef std::set<MP_variable* >::iterator flopc::MP_model::varIt
private

Definition at line 239 of file MP_model.hpp.

Member Enumeration Documentation

used when calling the solve() method.

Enumerator
MINIMIZE 
MAXIMIZE 

Definition at line 93 of file MP_model.hpp.

Reflects the state of the solution from solve()

Enumerator
OPTIMAL 

if the solve method is called and the optimal solution found.

PRIMAL_INFEASIBLE 

if solve is called and solver finds model primal infeasible.

DUAL_INFEASIBLE 

if solve is called and solver finds the model dual infeasible.

ABANDONED 

if solve is called and solver abandons the problem (time?, iter limit?)

SOLVER_ONLY 

A solver is placed in the constructor, but it is not yet attached or solved.

ATTACHED 

A solver is attached, but not yet solved.

DETACHED 

No solver is attached.

Definition at line 97 of file MP_model.hpp.

Constructor & Destructor Documentation

MP_model::MP_model ( OsiSolverInterface *  s,
Messenger m = new NormalMessenger 
)

Constructs an MP_model from an OsiSolverInterface *.

Definition at line 61 of file MP_model.cpp.

References current_model.

flopc::MP_model::~MP_model ( )
inline

Definition at line 119 of file MP_model.hpp.

References messenger.

flopc::MP_model::MP_model ( const MP_model )
private

Member Function Documentation

MP_model & MP_model::add ( MP_constraint c)

Adds a constrataint block to the model.

Definition at line 68 of file MP_model.cpp.

References Constraints.

Referenced by attach(), minimize_max(), and flopc::MP_constraint::MP_constraint().

void MP_model::add ( MP_variable v)

Adds a variable to the MP_model.

Definition at line 87 of file MP_model.cpp.

References flopc::MP_variable::M, n, flopc::MP_variable::offset, and flopc::RowMajor::size().

void MP_model::add ( MP_constraint c)
private
void MP_model::addRow ( const Constraint c)
void MP_model::assemble ( std::vector< Coef > &  v,
std::vector< Coef > &  av 
)
staticprivate

Definition at line 159 of file MP_model.cpp.

References c.

Referenced by attach().

void MP_model::attach ( OsiSolverInterface *  solver = NULL)

attaches the symantic representation of a model and data to a particular OsiSolverInterface

Note
this is called as a part of minimize(), maximize(), and minimize_max(); This takes the symantic representation of the model, generates coefficients for the matrices and adds them into the OsiSolverInterface. The OsiSolverInterface may be specified at construction time, or as late as the call to attach()

Definition at line 219 of file MP_model.cpp.

References add(), assemble(), ATTACHED, bl, bu, c, Clg, flopc::Messenger::constraintDebug(), Constraints, Cst, detach(), DETACHED, flopc::discrete, Elm, flopc::EQ, flopc::GE, flopc::Messenger::generationTime(), flopc::MP_domain::getEmpty(), l, flopc::LE, m, messenger, mSolverState, n, nz, Objective, flopc::Messenger::objectiveDebug(), Rnr, Solver, flopc::Messenger::statistics(), u, and Variables.

Referenced by maximize(), and minimize().

void MP_model::detach ( )

detaches an OsiSolverInterface object from the model. In essence, this will clean up any intermediate storage. A model may then be attached to another solverInterface.

Note
a solver may only be attached to one solver at a time
Todo:
verify that on "attach", old solver is detached.
Todo:
strip all data out of the solver.

Definition at line 413 of file MP_model.cpp.

References DETACHED, mSolverState, and Solver.

Referenced by attach().

MP_model * MP_model::getCurrentModel ( )
static

Can be used to get the current model

Todo:
explain the default and current model concepts.

Definition at line 26 of file MP_model.cpp.

Referenced by flopc::MP_domain_base::display().

MP_model & MP_model::getDefaultModel ( )
static

Can be used to get the default model

Todo:
explain the default and current model concepts.

Definition at line 25 of file MP_model.cpp.

Referenced by flopc::maximize(), flopc::minimize(), flopc::minimize_max(), and flopc::MP_variable::MP_variable().

double MP_model::getInfinity ( ) const

Useful for getting an appropriate value to pass in as "infinity"

Note
some solvers may be more or less sensitive to the value.

Definition at line 79 of file MP_model.cpp.

References Solver.

Messenger* flopc::MP_model::getMessenger ( )
inline

Gets the current messenger.

Definition at line 235 of file MP_model.hpp.

References messenger.

Referenced by flopc::MP_domain_base::display().

MP_status flopc::MP_model::getStatus ( ) const
inline

Returns the current status of the model-solver interaction. This method will return the current understanding of the model in regard to the solver's state.

Note
It is not kept up to date if a call is made directly to the solver. Only if the MP_model interface is used.
See Also
MP_status

Definition at line 130 of file MP_model.hpp.

References mSolverState.

void MP_model::maximize ( )

Binds the data and calls the solver to maximize the current objective expression

Definition at line 181 of file MP_model.cpp.

References attach(), MAXIMIZE, solve(), and Solver.

Referenced by flopc::maximize().

void MP_model::maximize ( const MP_expression obj)

Binds the data and calls the solver to maximize the parameter obj objective expression

Definition at line 190 of file MP_model.cpp.

References attach(), MAXIMIZE, Objective, solve(), and Solver.

void MP_model::minimize ( )

Binds the data and calls the solver to minimize the current objective expression

Definition at line 200 of file MP_model.cpp.

References attach(), MINIMIZE, solve(), and Solver.

Referenced by flopc::minimize(), and minimize_max().

void MP_model::minimize ( const MP_expression obj)

Binds the data and calls the solver to minimize the parameter obj objective expression

Definition at line 209 of file MP_model.cpp.

References attach(), MINIMIZE, Objective, solve(), and Solver.

void MP_model::minimize_max ( MP_set d,
const MP_expression obj 
)

Binds the data and calls the solver to minimize maximum value of the parameter obj objective expression

Definition at line 137 of file MP_model.cpp.

References add(), and minimize().

Referenced by flopc::minimize_max().

OsiSolverInterface* flopc::MP_model::operator-> ( )
inline

allows access to the OsiSolverInterface *

Definition at line 150 of file MP_model.hpp.

References Solver.

MP_model& flopc::MP_model::operator= ( const MP_model )
private
void MP_model::setObjective ( const MP_expression o)

sets the "current objective" to the parameter o

Definition at line 133 of file MP_model.cpp.

References Objective.

void flopc::MP_model::setSolver ( OsiSolverInterface *  s)
inline

allows for replacement of the solver used.

Definition at line 145 of file MP_model.hpp.

References Solver.

void flopc::MP_model::silent ( )
inline

used to silence FlopC++

Definition at line 134 of file MP_model.hpp.

References messenger.

MP_model::MP_status MP_model::solve ( const MP_model::MP_direction dir)

calls the appropriate solving methods in the OsiSolverInterface.

Note
this is called as a part of minimize(), maximize(), and minimize_max() It expects that the object function is already set and only the direction is to be specified.
Todo:
should the direction be defaulted?

Definition at line 421 of file MP_model.cpp.

References ABANDONED, DETACHED, flopc::discrete, DUAL_INFEASIBLE, mSolverState, OPTIMAL, PRIMAL_INFEASIBLE, reducedCost, rowActivity, rowPrice, solution, Solver, SOLVER_ONLY, and Variables.

Referenced by maximize(), and minimize().

void flopc::MP_model::verbose ( )
inline

used to help understanding and debugging FlopC++'s behavior.

Definition at line 139 of file MP_model.hpp.

References messenger.

Friends And Related Function Documentation

friend class MP_constraint
friend

Definition at line 90 of file MP_model.hpp.

Member Data Documentation

double* flopc::MP_model::bl
private

Definition at line 265 of file MP_model.hpp.

Referenced by attach(), and flopc::MP_constraint::display().

double* flopc::MP_model::bu
private

Definition at line 266 of file MP_model.hpp.

Referenced by attach(), and flopc::MP_constraint::display().

double* flopc::MP_model::c
private

Definition at line 267 of file MP_model.hpp.

Referenced by assemble(), and attach().

int* flopc::MP_model::Clg
private

Definition at line 262 of file MP_model.hpp.

Referenced by attach().

std::set<MP_constraint *> flopc::MP_model::Constraints
private

Definition at line 252 of file MP_model.hpp.

Referenced by add(), and attach().

int* flopc::MP_model::Cst
private

Definition at line 261 of file MP_model.hpp.

Referenced by attach().

MP_model * MP_model::current_model = &MP_model::default_model
staticprivate

Definition at line 242 of file MP_model.hpp.

Referenced by flopc::MP_constraint::MP_constraint(), and MP_model().

MP_model & MP_model::default_model = *new MP_model(0)
staticprivate

Definition at line 241 of file MP_model.hpp.

double* flopc::MP_model::Elm
private

Definition at line 264 of file MP_model.hpp.

Referenced by attach().

double* flopc::MP_model::l
private

Definition at line 268 of file MP_model.hpp.

Referenced by attach().

int flopc::MP_model::m
private

Definition at line 258 of file MP_model.hpp.

Referenced by add(), and attach().

Messenger* flopc::MP_model::messenger
private

Definition at line 246 of file MP_model.hpp.

Referenced by attach(), getMessenger(), silent(), verbose(), and ~MP_model().

MP_status flopc::MP_model::mSolverState
private

Definition at line 270 of file MP_model.hpp.

Referenced by attach(), detach(), getStatus(), and solve().

int flopc::MP_model::n
private

Definition at line 259 of file MP_model.hpp.

Referenced by add(), and attach().

int flopc::MP_model::nz
private

Definition at line 260 of file MP_model.hpp.

Referenced by attach().

MP_expression flopc::MP_model::Objective
private

Definition at line 251 of file MP_model.hpp.

Referenced by attach(), maximize(), minimize(), and setObjective().

const double* flopc::MP_model::reducedCost

Definition at line 212 of file MP_model.hpp.

Referenced by solve().

int* flopc::MP_model::Rnr
private

Definition at line 263 of file MP_model.hpp.

Referenced by attach().

const double* flopc::MP_model::rowActivity

Definition at line 214 of file MP_model.hpp.

Referenced by flopc::MP_constraint::display(), and solve().

const double* flopc::MP_model::rowPrice

Definition at line 213 of file MP_model.hpp.

Referenced by flopc::MP_constraint::display(), and solve().

const double* flopc::MP_model::solution

Accessors for the results after a call to maximize()/minimize()

Todo:

should these be private with accessors? What if not set yet?

what if not a complete result? What if only one LP in the IP?

Definition at line 211 of file MP_model.hpp.

Referenced by flopc::VariableRef::level(), flopc::MP_variable::level(), flopc::MP_variable::operator()(), and solve().

OsiSolverInterface* flopc::MP_model::Solver
Todo:
should this be private?

Definition at line 256 of file MP_model.hpp.

Referenced by addRow(), attach(), detach(), getInfinity(), maximize(), minimize(), operator->(), setSolver(), and solve().

double* flopc::MP_model::u
private

Definition at line 269 of file MP_model.hpp.

Referenced by attach().

std::set<MP_variable *> flopc::MP_model::Variables
private

Definition at line 253 of file MP_model.hpp.

Referenced by attach(), and solve().


The documentation for this class was generated from the following files: