|
virtual int | computeScaleExp (const SVectorBase< R > &vec, const DataArray< int > &oldScaleExp) const |
| compute a single scaling vector , e.g. of a newly added row
|
|
virtual void | applyScaling (SPxLPBase< R > &lp) |
| applies m_colscale and m_rowscale to the lp .
|
|
|
| SPxScaler (const char *name, bool colFirst=false, bool doBoth=true, SPxOut *spxout=nullptr) |
| constructor
|
|
| SPxScaler (const SPxScaler &) |
| copy constructor
|
|
SPxScaler & | operator= (const SPxScaler &) |
| assignment operator
|
|
virtual | ~SPxScaler () |
| destructor.
|
|
virtual SPxScaler * | clone () const =0 |
| clone function for polymorphism
|
|
|
virtual const char * | getName () const |
| get name of scaler
|
|
virtual void | setOrder (bool colFirst) |
| set scaling order
|
|
virtual void | setBoth (bool both) |
| set wether column and row scaling should be performed
|
|
virtual void | setOutstream (SPxOut &newOutstream) |
| set message handler
|
|
virtual void | setRealParam (R param, const char *name="realparam") |
| set R parameter
|
|
virtual void | setIntParam (int param, const char *name="intparam") |
| set int parameter
|
|
virtual void | setTolerances (std::shared_ptr< Tolerances > &tolerances) |
| set tolerances
|
|
const std::shared_ptr< Tolerances > | tolerances () const |
| get the _tolerances member variable
|
|
|
virtual void | scale (SPxLPBase< R > &lp, bool persistent=true)=0 |
| scale SPxLP.
|
|
virtual void | unscale (SPxLPBase< R > &lp) |
| unscale SPxLP
|
|
virtual int | getColScaleExp (int i) const |
| returns scaling factor for column i
|
|
virtual int | getRowScaleExp (int i) const |
| returns scaling factor for row i
|
|
virtual void | getColUnscaled (const SPxLPBase< R > &lp, int i, DSVectorBase< R > &vec) const |
| gets unscaled column i
|
|
virtual R | getColMaxAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns maximum absolute value of unscaled column i
|
|
virtual R | getColMinAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns minumum absolute value of unscaled column i
|
|
virtual R | upperUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled upper bound i
|
|
virtual void | getUpperUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| returns unscaled upper bound vector of lp
|
|
virtual R | lowerUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled lower bound i
|
|
virtual void | getLowerUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| gets unscaled lower bound vector
|
|
virtual R | maxObjUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled objective function coefficient of i
|
|
virtual void | getMaxObjUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| gets unscaled objective function
|
|
virtual void | getRowUnscaled (const SPxLPBase< R > &lp, int i, DSVectorBase< R > &vec) const |
| returns unscaled row i
|
|
virtual R | getRowMaxAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns maximum absolute value of unscaled row i
|
|
virtual R | getRowMinAbsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns minimum absolute value of unscaled row i
|
|
virtual R | rhsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled right hand side i
|
|
virtual void | getRhsUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| gets unscaled right hand side vector
|
|
virtual R | lhsUnscaled (const SPxLPBase< R > &lp, int i) const |
| returns unscaled left hand side i of lp
|
|
virtual void | getLhsUnscaled (const SPxLPBase< R > &lp, VectorBase< R > &vec) const |
| returns unscaled left hand side vector of lp
|
|
virtual R | getCoefUnscaled (const SPxLPBase< R > &lp, int row, int col) const |
| returns unscaled coefficient of lp
|
|
virtual void | unscalePrimal (const SPxLPBase< R > &lp, VectorBase< R > &x) const |
| unscale dense primal solution vector given in x .
|
|
virtual void | unscaleSlacks (const SPxLPBase< R > &lp, VectorBase< R > &s) const |
| unscale dense slack vector given in s .
|
|
virtual void | unscaleDual (const SPxLPBase< R > &lp, VectorBase< R > &pi) const |
| unscale dense dual solution vector given in pi .
|
|
virtual void | unscaleRedCost (const SPxLPBase< R > &lp, VectorBase< R > &r) const |
| unscale dense reduced cost vector given in r .
|
|
virtual void | unscalePrimalray (const SPxLPBase< R > &lp, VectorBase< R > &ray) const |
| unscale primal ray given in ray .
|
|
virtual void | unscaleDualray (const SPxLPBase< R > &lp, VectorBase< R > &ray) const |
| unscale dual ray given in ray .
|
|
virtual void | scaleObj (const SPxLPBase< R > &lp, VectorBase< R > &origObj) const |
| apply scaling to objective function vector origObj .
|
|
virtual R | scaleObj (const SPxLPBase< R > &lp, int i, R origObj) const |
| returns scaled objective function coefficient origObj .
|
|
virtual R | scaleElement (const SPxLPBase< R > &lp, int row, int col, R val) const |
| returns scaled LP element in row and col .
|
|
virtual R | scaleLower (const SPxLPBase< R > &lp, int col, R lower) const |
| returns scaled lower bound of column col .
|
|
virtual R | scaleUpper (const SPxLPBase< R > &lp, int col, R upper) const |
| returns scaled upper bound of column col .
|
|
virtual R | scaleLhs (const SPxLPBase< R > &lp, int row, R lhs) const |
| returns scaled left hand side of row row .
|
|
virtual R | scaleRhs (const SPxLPBase< R > &lp, int row, R rhs) const |
| returns scaled right hand side of row row .
|
|
virtual R | minAbsColscale () const |
| absolute smallest column scaling factor
|
|
virtual R | maxAbsColscale () const |
| absolute biggest column scaling factor
|
|
virtual R | minAbsRowscale () const |
| absolute smallest row scaling factor
|
|
virtual R | maxAbsRowscale () const |
| absolute biggest row scaling factor
|
|
virtual R | maxColRatio (const SPxLPBase< R > &lp) const |
| maximum ratio between absolute biggest and smallest element in any column.
|
|
virtual R | maxRowRatio (const SPxLPBase< R > &lp) const |
| maximum ratio between absolute biggest and smallest element in any row.
|
|
void | computeExpVec (const std::vector< R > &vec, DataArray< int > &vecExp) |
| round vector entries to power of 2
|
|
|
virtual bool | isConsistent () const |
| consistency check
|
|
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.