|
virtual int | computeScaleExp (const SVectorBase< R > &vec, const DataArray< int > &oldScaleExp) const |
| compute a single scaling vector , e.g. of a newly added row More...
|
|
virtual void | applyScaling (SPxLPBase< R > &lp) |
| applies m_colscale and m_rowscale to the lp . More...
|
|
|
| SPxScaler (const char *name, bool colFirst=false, bool doBoth=true, SPxOut *spxout=nullptr) |
| constructor More...
|
|
| SPxScaler (const SPxScaler &) |
| copy constructor More...
|
|
SPxScaler & | operator= (const SPxScaler &) |
| assignment operator More...
|
|
virtual | ~SPxScaler () |
| destructor. More...
|
|
virtual SPxScaler * | clone () const =0 |
| clone function for polymorphism More...
|
|
|
virtual const char * | getName () const |
| get name of scaler More...
|
|
virtual void | setOrder (bool colFirst) |
| set scaling order More...
|
|
virtual void | setBoth (bool both) |
| set wether column and row scaling should be performed More...
|
|
virtual void | setOutstream (SPxOut &newOutstream) |
| set message handler More...
|
|
virtual void | setRealParam (R param, const char *name="realparam") |
| set R parameter More...
|
|
virtual void | setIntParam (int param, const char *name="intparam") |
| set int parameter More...
|
|
virtual void | setTolerances (std::shared_ptr< Tolerances > &tolerances) |
| set tolerances More...
|
|
const std::shared_ptr< Tolerances > | tolerances () const |
| get the _tolerances member variable More...
|
|
|
virtual void | scale (SPxLPBase< R > &lp, bool persistent=true)=0 |
| scale SPxLP. More...
|
|
virtual void | unscale (SPxLPBase< R > &lp) |
| unscale SPxLP More...
|
|
virtual int | getColScaleExp (int i) const |
| returns scaling factor for column i More...
|
|
virtual int | getRowScaleExp (int i) const |
| returns scaling factor for row i More...
|
|
virtual void | getColUnscaled (const SPxLPBase< R > &lp, int i, DSVectorBase< R > &vec) const |
| gets unscaled column i More...
|
|
virtual R | getColMaxAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns maximum absolute value of unscaled column i More...
|
|
virtual R | getColMinAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns minumum absolute value of unscaled column i More...
|
|
virtual R | upperUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled upper bound i More...
|
|
virtual void | getUpperUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| returns unscaled upper bound vector of lp More...
|
|
virtual R | lowerUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled lower bound i More...
|
|
virtual void | getLowerUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| gets unscaled lower bound vector More...
|
|
virtual R | maxObjUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled objective function coefficient of i More...
|
|
virtual void | getMaxObjUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| gets unscaled objective function More...
|
|
virtual void | getRowUnscaled (const SPxLPBase< R > &lp, int i, DSVectorBase< R > &vec) const |
| returns unscaled row i More...
|
|
virtual R | getRowMaxAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns maximum absolute value of unscaled row i More...
|
|
virtual R | getRowMinAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns minimum absolute value of unscaled row i More...
|
|
virtual R | rhsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled right hand side i More...
|
|
virtual void | getRhsUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| gets unscaled right hand side vector More...
|
|
virtual R | lhsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled left hand side i of lp More...
|
|
virtual void | getLhsUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| returns unscaled left hand side vector of lp More...
|
|
virtual R | getCoefUnscaled (const SPxLPBase< R > &lp, int row, int col) const |
| returns unscaled coefficient of lp More...
|
|
virtual void | unscalePrimal (const SPxLPBase< R > &lp, VectorBase< R > &x) const |
| unscale dense primal solution vector given in x . More...
|
|
virtual void | unscaleSlacks (const SPxLPBase< R > &lp, VectorBase< R > &s) const |
| unscale dense slack vector given in s . More...
|
|
virtual void | unscaleDual (const SPxLPBase< R > &lp, VectorBase< R > &pi) const |
| unscale dense dual solution vector given in pi . More...
|
|
virtual void | unscaleRedCost (const SPxLPBase< R > &lp, VectorBase< R > &r) const |
| unscale dense reduced cost vector given in r . More...
|
|
virtual void | unscalePrimalray (const SPxLPBase< R > &lp, VectorBase< R > &ray) const |
| unscale primal ray given in ray . More...
|
|
virtual void | unscaleDualray (const SPxLPBase< R > &lp, VectorBase< R > &ray) const |
| unscale dual ray given in ray . More...
|
|
virtual void | scaleObj (const SPxLPBase< R > &lp, VectorBase< R > &origObj) const |
| apply scaling to objective function vector origObj . More...
|
|
virtual R | scaleObj (const SPxLPBase< R > &lp, int i, R origObj) const |
| returns scaled objective function coefficient origObj . More...
|
|
virtual R | scaleElement (const SPxLPBase< R > &lp, int row, int col, R val) const |
| returns scaled LP element in row and col . More...
|
|
virtual R | scaleLower (const SPxLPBase< R > &lp, int col, R lower) const |
| returns scaled lower bound of column col . More...
|
|
virtual R | scaleUpper (const SPxLPBase< R > &lp, int col, R upper) const |
| returns scaled upper bound of column col . More...
|
|
virtual R | scaleLhs (const SPxLPBase< R > &lp, int row, R lhs) const |
| returns scaled left hand side of row row . More...
|
|
virtual R | scaleRhs (const SPxLPBase< R > &lp, int row, R rhs) const |
| returns scaled right hand side of row row . More...
|
|
virtual R | minAbsColscale () const |
| absolute smallest column scaling factor More...
|
|
virtual R | maxAbsColscale () const |
| absolute biggest column scaling factor More...
|
|
virtual R | minAbsRowscale () const |
| absolute smallest row scaling factor More...
|
|
virtual R | maxAbsRowscale () const |
| absolute biggest row scaling factor More...
|
|
virtual R | maxColRatio (const SPxLPBase< R > &lp) const |
| maximum ratio between absolute biggest and smallest element in any column. More...
|
|
virtual R | maxRowRatio (const SPxLPBase< R > &lp) const |
| maximum ratio between absolute biggest and smallest element in any row. More...
|
|
void | computeExpVec (const std::vector< R > &vec, DataArray< int > &vecExp) |
| round vector entries to power of 2 More...
|
|
|
virtual bool | isConsistent () const |
| consistency check More...
|
|
template<class R>
class soplex::SPxScaler< R >
LP scaler abstract base class.
Instances of classes derived from SPxScaler may be loaded to SoPlex in order to scale LPs before solving them. SoPlex will load() itself to the SPxScaler and then call scale(). Generally any SPxLP can be loaded to a SPxScaler for scale()ing it. The scaling can be undone by calling unscale().
Mathematically, the scaling of a constraint matrix A can be written as \( A' = R A C \), with \( R \) and \( C \), being diagonal matrices corresponding to the row and column scale factors, respectively. Besides the constraints matrix, also the upper and lower bounds of both columns and rows need to be scaled.
Note that by default scaling is performed both before and after presolving and the former scaling factors are retained during branch-and-bound (persistent scaling). However, while within SoPlex the scaled problem is used, data accessed through the soplex.cpp interface is provided w.r.t. the original problem (i.e., in unscaled form). For instance, consider a scaled constraints matrix A' that is extended by artificial slack variables to the matrix (A',I). A basis \( B' = [(A',I)P]_{[1:m][1:m] }\) (with P being a permutation matrix) for the scaled problem corresponds to the basis \( B = R^{-1} [(A',I)P]_{[1:m][1:m]} [P^{T} \tilde{C}^{-1} P]_{[1:m][1:m] } \). In this equation, \( \tilde{C} \) is of the form
\[ \begin{array}{cc} C & 0 \\ O & R^{-1} \end{array} \]
Note that in SoPlex only scaling factors \( 2^k, k \in \mathbb{Z} \) are used.
Definition at line 86 of file spxscaler.h.