Cbc  2.9.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
List of all members
CglPreProcess Class Reference

Class for preProcessing and postProcessing. More...

#include <CglPreProcess.hpp>

+ Collaboration diagram for CglPreProcess:

Public Member Functions

Main methods
OsiSolverInterfacepreProcess (OsiSolverInterface &model, bool makeEquality=false, int numberPasses=5)
 preProcess problem - returning new problem. More...
 
OsiSolverInterfacepreProcessNonDefault (OsiSolverInterface &model, int makeEquality=0, int numberPasses=5, int tuning=0)
 preProcess problem - returning new problem. More...
 
void postProcess (OsiSolverInterface &model, bool deleteStuff=true)
 Creates solution in original model. More...
 
int tightenPrimalBounds (OsiSolverInterface &model, double factor=0.0)
 Tightens primal bounds to make dual and branch and cutfaster. More...
 
OsiSolverInterfacesomeFixed (OsiSolverInterface &model, double fractionToKeep=0.25, bool fixContinuousAsWell=false, char *keep=NULL) const
 Fix some of problem - returning new problem. More...
 
OsiSolverInterfacecliqueIt (OsiSolverInterface &model, double cliquesNeeded=0.0) const
 Replace cliques by more maximal cliques Returns NULL if rows not reduced by greater than cliquesNeeded*rows. More...
 
int reducedCostFix (OsiSolverInterface &model)
 If we have a cutoff - fix variables. More...
 
Parameter set/get methods

The set methods return true if the parameter was set to the given value, false if the value of the parameter is out of range.

The get methods return the value of the parameter.

void setCutoff (double value)
 Set cutoff bound on the objective function. More...
 
double getCutoff () const
 Get the cutoff bound on the objective function - always as minimize. More...
 
OsiSolverInterfaceoriginalModel () const
 The original solver associated with this model. More...
 
OsiSolverInterfacestartModel () const
 Solver after making clique equalities (may == original) More...
 
OsiSolverInterfacemodelAtPass (int iPass) const
 Copies of solver at various stages after presolve. More...
 
OsiSolverInterfacemodifiedModel (int iPass) const
 Copies of solver at various stages after presolve after modifications. More...
 
OsiPresolvepresolve (int iPass) const
 Matching presolve information. More...
 
const int * originalColumns ()
 Return a pointer to the original columns (with possible clique slacks) MUST be called before postProcess otherwise you just get 0,1,2. More...
 
const int * originalRows ()
 Return a pointer to the original rows MUST be called before postProcess otherwise you just get 0,1,2. More...
 
int numberSOS () const
 Number of SOS if found. More...
 
const int * typeSOS () const
 Type of each SOS. More...
 
const int * startSOS () const
 Start of each SOS. More...
 
const int * whichSOS () const
 Columns in SOS. More...
 
const double * weightSOS () const
 Weights for each SOS column. More...
 
void passInProhibited (const char *prohibited, int numberColumns)
 Pass in prohibited columns. More...
 
const char * prohibited ()
 Updated prohibited columns. More...
 
int numberIterationsPre () const
 Number of iterations PreProcessing. More...
 
int numberIterationsPost () const
 Number of iterations PostProcessing. More...
 
void passInRowTypes (const char *rowTypes, int numberRows)
 Pass in row types 0 normal 1 cut rows - will be dropped if remain in At end of preprocess cut rows will be dropped and put into cuts. More...
 
const char * rowTypes ()
 Updated row types - may be NULL Carried around and corresponds to existing rows -1 added by preprocess e.g. More...
 
const CglStoredcuts () const
 Return cuts from dropped rows. More...
 
const CglStoredcutsPointer () const
 Return pointer to cuts from dropped rows. More...
 
void update (const OsiPresolve *pinfo, const OsiSolverInterface *solver)
 Update prohibited and rowType. More...
 
void setOptions (int value)
 Set options. More...
 
Cut generator methods
int numberCutGenerators () const
 Get the number of cut generators. More...
 
CglCutGenerator ** cutGenerators () const
 Get the list of cut generators. More...
 
CglCutGeneratorcutGenerator (int i) const
 Get the specified cut generator. More...
 
void addCutGenerator (CglCutGenerator *generator)
 Add one generator - up to user to delete generators. More...
 
Setting/Accessing application data
void setApplicationData (void *appData)
 Set application data. More...
 
voidgetApplicationData () const
 Get application data. More...
 
Message handling
void passInMessageHandler (CoinMessageHandler *handler)
 Pass in Message handler (not deleted at end) More...
 
void newLanguage (CoinMessages::Language language)
 Set language. More...
 
void setLanguage (CoinMessages::Language language)
 
CoinMessageHandlermessageHandler () const
 Return handler. More...
 
CoinMessages messages ()
 Return messages. More...
 
CoinMessagesmessagesPointer ()
 Return pointer to messages. More...
 
Constructors and destructors etc
 CglPreProcess ()
 Constructor. More...
 
 CglPreProcess (const CglPreProcess &rhs)
 Copy constructor . More...
 
CglPreProcessoperator= (const CglPreProcess &rhs)
 Assignment operator. More...
 
 ~CglPreProcess ()
 Destructor. More...
 
void gutsOfDestructor ()
 Clears out as much as possible. More...
 

Private Member Functions

private methods
OsiSolverInterfacemodified (OsiSolverInterface *model, bool constraints, int &numberChanges, int iBigPass, int numberPasses)
 Return model with useful modifications. More...
 
void createOriginalIndices ()
 create original columns and rows More...
 
void makeInteger ()
 Make continuous variables integer. More...
 

Private Attributes

Private member data
OsiSolverInterfaceoriginalModel_
 The original solver associated with this model. More...
 
OsiSolverInterfacestartModel_
 Solver after making clique equalities (may == original) More...
 
int numberSolvers_
 Number of solvers at various stages. More...
 
OsiSolverInterface ** model_
 Copies of solver at various stages after presolve. More...
 
OsiSolverInterface ** modifiedModel_
 Copies of solver at various stages after presolve after modifications. More...
 
OsiPresolve ** presolve_
 Matching presolve information. More...
 
CoinMessageHandlerhandler_
 Message handler. More...
 
bool defaultHandler_
 Flag to say if handler_ is the default handler. More...
 
CoinMessages messages_
 Cgl messages. More...
 
voidappData_
 Pointer to user-defined data structure. More...
 
int * originalColumn_
 Original column numbers. More...
 
int * originalRow_
 Original row numbers. More...
 
int numberCutGenerators_
 Number of cut generators. More...
 
CglCutGenerator ** generator_
 Cut generators. More...
 
int numberSOS_
 Number of SOS if found. More...
 
int * typeSOS_
 Type of each SOS. More...
 
int * startSOS_
 Start of each SOS. More...
 
int * whichSOS_
 Columns in SOS. More...
 
double * weightSOS_
 Weights for each SOS column. More...
 
int numberProhibited_
 Number of columns in original prohibition set. More...
 
int numberIterationsPre_
 Number of iterations done in PreProcessing. More...
 
int numberIterationsPost_
 Number of iterations done in PostProcessing. More...
 
char * prohibited_
 Columns which should not be presolved e.g. SOS. More...
 
int numberRowType_
 Number of rows in original row types. More...
 
int options_
 Options 1 - original model had integer bounds before tightening 2 - don't do probing 4 - don't do duplicate rows 8 - don't do cliques 16 - some heavy probing options 64 - very heavy probing. More...
 
char * rowType_
 Row types (may be NULL) Carried around and corresponds to existing rows -1 added by preprocess e.g. More...
 
CglStored cuts_
 Cuts from dropped rows. More...
 

Detailed Description

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 36 of file CglPreProcess.hpp.

Constructor & Destructor Documentation

CglPreProcess::CglPreProcess ( )

Constructor.

CglPreProcess::CglPreProcess ( const CglPreProcess rhs)

Copy constructor .

CglPreProcess::~CglPreProcess ( )

Destructor.

Member Function Documentation

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,
bool  deleteStuff = true 
)

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

OsiSolverInterface* CglPreProcess::cliqueIt ( OsiSolverInterface model,
double  cliquesNeeded = 0.0 
) const

Replace cliques by more maximal cliques Returns NULL if rows not reduced by greater than cliquesNeeded*rows.

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 119 of file CglPreProcess.hpp.

OsiSolverInterface* CglPreProcess::startModel ( ) const
inline

Solver after making clique equalities (may == original)

Definition at line 122 of file CglPreProcess.hpp.

OsiSolverInterface* CglPreProcess::modelAtPass ( int  iPass) const
inline

Copies of solver at various stages after presolve.

Definition at line 125 of file CglPreProcess.hpp.

OsiSolverInterface* CglPreProcess::modifiedModel ( int  iPass) const
inline

Copies of solver at various stages after presolve after modifications.

Definition at line 128 of file CglPreProcess.hpp.

OsiPresolve* CglPreProcess::presolve ( int  iPass) const
inline

Matching presolve information.

Definition at line 131 of file CglPreProcess.hpp.

const int* CglPreProcess::originalColumns ( )

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 ( )

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 140 of file CglPreProcess.hpp.

const int* CglPreProcess::typeSOS ( ) const
inline

Type of each SOS.

Definition at line 143 of file CglPreProcess.hpp.

const int* CglPreProcess::startSOS ( ) const
inline

Start of each SOS.

Definition at line 146 of file CglPreProcess.hpp.

const int* CglPreProcess::whichSOS ( ) const
inline

Columns in SOS.

Definition at line 149 of file CglPreProcess.hpp.

const double* CglPreProcess::weightSOS ( ) const
inline

Weights for each SOS column.

Definition at line 152 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 157 of file CglPreProcess.hpp.

int CglPreProcess::numberIterationsPre ( ) const
inline

Number of iterations PreProcessing.

Definition at line 160 of file CglPreProcess.hpp.

int CglPreProcess::numberIterationsPost ( ) const
inline

Number of iterations PostProcessing.

Definition at line 163 of file CglPreProcess.hpp.

void CglPreProcess::passInRowTypes ( const char *  rowTypes,
int  numberRows 
)

Pass in row types 0 normal 1 cut rows - will be dropped if remain in At end of preprocess cut rows will be dropped and put into cuts.

const char* CglPreProcess::rowTypes ( )
inline

Updated row types - may be NULL Carried around and corresponds to existing rows -1 added by preprocess e.g.

x+y=1 0 normal 1 cut rows - can be dropped if wanted

Definition at line 178 of file CglPreProcess.hpp.

const CglStored& CglPreProcess::cuts ( ) const
inline

Return cuts from dropped rows.

Definition at line 181 of file CglPreProcess.hpp.

const CglStored* CglPreProcess::cutsPointer ( ) const
inline

Return pointer to cuts from dropped rows.

Definition at line 184 of file CglPreProcess.hpp.

void CglPreProcess::update ( const OsiPresolve pinfo,
const OsiSolverInterface solver 
)

Update prohibited and rowType.

void CglPreProcess::setOptions ( int  value)
inline

Set options.

Definition at line 189 of file CglPreProcess.hpp.

int CglPreProcess::numberCutGenerators ( ) const
inline

Get the number of cut generators.

Definition at line 196 of file CglPreProcess.hpp.

CglCutGenerator** CglPreProcess::cutGenerators ( ) const
inline

Get the list of cut generators.

Definition at line 199 of file CglPreProcess.hpp.

CglCutGenerator* CglPreProcess::cutGenerator ( int  i) const
inline

Get the specified cut generator.

Definition at line 202 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

Definition at line 232 of file CglPreProcess.hpp.

CoinMessageHandler* CglPreProcess::messageHandler ( ) const
inline

Return handler.

Definition at line 235 of file CglPreProcess.hpp.

CoinMessages CglPreProcess::messages ( )
inline

Return messages.

Definition at line 238 of file CglPreProcess.hpp.

CoinMessages* CglPreProcess::messagesPointer ( )
inline

Return pointer to messages.

Definition at line 241 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 ( )
private

create original columns and rows

void CglPreProcess::makeInteger ( )
private

Make continuous variables integer.

Member Data Documentation

OsiSolverInterface* CglPreProcess::originalModel_
private

The original solver associated with this model.

Definition at line 290 of file CglPreProcess.hpp.

OsiSolverInterface* CglPreProcess::startModel_
private

Solver after making clique equalities (may == original)

Definition at line 292 of file CglPreProcess.hpp.

int CglPreProcess::numberSolvers_
private

Number of solvers at various stages.

Definition at line 294 of file CglPreProcess.hpp.

OsiSolverInterface** CglPreProcess::model_
private

Copies of solver at various stages after presolve.

Definition at line 296 of file CglPreProcess.hpp.

OsiSolverInterface** CglPreProcess::modifiedModel_
private

Copies of solver at various stages after presolve after modifications.

Definition at line 298 of file CglPreProcess.hpp.

OsiPresolve** CglPreProcess::presolve_
private

Matching presolve information.

Definition at line 300 of file CglPreProcess.hpp.

CoinMessageHandler* CglPreProcess::handler_
private

Message handler.

Definition at line 303 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 310 of file CglPreProcess.hpp.

CoinMessages CglPreProcess::messages_
private

Cgl messages.

Definition at line 313 of file CglPreProcess.hpp.

void* CglPreProcess::appData_
private

Pointer to user-defined data structure.

Definition at line 316 of file CglPreProcess.hpp.

int* CglPreProcess::originalColumn_
private

Original column numbers.

Definition at line 318 of file CglPreProcess.hpp.

int* CglPreProcess::originalRow_
private

Original row numbers.

Definition at line 320 of file CglPreProcess.hpp.

int CglPreProcess::numberCutGenerators_
private

Number of cut generators.

Definition at line 322 of file CglPreProcess.hpp.

CglCutGenerator** CglPreProcess::generator_
private

Cut generators.

Definition at line 324 of file CglPreProcess.hpp.

int CglPreProcess::numberSOS_
private

Number of SOS if found.

Definition at line 326 of file CglPreProcess.hpp.

int* CglPreProcess::typeSOS_
private

Type of each SOS.

Definition at line 328 of file CglPreProcess.hpp.

int* CglPreProcess::startSOS_
private

Start of each SOS.

Definition at line 330 of file CglPreProcess.hpp.

int* CglPreProcess::whichSOS_
private

Columns in SOS.

Definition at line 332 of file CglPreProcess.hpp.

double* CglPreProcess::weightSOS_
private

Weights for each SOS column.

Definition at line 334 of file CglPreProcess.hpp.

int CglPreProcess::numberProhibited_
private

Number of columns in original prohibition set.

Definition at line 336 of file CglPreProcess.hpp.

int CglPreProcess::numberIterationsPre_
private

Number of iterations done in PreProcessing.

Definition at line 338 of file CglPreProcess.hpp.

int CglPreProcess::numberIterationsPost_
private

Number of iterations done in PostProcessing.

Definition at line 340 of file CglPreProcess.hpp.

char* CglPreProcess::prohibited_
private

Columns which should not be presolved e.g. SOS.

Definition at line 342 of file CglPreProcess.hpp.

int CglPreProcess::numberRowType_
private

Number of rows in original row types.

Definition at line 344 of file CglPreProcess.hpp.

int CglPreProcess::options_
private

Options 1 - original model had integer bounds before tightening 2 - don't do probing 4 - don't do duplicate rows 8 - don't do cliques 16 - some heavy probing options 64 - very heavy probing.

Definition at line 353 of file CglPreProcess.hpp.

char* CglPreProcess::rowType_
private

Row types (may be NULL) Carried around and corresponds to existing rows -1 added by preprocess e.g.

x+y=1 0 normal 1 cut rows - can be dropped if wanted

Definition at line 360 of file CglPreProcess.hpp.

CglStored CglPreProcess::cuts_
private

Cuts from dropped rows.

Definition at line 362 of file CglPreProcess.hpp.


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