Class for preProcessing and postProcessing. More...
#include <CglPreProcess.hpp>
Public Member Functions | |
Main methods | |
OsiSolverInterface * | preProcess (OsiSolverInterface &model, bool makeEquality=false, int numberPasses=5) |
preProcess problem - returning new problem. | |
OsiSolverInterface * | preProcessNonDefault (OsiSolverInterface &model, int makeEquality=0, int numberPasses=5, int tuning=0) |
preProcess problem - returning new problem. | |
void | postProcess (OsiSolverInterface &model) |
Creates solution in original model. | |
int | tightenPrimalBounds (OsiSolverInterface &model, double factor=0.0) |
Tightens primal bounds to make dual and branch and cutfaster. | |
OsiSolverInterface * | someFixed (OsiSolverInterface &model, double fractionToKeep=0.25, bool fixContinuousAsWell=false, char *keep=NULL) const |
Fix some of problem - returning new problem. | |
int | reducedCostFix (OsiSolverInterface &model) |
If we have a cutoff - fix variables. | |
Parameter set/get methods | |
void | setCutoff (double value) |
Set cutoff bound on the objective function. | |
double | getCutoff () const |
Get the cutoff bound on the objective function - always as minimize. | |
OsiSolverInterface * | originalModel () const |
The original solver associated with this model. | |
OsiSolverInterface * | startModel () const |
Solver after making clique equalities (may == original). | |
OsiSolverInterface * | modelAtPass (int iPass) const |
Copies of solver at various stages after presolve. | |
OsiSolverInterface * | modifiedModel (int iPass) const |
Copies of solver at various stages after presolve after modifications. | |
OsiPresolve * | presolve (int iPass) const |
Matching presolve information. | |
const int * | originalColumns () const |
Return a pointer to the original columns (with possible clique slacks) MUST be called before postProcess otherwise you just get 0,1,2. | |
const int * | originalRows () const |
Return a pointer to the original rows MUST be called before postProcess otherwise you just get 0,1,2. | |
int | numberSOS () const |
Number of SOS if found. | |
const int * | typeSOS () const |
Type of each SOS. | |
const int * | startSOS () const |
Start of each SOS. | |
const int * | whichSOS () const |
Columns in SOS. | |
const double * | weightSOS () const |
Weights for each SOS column. | |
void | passInProhibited (const char *prohibited, int numberColumns) |
Pass in prohibited columns. | |
const char * | prohibited () |
Updated prohibited columns. | |
Cut generator methods | |
int | numberCutGenerators () const |
Get the number of cut generators. | |
CglCutGenerator ** | cutGenerators () const |
Get the list of cut generators. | |
CglCutGenerator * | cutGenerator (int i) const |
Get the specified cut generator. | |
void | addCutGenerator (CglCutGenerator *generator) |
Add one generator - up to user to delete generators. | |
Setting/Accessing application data | |
void | setApplicationData (void *appData) |
Set application data. | |
void * | getApplicationData () const |
Get application data. | |
Message handling | |
void | passInMessageHandler (CoinMessageHandler *handler) |
Pass in Message handler (not deleted at end). | |
void | newLanguage (CoinMessages::Language language) |
Set language. | |
void | setLanguage (CoinMessages::Language language) |
Pass in Message handler (not deleted at end). | |
CoinMessageHandler * | messageHandler () const |
Return handler. | |
CoinMessages | messages () |
Return messages. | |
CoinMessages * | messagesPointer () |
Return pointer to messages. | |
Constructors and destructors etc | |
CglPreProcess () | |
Constructor. | |
CglPreProcess (const CglPreProcess &rhs) | |
Copy constructor . | |
CglPreProcess & | operator= (const CglPreProcess &rhs) |
Assignment operator. | |
~CglPreProcess () | |
Destructor. | |
void | gutsOfDestructor () |
Clears out as much as possible. | |
Private Member Functions | |
private methods | |
OsiSolverInterface * | modified (OsiSolverInterface *model, bool constraints, int &numberChanges, int iBigPass, int numberPasses) |
Return model with useful modifications. | |
void | createOriginalIndices () const |
create original columns and rows | |
void | makeInteger () |
Make continuous variables integer. | |
Private Attributes | |
Private member data | |
OsiSolverInterface * | originalModel_ |
The original solver associated with this model. | |
OsiSolverInterface * | startModel_ |
Solver after making clique equalities (may == original). | |
int | numberSolvers_ |
Number of solvers at various stages. | |
OsiSolverInterface ** | model_ |
Copies of solver at various stages after presolve. | |
OsiSolverInterface ** | modifiedModel_ |
Copies of solver at various stages after presolve after modifications. | |
OsiPresolve ** | presolve_ |
Matching presolve information. | |
CoinMessageHandler * | handler_ |
Message handler. | |
bool | defaultHandler_ |
Flag to say if handler_ is the default handler. | |
CoinMessages | messages_ |
Cgl messages. | |
void * | appData_ |
Pointer to user-defined data structure. | |
int * | originalColumn_ |
Original column numbers. | |
int * | originalRow_ |
Original row numbers. | |
int | numberCutGenerators_ |
Number of cut generators. | |
CglCutGenerator ** | generator_ |
Cut generators. | |
int | numberSOS_ |
Number of SOS if found. | |
int * | typeSOS_ |
Type of each SOS. | |
int * | startSOS_ |
Start of each SOS. | |
int * | whichSOS_ |
Columns in SOS. | |
double * | weightSOS_ |
Weights for each SOS column. | |
int | numberProhibited_ |
Number of columns in original prohibition set. | |
char * | prohibited_ |
Columns which should not be presolved e.g. SOS. |
Class for preProcessing and postProcessing.
While cuts can be added at any time in the tree, some cuts are actually just stronger versions of existing constraints. In this case they can replace those constraints rather than being added as new constraints. This is awkward in the tree but reasonable at the root node.
This is a general process class which uses other cut generators to strengthen constraints, establish that constraints are redundant, fix variables and find relationships such as x + y == 1.
Presolve will also be done.
If row names existed they may be replaced by R0000000 etc
Definition at line 34 of file CglPreProcess.hpp.
CglPreProcess::CglPreProcess | ( | ) |
Constructor.
CglPreProcess::CglPreProcess | ( | const CglPreProcess & | rhs | ) |
Copy constructor .
CglPreProcess::~CglPreProcess | ( | ) |
Destructor.
OsiSolverInterface* CglPreProcess::preProcess | ( | OsiSolverInterface & | model, | |
bool | makeEquality = false , |
|||
int | numberPasses = 5 | |||
) |
preProcess problem - returning new problem.
If makeEquality true then <= cliques converted to ==. Presolve will be done numberPasses times.
Returns NULL if infeasible
This version uses default strategy. For more control copy and edit code from this function i.e. call preProcessNonDefault
OsiSolverInterface* CglPreProcess::preProcessNonDefault | ( | OsiSolverInterface & | model, | |
int | makeEquality = 0 , |
|||
int | numberPasses = 5 , |
|||
int | tuning = 0 | |||
) |
preProcess problem - returning new problem.
If makeEquality true then <= cliques converted to ==. Presolve will be done numberPasses times.
Returns NULL if infeasible
This version assumes user has added cut generators to CglPreProcess object before calling it. As an example use coding in preProcess If makeEquality is 1 add slacks to get cliques, if 2 add slacks to get sos (but only if looks plausible) and keep sos info
void CglPreProcess::postProcess | ( | OsiSolverInterface & | model | ) |
Creates solution in original model.
int CglPreProcess::tightenPrimalBounds | ( | OsiSolverInterface & | model, | |
double | factor = 0.0 | |||
) |
Tightens primal bounds to make dual and branch and cutfaster.
Unless fixed or integral, bounds are slightly looser than they could be. Returns non-zero if problem infeasible Fudge for branch and bound - put bounds on columns of factor * largest value (at continuous) - should improve stability in branch and bound on infeasible branches (0.0 is off)
OsiSolverInterface* CglPreProcess::someFixed | ( | OsiSolverInterface & | model, | |
double | fractionToKeep = 0.25 , |
|||
bool | fixContinuousAsWell = false , |
|||
char * | keep = NULL | |||
) | const |
Fix some of problem - returning new problem.
Uses reduced costs. Optional signed character array 1 always keep, -1 always discard, 0 use djs
int CglPreProcess::reducedCostFix | ( | OsiSolverInterface & | model | ) |
If we have a cutoff - fix variables.
void CglPreProcess::setCutoff | ( | double | value | ) |
Set cutoff bound on the objective function.
When using strict comparison, the bound is adjusted by a tolerance to avoid accidentally cutting off the optimal solution.
double CglPreProcess::getCutoff | ( | ) | const |
Get the cutoff bound on the objective function - always as minimize.
OsiSolverInterface* CglPreProcess::originalModel | ( | ) | const [inline] |
The original solver associated with this model.
Definition at line 110 of file CglPreProcess.hpp.
OsiSolverInterface* CglPreProcess::startModel | ( | ) | const [inline] |
Solver after making clique equalities (may == original).
Definition at line 113 of file CglPreProcess.hpp.
OsiSolverInterface* CglPreProcess::modelAtPass | ( | int | iPass | ) | const [inline] |
Copies of solver at various stages after presolve.
Definition at line 116 of file CglPreProcess.hpp.
OsiSolverInterface* CglPreProcess::modifiedModel | ( | int | iPass | ) | const [inline] |
Copies of solver at various stages after presolve after modifications.
Definition at line 119 of file CglPreProcess.hpp.
OsiPresolve* CglPreProcess::presolve | ( | int | iPass | ) | const [inline] |
Matching presolve information.
Definition at line 122 of file CglPreProcess.hpp.
const int* CglPreProcess::originalColumns | ( | ) | const |
Return a pointer to the original columns (with possible clique slacks) MUST be called before postProcess otherwise you just get 0,1,2.
const int* CglPreProcess::originalRows | ( | ) | const |
Return a pointer to the original rows MUST be called before postProcess otherwise you just get 0,1,2.
int CglPreProcess::numberSOS | ( | ) | const [inline] |
Number of SOS if found.
Definition at line 131 of file CglPreProcess.hpp.
const int* CglPreProcess::typeSOS | ( | ) | const [inline] |
Type of each SOS.
Definition at line 134 of file CglPreProcess.hpp.
const int* CglPreProcess::startSOS | ( | ) | const [inline] |
Start of each SOS.
Definition at line 137 of file CglPreProcess.hpp.
const int* CglPreProcess::whichSOS | ( | ) | const [inline] |
Columns in SOS.
Definition at line 140 of file CglPreProcess.hpp.
const double* CglPreProcess::weightSOS | ( | ) | const [inline] |
Weights for each SOS column.
Definition at line 143 of file CglPreProcess.hpp.
void CglPreProcess::passInProhibited | ( | const char * | prohibited, | |
int | numberColumns | |||
) |
Pass in prohibited columns.
const char* CglPreProcess::prohibited | ( | ) | [inline] |
Updated prohibited columns.
Definition at line 148 of file CglPreProcess.hpp.
int CglPreProcess::numberCutGenerators | ( | ) | const [inline] |
Get the number of cut generators.
Definition at line 155 of file CglPreProcess.hpp.
CglCutGenerator** CglPreProcess::cutGenerators | ( | ) | const [inline] |
Get the list of cut generators.
Definition at line 158 of file CglPreProcess.hpp.
CglCutGenerator* CglPreProcess::cutGenerator | ( | int | i | ) | const [inline] |
Get the specified cut generator.
Definition at line 161 of file CglPreProcess.hpp.
void CglPreProcess::addCutGenerator | ( | CglCutGenerator * | generator | ) |
Add one generator - up to user to delete generators.
void CglPreProcess::setApplicationData | ( | void * | appData | ) |
Set application data.
This is a pointer that the application can store into and retrieve. This field is available for the application to optionally define and use.
void* CglPreProcess::getApplicationData | ( | ) | const |
Get application data.
void CglPreProcess::passInMessageHandler | ( | CoinMessageHandler * | handler | ) |
Pass in Message handler (not deleted at end).
void CglPreProcess::newLanguage | ( | CoinMessages::Language | language | ) |
Set language.
void CglPreProcess::setLanguage | ( | CoinMessages::Language | language | ) | [inline] |
Pass in Message handler (not deleted at end).
Definition at line 191 of file CglPreProcess.hpp.
CoinMessageHandler* CglPreProcess::messageHandler | ( | ) | const [inline] |
Return handler.
Definition at line 194 of file CglPreProcess.hpp.
CoinMessages CglPreProcess::messages | ( | ) | [inline] |
Return messages.
Definition at line 197 of file CglPreProcess.hpp.
CoinMessages* CglPreProcess::messagesPointer | ( | ) | [inline] |
Return pointer to messages.
Definition at line 200 of file CglPreProcess.hpp.
CglPreProcess& CglPreProcess::operator= | ( | const CglPreProcess & | rhs | ) |
Assignment operator.
void CglPreProcess::gutsOfDestructor | ( | ) |
Clears out as much as possible.
OsiSolverInterface* CglPreProcess::modified | ( | OsiSolverInterface * | model, | |
bool | constraints, | |||
int & | numberChanges, | |||
int | iBigPass, | |||
int | numberPasses | |||
) | [private] |
Return model with useful modifications.
If constraints true then adds any x+y=1 or x-y=0 constraints If NULL infeasible
void CglPreProcess::createOriginalIndices | ( | ) | const [private] |
create original columns and rows
void CglPreProcess::makeInteger | ( | ) | [private] |
Make continuous variables integer.
OsiSolverInterface* CglPreProcess::originalModel_ [private] |
The original solver associated with this model.
Definition at line 249 of file CglPreProcess.hpp.
OsiSolverInterface* CglPreProcess::startModel_ [private] |
Solver after making clique equalities (may == original).
Definition at line 251 of file CglPreProcess.hpp.
int CglPreProcess::numberSolvers_ [private] |
Number of solvers at various stages.
Definition at line 253 of file CglPreProcess.hpp.
OsiSolverInterface** CglPreProcess::model_ [private] |
Copies of solver at various stages after presolve.
Definition at line 255 of file CglPreProcess.hpp.
OsiSolverInterface** CglPreProcess::modifiedModel_ [private] |
Copies of solver at various stages after presolve after modifications.
Definition at line 257 of file CglPreProcess.hpp.
OsiPresolve** CglPreProcess::presolve_ [private] |
Matching presolve information.
Definition at line 259 of file CglPreProcess.hpp.
CoinMessageHandler* CglPreProcess::handler_ [private] |
Message handler.
Definition at line 262 of file CglPreProcess.hpp.
bool CglPreProcess::defaultHandler_ [private] |
Flag to say if handler_ is the default handler.
The default handler is deleted when the model is deleted. Other handlers (supplied by the client) will not be deleted.
Definition at line 269 of file CglPreProcess.hpp.
CoinMessages CglPreProcess::messages_ [private] |
Cgl messages.
Definition at line 272 of file CglPreProcess.hpp.
void* CglPreProcess::appData_ [private] |
Pointer to user-defined data structure.
Definition at line 275 of file CglPreProcess.hpp.
int* CglPreProcess::originalColumn_ [mutable, private] |
Original column numbers.
Definition at line 277 of file CglPreProcess.hpp.
int* CglPreProcess::originalRow_ [mutable, private] |
Original row numbers.
Definition at line 279 of file CglPreProcess.hpp.
int CglPreProcess::numberCutGenerators_ [private] |
Number of cut generators.
Definition at line 281 of file CglPreProcess.hpp.
CglCutGenerator** CglPreProcess::generator_ [private] |
Cut generators.
Definition at line 283 of file CglPreProcess.hpp.
int CglPreProcess::numberSOS_ [private] |
Number of SOS if found.
Definition at line 285 of file CglPreProcess.hpp.
int* CglPreProcess::typeSOS_ [private] |
Type of each SOS.
Definition at line 287 of file CglPreProcess.hpp.
int* CglPreProcess::startSOS_ [private] |
Start of each SOS.
Definition at line 289 of file CglPreProcess.hpp.
int* CglPreProcess::whichSOS_ [private] |
Columns in SOS.
Definition at line 291 of file CglPreProcess.hpp.
double* CglPreProcess::weightSOS_ [private] |
Weights for each SOS column.
Definition at line 293 of file CglPreProcess.hpp.
int CglPreProcess::numberProhibited_ [private] |
Number of columns in original prohibition set.
Definition at line 295 of file CglPreProcess.hpp.
char* CglPreProcess::prohibited_ [private] |
Columns which should not be presolved e.g. SOS.
Definition at line 297 of file CglPreProcess.hpp.