Abstract pricer base class.Class SPxPricer is a pure virtual class defining the interface for pricer classes to be used by SoPlex. The pricer's task is to select a vector to enter or leave the simplex basis, depending on the chosen simplex type. More...
#include <spxpricer.h>
Classes | |
struct | IdxCompare |
Compare class to sort idx/val pairs, used for hypersparse pricing leaving. More... | |
struct | IdxElement |
Public Types | |
enum | ViolationType { NOT_VIOLATED = 0, VIOLATED = 1, VIOLATED_AND_CHECKED = 2 } |
Public Member Functions | |
Initialization | |
virtual const char * | getName () const |
get name of pricer. More... | |
virtual void | load (SPxSolver *p_solver) |
loads LP. More... | |
virtual void | clear () |
unloads LP. More... | |
virtual SPxSolver * | solver () const |
returns loaded SPxSolver object. More... | |
virtual Real | epsilon () const |
returns violation bound theeps. More... | |
virtual void | setEpsilon (Real eps) |
sets violation bound. More... | |
virtual void | setType (SPxSolver::Type) |
sets pricing type. More... | |
virtual void | setRep (SPxSolver::Representation) |
sets basis representation. More... | |
Pivoting | |
virtual int | selectLeave ()=0 |
returns selected index to leave basis. More... | |
virtual void | left4 (int, SPxId) |
performs leaving pivot. More... | |
virtual SPxId | selectEnter ()=0 |
selects Id to enter basis. More... | |
virtual void | entered4 (SPxId, int) |
performs entering pivot. More... | |
Extension | |
virtual void | addedVecs (int) |
n vectors have been added to loaded LP. More... | |
virtual void | addedCoVecs (int) |
n covectors have been added to loaded LP. More... | |
Shrinking | |
virtual void | removedVec (int) |
vector i was removed from loaded LP. More... | |
virtual void | removedVecs (const int *) |
vectors given by perm have been removed from loaded LP. More... | |
virtual void | removedCoVec (int) |
covector i was removed from loaded LP. More... | |
virtual void | removedCoVecs (const int *) |
covectors given by perm have been removed from loaded LP. More... | |
Debugging | |
virtual bool | isConsistent () const |
Constructors / Destructors | |
SPxPricer (const char *p_name) | |
constructor More... | |
SPxPricer (const SPxPricer &old) | |
copy constructor More... | |
SPxPricer & | operator= (const SPxPricer &rhs) |
assignment operator More... | |
virtual | ~SPxPricer () |
destructor. More... | |
virtual SPxPricer * | clone () const =0 |
clone function for polymorphism More... | |
Protected Attributes | |
IdxCompare | compare |
Data | |
const char * | m_name |
name of the pricer More... | |
SPxSolver * | thesolver |
the solver More... | |
Real | theeps |
violation bound More... | |
Abstract pricer base class.
Class SPxPricer is a pure virtual class defining the interface for pricer classes to be used by SoPlex. The pricer's task is to select a vector to enter or leave the simplex basis, depending on the chosen simplex type.
An SPxPricer first loads the SoPlex object for which pricing is to be performed. Then, depending of the SPxSolver::Type, methods selectEnter() and entered4() (for entering Simplex) or selectLeave() and left4() (for leaving Simplex) are called by SoPlex. The SPxPricer object is informed of a change of the SPxSolver::Type by calling method setType().
Definition at line 46 of file spxpricer.h.
enum ViolationType |
Enumerator | |
---|---|
NOT_VIOLATED | |
VIOLATED | |
VIOLATED_AND_CHECKED |
Definition at line 93 of file spxpricer.h.
|
explicit |
constructor
Definition at line 263 of file spxpricer.h.
copy constructor
Definition at line 270 of file spxpricer.h.
|
virtual |
|
virtual |
n
covectors have been added to loaded LP.
Reimplemented in SPxSteepPR, SPxWeightPR, SPxDevexPR, and SPxHybridPR.
Definition at line 225 of file spxpricer.h.
Referenced by SPxHybridPR::addedCoVecs().
|
virtual |
n
vectors have been added to loaded LP.
Reimplemented in SPxSteepPR, SPxWeightPR, SPxDevexPR, and SPxHybridPR.
Definition at line 222 of file spxpricer.h.
Referenced by SPxHybridPR::addedVecs().
|
virtual |
unloads LP.
Reimplemented in SPxSteepPR, SPxAutoPR, and SPxHybridPR.
Definition at line 118 of file spxpricer.h.
Referenced by SPxHybridPR::clear(), SPxAutoPR::clear(), SPxSolver::loadLP(), SPxSolver::read(), SPxSolver::reLoad(), SPxSolver::setPricer(), and SPxSolver::SPxSolver().
|
pure virtual |
clone function for polymorphism
Implemented in SPxHybridPR, SPxSteepPR, SPxWeightPR, SPxParMultPR, SPxDevexPR, SPxAutoPR, SPxDantzigPR, and SPxSteepExPR.
Referenced by SPxSolver::operator=(), SPxSolver::SPxSolver(), and SPxPricer::~SPxPricer().
|
virtual |
performs entering pivot.
Method entered4() is called after each simplex iteration in ENTER mode. It informs the SPxPricer that variable id
has entered at the n
'th position. When being called, all vectors of SoPlex involved in such an entering update are setup correctly and may be accessed via the corresponding methods (fVec(), pVec(), etc.). In general, argument id
will be the one returned by the SPxPricer at the previous call to selectEnter(). However, one can not rely on this.
Reimplemented in SPxSteepPR, SPxDevexPR, SPxAutoPR, and SPxHybridPR.
Definition at line 213 of file spxpricer.h.
Referenced by SPxHybridPR::entered4(), SPxAutoPR::entered4(), and SPxSolver::solve().
|
virtual |
returns violation bound theeps.
Definition at line 130 of file spxpricer.h.
References SPxPricer::theeps.
Referenced by SPxWeightPR::computeCP(), SPxWeightPR::computeRP(), SPxSolver::precisionReached(), and SPxSolver::solve().
|
virtual |
get name of pricer.
Definition at line 104 of file spxpricer.h.
References SPxPricer::m_name.
Referenced by SoPlex::getPricerName(), SPxAutoPR::selectEnter(), SPxAutoPR::selectLeave(), and SPxHybridPR::setType().
|
virtual |
Reimplemented in SPxSteepPR, SPxWeightPR, SPxDevexPR, and SPxHybridPR.
Definition at line 249 of file spxpricer.h.
Referenced by SPxHybridPR::isConsistent(), and SPxPricer::operator=().
|
virtual |
performs leaving pivot.
Method left4() is called after each simplex iteration in LEAVE mode. It informs the SPxPricer that the n
'th variable has left the basis for id
to come in at this position. When being called, all vectors of SoPlex involved in such an entering update are setup correctly and may be accessed via the corresponding methods (fVec(), pVec(), etc.). In general, argument n
will be the one returned by the SPxPricer at the previous call to selectLeave(). However, one can not rely on this.
Reimplemented in SPxSteepPR, SPxDevexPR, SPxAutoPR, and SPxHybridPR.
Definition at line 185 of file spxpricer.h.
References SPxPricer::selectEnter().
Referenced by SPxHybridPR::left4(), SPxAutoPR::left4(), and SPxSolver::solve().
|
virtual |
loads LP.
Loads the solver and LP for which pricing steps are to be performed.
Reimplemented in SPxSteepPR, SPxWeightPR, SPxParMultPR, SPxDevexPR, SPxAutoPR, and SPxHybridPR.
Definition at line 112 of file spxpricer.h.
Referenced by SPxSolver::init(), SPxSolver::operator=(), SPxSolver::setPricer(), and SPxSolver::SPxSolver().
assignment operator
Definition at line 277 of file spxpricer.h.
References SPxPricer::isConsistent(), SPxPricer::m_name, SPxPricer::theeps, and SPxPricer::thesolver.
Referenced by SPxDantzigPR::operator=(), SPxAutoPR::operator=(), SPxParMultPR::operator=(), SPxDevexPR::operator=(), SPxWeightPR::operator=(), SPxHybridPR::operator=(), and SPxSteepPR::operator=().
|
virtual |
covector i
was removed from loaded LP.
Reimplemented in SPxSteepPR, and SPxWeightPR.
Definition at line 239 of file spxpricer.h.
|
virtual |
covectors given by perm
have been removed from loaded LP.
Definition at line 242 of file spxpricer.h.
|
virtual |
vector i
was removed from loaded LP.
Reimplemented in SPxSteepPR, and SPxWeightPR.
Definition at line 233 of file spxpricer.h.
|
virtual |
vectors given by perm
have been removed from loaded LP.
Definition at line 236 of file spxpricer.h.
|
pure virtual |
selects Id to enter basis.
Selects the SPxId of a vector to enter the basis. The selected id, must not represent a basic index (i.e. solver()->isBasic(id) must be false). However, the corresponding test value needs not to be less than -epsilon(). If not, SoPlex will discard the pivot.
Note: When method selectEnter() is called by the loaded SoPlex object, all values from coTest() are up to date. However, whether the elements of test() are up to date depends on the SPxSolver::Pricing type.
Implemented in SPxSteepPR, SPxWeightPR, SPxParMultPR, SPxDevexPR, SPxAutoPR, SPxDantzigPR, and SPxHybridPR.
Referenced by SPxPricer::left4(), SPxHybridPR::selectEnter(), SPxAutoPR::selectEnter(), and SPxSolver::solve().
|
pure virtual |
returns selected index to leave basis.
Selects the index of a vector to leave the basis. The selected index i, say, must be in the range 0 <= i < solver()->dim() and its tested value must fullfill solver()->test()[i] < -epsilon().
Implemented in SPxSteepPR, SPxWeightPR, SPxParMultPR, SPxDevexPR, SPxAutoPR, SPxDantzigPR, and SPxHybridPR.
Referenced by SPxHybridPR::selectLeave(), SPxAutoPR::selectLeave(), SPxPricer::setRep(), and SPxSolver::solve().
|
virtual |
sets violation bound.
Inequality violations are accepted, if their size is less than eps
.
Reimplemented in SPxAutoPR, and SPxHybridPR.
Definition at line 138 of file spxpricer.h.
Referenced by SPxHybridPR::setEpsilon(), SPxAutoPR::setEpsilon(), and SPxSolver::solve().
|
virtual |
sets basis representation.
Informs pricer about (a change of) the loaded SoPlex's Representation.
Reimplemented in SPxSteepPR, SPxWeightPR, SPxDevexPR, SPxAutoPR, and SPxHybridPR.
Definition at line 160 of file spxpricer.h.
References SPxPricer::selectLeave().
Referenced by SPxSolver::initRep(), and SPxHybridPR::setRep().
|
virtual |
sets pricing type.
Informs pricer about (a change of) the loaded SoPlex's Type. In the sequel, only the corresponding select methods may be called.
Reimplemented in SPxSteepPR, SPxWeightPR, SPxParMultPR, SPxDevexPR, SPxAutoPR, and SPxHybridPR.
Definition at line 149 of file spxpricer.h.
References SPxSolver::coWeights, DVectorBase< R >::reDim(), SPxSolver::weights, and SPxSolver::weightsAreSetup.
Referenced by SPxAutoPR::setActivePricer(), SPxHybridPR::setType(), SPxAutoPR::setType(), and SPxSolver::solve().
|
virtual |
returns loaded SPxSolver object.
Definition at line 124 of file spxpricer.h.
References SPxPricer::thesolver.
Referenced by SPxWeightPR::addedCoVecs(), SPxWeightPR::addedVecs(), SPxParMultPR::clone(), SPxWeightPR::computeCP(), SPxWeightPR::computeLeavePenalty(), SPxWeightPR::computeRP(), SPxSolver::initRep(), SPxHybridPR::isConsistent(), SPxWeightPR::isConsistent(), SPxWeightPR::load(), SPxWeightPR::removedCoVec(), SPxWeightPR::removedCoVecs(), SPxWeightPR::removedVec(), SPxWeightPR::removedVecs(), SPxWeightPR::selectEnter(), SPxWeightPR::selectLeave(), and SPxSolver::solve().
|
protected |
Definition at line 88 of file spxpricer.h.
Referenced by SPxDevexPR::buildBestPriceVectorEnterCoDim(), SPxSteepPR::buildBestPriceVectorEnterCoDim(), SPxDevexPR::buildBestPriceVectorEnterDim(), SPxSteepPR::buildBestPriceVectorEnterDim(), SPxDevexPR::buildBestPriceVectorLeave(), and SPxSteepPR::buildBestPriceVectorLeave().
|
protected |
name of the pricer
Definition at line 54 of file spxpricer.h.
Referenced by SPxPricer::getName(), and SPxPricer::operator=().
|
protected |
violation bound
Definition at line 58 of file spxpricer.h.
Referenced by SPxPricer::epsilon(), SPxDevexPR::left4(), SPxSteepPR::left4(), SPxPricer::operator=(), SPxDevexPR::selectEnter(), SPxParMultPR::selectEnter(), SPxWeightPR::selectEnter(), SPxSteepPR::selectEnter(), SPxDantzigPR::selectEnterDenseCoDim(), SPxDantzigPR::selectEnterDenseDim(), SPxDantzigPR::selectEnterSparseCoDim(), SPxDantzigPR::selectEnterSparseDim(), SPxDantzigPR::selectEnterX(), SPxDantzigPR::selectLeave(), SPxDevexPR::selectLeave(), SPxParMultPR::selectLeave(), SPxWeightPR::selectLeave(), SPxSteepPR::selectLeave(), SPxDantzigPR::selectLeaveSparse(), and SPxAutoPR::setEpsilon().
|
protected |
the solver
Definition at line 56 of file spxpricer.h.
Referenced by SPxDevexPR::addedCoVecs(), SPxSteepPR::addedCoVecs(), SPxDevexPR::addedVecs(), SPxSteepPR::addedVecs(), SPxDevexPR::buildBestPriceVectorEnterCoDim(), SPxSteepPR::buildBestPriceVectorEnterCoDim(), SPxDevexPR::buildBestPriceVectorEnterDim(), SPxSteepPR::buildBestPriceVectorEnterDim(), SPxDevexPR::buildBestPriceVectorLeave(), SPxSteepPR::buildBestPriceVectorLeave(), SPxHybridPR::clear(), SPxAutoPR::clear(), SPxSteepPR::clear(), SPxWeightPR::computeLeavePenalty(), SPxDevexPR::entered4(), SPxSteepPR::entered4(), SPxHybridPR::isConsistent(), SPxDevexPR::isConsistent(), SPxSteepPR::isConsistent(), SPxDevexPR::left4(), SPxSteepPR::left4(), SPxHybridPR::load(), SPxAutoPR::load(), SPxDevexPR::load(), SPxParMultPR::load(), SPxWeightPR::load(), SPxSteepPR::load(), SPxPricer::operator=(), SPxSteepPR::removedCoVec(), SPxSteepPR::removedCoVecs(), SPxSteepPR::removedVec(), SPxSteepPR::removedVecs(), SPxDantzigPR::selectEnter(), SPxAutoPR::selectEnter(), SPxDevexPR::selectEnter(), SPxParMultPR::selectEnter(), SPxSteepPR::selectEnter(), SPxDantzigPR::selectEnterDenseCoDim(), SPxDevexPR::selectEnterDenseCoDim(), SPxSteepPR::selectEnterDenseCoDim(), SPxDantzigPR::selectEnterDenseDim(), SPxDevexPR::selectEnterDenseDim(), SPxSteepPR::selectEnterDenseDim(), SPxDevexPR::selectEnterHyperCoDim(), SPxSteepPR::selectEnterHyperCoDim(), SPxDevexPR::selectEnterHyperDim(), SPxSteepPR::selectEnterHyperDim(), SPxDantzigPR::selectEnterSparseCoDim(), SPxDevexPR::selectEnterSparseCoDim(), SPxSteepPR::selectEnterSparseCoDim(), SPxDantzigPR::selectEnterSparseDim(), SPxDevexPR::selectEnterSparseDim(), SPxSteepPR::selectEnterSparseDim(), SPxDantzigPR::selectEnterX(), SPxDevexPR::selectEnterX(), SPxSteepPR::selectEnterX(), SPxDantzigPR::selectLeave(), SPxAutoPR::selectLeave(), SPxDevexPR::selectLeave(), SPxParMultPR::selectLeave(), SPxWeightPR::selectLeave(), SPxSteepPR::selectLeave(), SPxDevexPR::selectLeaveHyper(), SPxSteepPR::selectLeaveHyper(), SPxDantzigPR::selectLeaveSparse(), SPxDevexPR::selectLeaveSparse(), SPxSteepPR::selectLeaveSparse(), SPxDevexPR::selectLeaveX(), SPxSteepPR::selectLeaveX(), SPxAutoPR::setActivePricer(), SPxDevexPR::setRep(), SPxSteepPR::setRep(), SPxHybridPR::setType(), SPxDevexPR::setType(), SPxParMultPR::setType(), SPxWeightPR::setType(), SPxSteepPR::setType(), SPxSteepPR::setupWeights(), SPxDevexPR::setupWeights(), and SPxPricer::solver().