85 PostStep(
const char* p_name,
int nR = 0,
int nC = 0)
169 bool isOptimal)
const;
193 , m_old_i(lp.
nRows() - 1)
194 , m_row(lp.rowVector(_i))
195 , m_row_obj(lp.rowObj(_i))
201 , m_old_i(old.m_old_i)
203 , m_row_obj(old.m_row_obj)
221 bool isOptimal)
const;
244 , m_old_i(lp.
nRows() - 1)
245 , m_row_obj(lp.rowObj(_i))
251 , m_old_i(old.m_old_i)
252 , m_row_obj(old.m_row_obj)
269 bool isOptimal)
const;
305 , m_old_i(lp.
nRows() - 1)
309 , m_strictLo(strictLo)
310 , m_strictUp(strictUp)
311 , m_maxSense(lp.spxSense() ==
SPxLP::MAXIMIZE)
312 , m_obj(lp.spxSense() ==
SPxLP::MINIMIZE ? lp.obj(_j) : -lp.obj(_j))
313 , m_col(lp.colVector(_j))
318 , m_row_obj(lp.rowObj(_i))
324 , m_old_i(old.m_old_i)
328 , m_strictLo(old.m_strictLo)
329 , m_strictUp(old.m_strictUp)
330 , m_maxSense(old.m_maxSense)
333 , m_newLo(old.m_newLo)
334 , m_newUp(old.m_newUp)
335 , m_oldLo(old.m_oldLo)
336 , m_oldUp(old.m_oldUp)
337 , m_row_obj(old.m_row_obj)
358 bool isOptimal)
const;
388 , m_old_i(lp.
nRows() - 1)
389 , m_lRhs(lhsFixed ? lp.lhs(_i) : lp.rhs(_i))
390 , m_row(lp.rowVector(_i))
391 , m_objs(lp.rowVector(_i).size())
393 , m_cols(lp.rowVector(_i).size())
394 , m_lhsFixed(lhsFixed)
395 , m_maxSense(lp.spxSense() ==
SPxLP::MAXIMIZE)
400 , m_rowobj(lp.rowObj(_i))
402 for(
int k = 0; k < m_row.
size(); ++k)
412 , m_old_i(old.m_old_i)
416 , m_fixed(old.m_fixed)
418 , m_lhsFixed(old.m_lhsFixed)
419 , m_maxSense(old.m_maxSense)
420 , m_oldLowers(old.m_oldLowers)
421 , m_oldUppers(old.m_oldUppers)
424 , m_rowobj(old.m_rowobj)
450 bool isOptimal)
const;
471 bool correctIdx =
true)
474 , m_old_j(lp.
nCols() - 1)
476 , m_obj(lp.spxSense() ==
SPxLP::MINIMIZE ? lp.obj(_j) : -lp.obj(_j))
477 , m_lower(lp.lower(_j))
478 , m_upper(lp.upper(_j))
479 , m_correctIdx(correctIdx)
480 , m_col(lp.colVector(_j))
488 , m_old_j(old.m_old_j)
491 , m_lower(old.m_lower)
492 , m_upper(old.m_upper)
493 , m_correctIdx(old.m_correctIdx)
515 bool isOptimal)
const;
550 , m_status(old.m_status)
573 bool isOptimal)
const;
598 , m_old_j(lp.
nCols() - 1)
599 , m_old_i(lp.
nRows() - 1)
600 , m_bnd(loFree ? lp.upper(_j) : lp.lower(_j))
601 , m_col(col_idx_sorted)
602 , m_lRhs(lp.colVector(_j).size())
603 , m_rowObj(lp.colVector(_j).size())
604 , m_rows(lp.colVector(_j).size())
607 for(
int k = 0; k < m_col.
size(); ++k)
611 int r = m_col.
index(k);
613 if((m_loFree && m_col.
value(k) > 0) ||
614 (!m_loFree && m_col.
value(k) < 0))
627 , m_old_j(old.m_old_j)
628 , m_old_i(old.m_old_i)
632 , m_rowObj(old.m_rowObj)
634 , m_loFree(old.m_loFree)
660 bool isOptimal)
const;
684 , m_old_j(lp.
nCols() - 1)
687 , m_lower(lp.lower(_j))
688 , m_upper(lp.upper(_j))
689 , m_row(lp.rowVector(_i))
696 , m_old_j(old.m_old_j)
699 , m_lower(old.m_lower)
700 , m_upper(old.m_upper)
724 bool isOptimal)
const;
749 , m_old_j(lp.
nCols() - 1)
750 , m_old_i(lp.
nRows() - 1)
751 , m_obj(lp.spxSense() ==
SPxLP::MINIMIZE ? lp.obj(_j) : -lp.obj(_j))
753 , m_onLhs(
EQ(slackVal, lp.lhs(_i)))
754 , m_eqCons(
EQ(lp.lhs(_i), lp.rhs(_i)))
755 , m_row(lp.rowVector(_i))
757 assert(m_row[m_j] != 0.0);
765 , m_old_j(old.m_old_j)
766 , m_old_i(old.m_old_i)
769 , m_onLhs(old.m_onLhs)
770 , m_eqCons(old.m_eqCons)
794 bool isOptimal)
const;
830 , m_maxSense(lp.spxSense() ==
SPxLP::MAXIMIZE)
831 , m_jFixed(
EQ(lp.lower(_j), lp.upper(_j)))
832 , m_jObj(lp.spxSense() ==
SPxLP::MINIMIZE ? lp.obj(_j) : -lp.obj(_j))
833 , m_kObj(lp.spxSense() ==
SPxLP::MINIMIZE ? lp.obj(_k) : -lp.obj(_k))
834 , m_aij(lp.colVector(_j).value(0))
835 , m_strictLo(lp.lower(_k) > oldLo)
836 , m_strictUp(lp.upper(_k) < oldUp)
837 , m_newLo(lp.lower(_k))
838 , m_newUp(lp.upper(_k))
841 , m_Lo_j(lp.lower(_j))
842 , m_Up_j(lp.upper(_j))
845 , m_col(lp.colVector(_k))
853 , m_maxSense(old.m_maxSense)
854 , m_jFixed(old.m_jFixed)
858 , m_strictLo(old.m_strictLo)
859 , m_strictUp(old.m_strictUp)
860 , m_newLo(old.m_newLo)
861 , m_newUp(old.m_newUp)
862 , m_oldLo(old.m_oldLo)
863 , m_oldUp(old.m_oldUp)
891 bool isOptimal)
const;
917 int maxLhsIdx,
int minRhsIdx,
const DSVector& dupRows,
919 bool isTheLast,
bool isFixedRow,
bool isFirst =
false)
922 , m_i_rowObj(lp.rowObj(_i))
923 , m_maxLhsIdx((maxLhsIdx == -1) ? -1 : maxLhsIdx)
924 , m_minRhsIdx((minRhsIdx == -1) ? -1 : minRhsIdx)
925 , m_maxSense(lp.spxSense() ==
SPxLP::MAXIMIZE)
927 , m_isLast(isTheLast)
928 , m_fixed(isFixedRow)
929 , m_nCols(lp.
nCols())
930 , m_scale(dupRows.size())
931 , m_rowObj(dupRows.size())
932 , m_rIdxLocalOld(dupRows.size())
934 , m_isLhsEqualRhs(isLhsEqualRhs)
936 Real rowScale = scale[_i];
938 for(
int k = 0; k < dupRows.
size(); ++k)
940 m_scale.
add(dupRows.
index(k), rowScale / scale[dupRows.
index(k)]);
942 m_rIdxLocalOld[k] = dupRows.
index(k);
949 , m_i_rowObj(old.m_i_rowObj)
950 , m_maxLhsIdx(old.m_maxLhsIdx)
951 , m_minRhsIdx(old.m_minRhsIdx)
952 , m_maxSense(old.m_maxSense)
953 , m_isFirst(old.m_isFirst)
954 , m_isLast(old.m_isLast)
955 , m_fixed(old.m_fixed)
956 , m_nCols(old.m_nCols)
957 , m_scale(old.m_scale)
958 , m_rowObj(old.m_rowObj)
959 , m_rIdxLocalOld(old.m_rIdxLocalOld)
961 , m_isLhsEqualRhs(old.m_isLhsEqualRhs)
987 bool isOptimal)
const;
1009 bool isFirst =
false,
bool isTheLast =
false)
1013 , m_loJ(lp.lower(_j))
1014 , m_upJ(lp.upper(_j))
1015 , m_loK(lp.lower(_k))
1016 , m_upK(lp.upper(_k))
1018 , m_isFirst(isFirst)
1019 , m_isLast(isTheLast)
1031 , m_scale(old.m_scale)
1032 , m_isFirst(old.m_isFirst)
1033 , m_isLast(old.m_isLast)
1034 , m_perm(old.m_perm)
1055 bool isOptimal)
const;
1083 , m_old_j(lp.
nCols() - 1)
1084 , m_old_i(lp.
nRows() - 1)
1085 , m_upper(lp.upper(_j))
1086 , m_lower(lp.lower(_j))
1087 , m_obj(lp.spxSense() ==
SPxLP::MINIMIZE ? lp.obj(_j) : -lp.obj(_j))
1088 , m_oldupper(oldupper)
1089 , m_oldlower(oldlower)
1091 , m_row(lp.rowVector(_i))
1092 , m_col(lp.colVector(_j))
1094 assert(m_row[m_j] != 0.0);
1101 , m_old_j(old.m_old_j)
1102 , m_old_i(old.m_old_i)
1103 , m_upper(old.m_upper)
1104 , m_lower(old.m_lower)
1106 , m_oldupper(old.m_oldupper)
1107 , m_oldlower(old.m_oldlower)
1162 , m_old_j(lp.
nCols() - 1)
1163 , m_old_i(lp.
nRows() - 1)
1164 , m_upper(lp.upper(_j))
1165 , m_lower(lp.lower(_j))
1166 , m_obj(lp.spxSense() ==
SPxLP::MINIMIZE ? lp.obj(_j) : -lp.obj(_j))
1168 , m_onLhs(
EQ(constant, lp.lhs(_i)))
1169 , m_eqCons(
EQ(lp.lhs(_i), lp.rhs(_i)))
1170 , m_row(lp.rowVector(_i))
1171 , m_col(lp.colVector(_j))
1173 assert(m_row[m_j] != 0.0);
1181 , m_old_j(old.m_old_j)
1182 , m_old_i(old.m_old_i)
1183 , m_upper(old.m_upper)
1184 , m_lower(old.m_lower)
1186 , m_const(old.m_const)
1187 , m_onLhs(old.m_onLhs)
1188 , m_eqCons(old.m_eqCons)
1214 bool isOptimal)
const;
1232 , m_origupper(origupper)
1233 , m_origlower(origlower)
1240 , m_origupper(old.m_origupper)
1241 , m_origlower(old.m_origlower)
1258 bool isOptimal)
const;
1396 m_rIdx[i] = m_rIdx[lp.
nRows() - 1];
1402 m_cIdx[j] = m_cIdx[lp.
nCols() - 1];
1448 , m_thesense(
SPxLP::MAXIMIZE)
1449 , m_keepbounds(false)
1458 , m_prim(old.m_prim)
1459 , m_slack(old.m_slack)
1460 , m_dual(old.m_dual)
1461 , m_redCost(old.m_redCost)
1462 , m_cBasisStat(old.m_cBasisStat)
1463 , m_rBasisStat(old.m_rBasisStat)
1464 , m_cIdx(old.m_cIdx)
1465 , m_rIdx(old.m_rIdx)
1466 , m_postsolved(old.m_postsolved)
1467 , m_epsilon(old.m_epsilon)
1468 , m_feastol(old.m_feastol)
1469 , m_opttol(old.m_opttol)
1470 , m_stat(old.m_stat)
1471 , m_thesense(old.m_thesense)
1472 , m_keepbounds(old.m_keepbounds)
1473 , m_addedcols(old.m_addedcols)
1474 , m_result(old.m_result)
1475 , m_cutoffbound(old.m_cutoffbound)
1476 , m_pseudoobj(old.m_pseudoobj)
1481 for(
int k = 0; k < old.
m_hist.size(); ++k)
1516 for(
int k = 0; k < m_hist.
size(); ++k)
1518 m_hist[k]->~PostStep();
1525 for(
int k = 0; k < rhs.
m_hist.size(); ++k)
1540 for(
int k = 0; k < m_hist.
size(); ++k)
1544 m_hist[k]->~PostStep();
1562 return simplify(lp, eps, delta, delta);
1585 assert(m_postsolved);
1591 assert(m_postsolved);
1597 assert(m_postsolved);
1603 assert(m_postsolved);
1609 assert(m_postsolved);
1610 return m_rBasisStat[i];
1615 assert(m_postsolved);
1616 return m_cBasisStat[j];
1620 const int rowsSize = -1,
const int colsSize = -1)
const 1622 assert(m_postsolved);
1623 assert(rowsSize < 0 || rowsSize >= m_rBasisStat.
size());
1624 assert(colsSize < 0 || colsSize >= m_cBasisStat.
size());
1626 for(
int i = 0; i < m_rBasisStat.
size(); ++i)
1627 rows[i] = m_rBasisStat[i];
1629 for(
int j = 0; j < m_cBasisStat.
size(); ++j)
1630 cols[j] = m_cBasisStat[j];
1676 #endif // _SPXMAINSM_H_
const VectorBase< R > & rhs() const
Returns right hand side vector.
DVector m_prim
unsimplified primal solution vector.
bool isNotZero(Real a, Real eps=Param::epsilon())
returns true iff |a| > eps
Real m_opttol
dual feasibility tolerance.
virtual bool isUnsimplified() const
specifies whether an optimal solution has already been unsimplified.
DataArray< PostStep * > m_hist
vector of presolve history.
Postsolves multi aggregation.
Exception class for things that should NEVER happen.This class is derived from the SoPlex exception b...
RowObjPS & operator=(const RowObjPS &rhs)
assignment operator
virtual void removeRow(int i)
Removes i 'th row.
MultiAggregationPS(const MultiAggregationPS &old)
copy constructor
free variable fixed to zero.
friend class FreeConstraintPS
Result removeRowSingleton(SPxLP &lp, const SVector &row, int &i)
remove row singletons.
DataArray< int > m_stat
preprocessing history.
EmptyConstraintPS(const SPxLP &lp, int _i)
ZeroObjColSingletonPS & operator=(const ZeroObjColSingletonPS &rhs)
assignment operator
PostStep & operator=(const PostStep &)
assignment operator
SPxMainSM(Timer::TYPE ttype=Timer::USER_TIME)
default constructor.
const VectorBase< R > & upper() const
Returns upper bound vector.
#define DEFAULT_BND_VIOL
default allowed bound violation
Real m_epsilon
epsilon zero.
THREADLOCAL const Real infinity
Postsolves variable bound fixing.
Result
Result of the simplification.
AggregationPS & operator=(const AggregationPS &rhs)
assignment operator
Postsolves duplicate rows.
int size() const
Number of used indices.
const char * m_name
name of the simplifier
DataArray< int > m_rIdxLocalOld
FixVariablePS(const FixVariablePS &old)
copy constructor
void computeMinMaxResidualActivity(SPxLP &lp, int rowNumber, int colNumber, Real &minAct, Real &maxAct)
computes the minimum and maximum residual activity for a given row and column. If colNumber is set to...
Real m_feastol
primal feasibility tolerance.
virtual PostStep * clone() const
clone function for polymorphism
DataArray< SPxSolver::VarStatus > m_rBasisStat
basis status of rows.
Exception classes for SoPlex.
SPxMainSM & operator=(const SPxMainSM &rhs)
assignment operator
virtual PostStep * clone() const
clone function for polymorphism
FreeZeroObjVariablePS(const SPxLP &lp, int _j, bool loFree, SVector col_idx_sorted)
SPxLP::SPxSense m_thesense
optimization sense.
virtual void execute(DVector &x, DVector &y, DVector &s, DVector &r, DataArray< SPxSolver::VarStatus > &cBasis, DataArray< SPxSolver::VarStatus > &rBasis, bool isOptimal) const =0
executes the postsolving.
Safe arrays of arbitrary types.Class Array provides safe arrays of arbitrary type. Array elements are accessed just like ordinary C++ array elements by means of the index operator[](). Safety is provided by.
virtual Result simplify(SPxLP &lp, Real eps, Real delta)
simplify SPxLP lp with identical primal and dual feasibility tolerance.
friend class DuplicateRowsPS
PostStep(const PostStep &old)
copy constructor.
FixVariablePS(const SPxLP &lp, SPxMainSM &simplifier, int _j, const Real val, bool correctIdx=true)
int cIdx(int j) const
returns for a given column index of the (reduced) LP the corresponding column index in the unsimplifi...
void clear()
remove all elements.
FixBoundsPS & operator=(const FixBoundsPS &rhs)
assignment operator
variable fixed to identical bounds.
RowSingletonPS & operator=(const RowSingletonPS &rhs)
assignment operator
Base class for postsolving operations.Class PostStep is an abstract base class providing the interfac...
DVector m_dual
unsimplified dual solution vector.
virtual const Vector & unsimplifiedDual()
returns a reference to the unsimplified dual solution.
FreeConstraintPS(const FreeConstraintPS &old)
copy constructor
virtual void removeCol(int i)
Removes i 'th column.
R & value(int n)
Reference to value of n 'th nonzero.
DuplicateRowsPS & operator=(const DuplicateRowsPS &rhs)
assignment operator
Postsolves empty constraints.
DataArray< Real > m_oldLowers
PostStep(const char *p_name, int nR=0, int nC=0)
constructor.
FreeColSingletonPS(const FreeColSingletonPS &old)
copy constructor
void handleExtremes(SPxLP &lp)
handles extreme values by setting them to zero or infinity.
bool m_postsolved
status of postsolving.
virtual SPxSolver::VarStatus getBasisRowStatus(int i) const
gets basis status for a single row.
int rIdx(int i) const
returns for a given row index of the (reduced) LP the corresponding row index in the unsimplified LP...
virtual void unsimplify(const Vector &x, const Vector &y, const Vector &s, const Vector &r, const SPxSolver::VarStatus rows[], const SPxSolver::VarStatus cols[], bool isOptimal=true)
reconstructs an optimal solution for the unsimplified LP.
virtual PostStep * clone() const
clone function for polymorphism
FreeColSingletonPS(const SPxLP &lp, SPxMainSM &simplifier, int _j, int _i, Real slackVal)
DataArray< Real > m_oldUppers
ZeroObjColSingletonPS(const SPxLP &lp, const SPxMainSM &, int _j, int _i)
int idx
Index of nonzero element.
LP simplification base class.
void fixColumn(SPxLP &lp, int i, bool correctIdx=true)
handles the fixing of a variable. correctIdx is true iff the index mapping has to be updated...
FreeZeroObjVariablePS & operator=(const FreeZeroObjVariablePS &rhs)
assignment operator
virtual PostStep * clone() const
clone function for polymorphism
virtual void addObjoffset(const Real val)
add objective offset.
int nRows() const
Returns number of rows in LP.
void add(const SVectorBase< S > &vec)
Append nonzeros of sv.
void spx_alloc(T &p, int n=1)
Allocate memory.
simplification could be done
DataArray< bool > m_fixed
virtual PostStep * clone() const
clone function for polymorphism
MultiAggregationPS(const SPxLP &lp, SPxMainSM &simplifier, int _i, int _j, Real constant)
Postsolves the case when constraints are removed due to a variable with zero objective that is free i...
virtual const char * getName() const
get name of simplifying step.
virtual PostStep * clone() const
clone function for polymorphism
friend class RowSingletonPS
EmptyConstraintPS(const EmptyConstraintPS &old)
copy constructor
SPxSimplifier & operator=(const SPxSimplifier &rhs)
assignment operator
SPxSense
Optimization sense.
TightenBoundsPS & operator=(const TightenBoundsPS &rhs)
assignment operator
virtual ~PostStep()
destructor.
virtual PostStep * clone() const
clone function for polymorphism
virtual PostStep * clone() const
clone function for polymorphism
SPxSolver::VarStatus m_status
Array< DSVector > m_classSetCols
stores parallel classes with non-zero row entry
RowSingletonPS(const RowSingletonPS &old)
copy constructor
FreeConstraintPS(const SPxLP &lp, int _i)
Result duplicateCols(SPxLP &lp, bool &again)
removes duplicate columns
void removeCol(SPxLP &lp, int j)
removes a column in the LP.
TightenBoundsPS(const SPxLP &lp, int j, Real origupper, Real origlower)
SPxSense spxSense() const
Returns the optimization sense.
int & index(int n)
Reference to index of n 'th nonzero.
Postsolves row singletons.
MultiAggregationPS & operator=(const MultiAggregationPS &rhs)
assignment operator
virtual PostStep * clone() const
clone function for polymorphism
Result simplifyRows(SPxLP &lp, bool &again)
performs simplification steps on the rows of the LP.
virtual void getBasis(SPxSolver::VarStatus rows[], SPxSolver::VarStatus cols[], const int rowsSize=-1, const int colsSize=-1) const
get optimal basis.
DuplicateColsPS & operator=(const DuplicateColsPS &rhs)
assignment operator
LP simplification abstract base class.Instances of classes derived from SPxSimplifier may be loaded t...
bool checkSolution(SPxLP &lp, DVector sol)
checks a solution for feasibility
virtual PostStep * clone() const
clone function for polymorphism
DuplicateColsPS(const SPxLP &lp, int _j, int _k, Real scale, DataArray< int > perm, bool isFirst=false, bool isTheLast=false)
void append(const T &t)
append element t.
friend class DoubletonEquationPS
SPxMainSM(const SPxMainSM &old)
copy constructor.
FixVariablePS & operator=(const FixVariablePS &rhs)
assignment operator
ForceConstraintPS(const SPxLP &lp, int _i, bool lhsFixed, DataArray< bool > &fixCols, DataArray< Real > &lo, DataArray< Real > &up)
Postsolves doubleton equations combined with a column singleton.
Postsolves free column singletons.
ForceConstraintPS & operator=(const ForceConstraintPS &rhs)
assignment operator
#define DEFAULT_EPS_ZERO
default allowed additive zero: 1.0 + EPS_ZERO == 1.0
comparator for class SVector::Element: compare nonzeros according to value
R obj(int i) const
Returns objective value of column i.
virtual PostStep * clone() const
clone function for polymorphism
const VectorBase< R > & lhs() const
Returns left hand side vector.
DataArray< int > m_cIdx
column index vector in original LP.
Result m_result
result of the simplification.
FixBoundsPS(const FixBoundsPS &old)
copy constructor
DuplicateColsPS(const DuplicateColsPS &old)
copy constructor
virtual Result result() const
returns result status of the simplification
variable set to its upper bound.
AggregationPS(const SPxLP &lp, int _i, int _j, Real rhs, Real oldupper, Real oldlower)
DoubletonEquationPS(const SPxLP &lp, int _j, int _k, int _i, Real oldLo, Real oldUp)
virtual PostStep * clone() const
clone function for polymorphism
DuplicateRowsPS(const DuplicateRowsPS &old)
copy constructor
DoubletonEquationPS(const DoubletonEquationPS &old)
copy constructor
variable set to its lower bound.
Array< DSVector > m_dupCols
arrange duplicate columns w.r.t. their pClass values
virtual PostStep * clone() const =0
clone function for polymorphism
Debugging, floating point type and parameter definitions.
Postsolves row objectives.
bool EQ(Real a, Real b, Real eps=Param::epsilon())
returns true iff |a-b| <= eps
DataArray< int > m_rIdx
row index vector in original LP.
Postsolves column singletons with zero objective.
TightenBoundsPS(const TightenBoundsPS &old)
copy constructor
bool m_keepbounds
keep some bounds (for boundflipping)
Everything should be within this namespace.
AggregationPS(const AggregationPS &old)
copy constructor
bool EQrel(Real a, Real b, Real eps=Param::epsilon())
returns true iff |relDiff(a,b)| <= eps
virtual bool checkBasisDim(DataArray< SPxSolver::VarStatus > rows, DataArray< SPxSolver::VarStatus > cols) const
friend class ForceConstraintPS
void handleRowObjectives(SPxLP &lp)
handle row objectives
RowSingletonPS(const SPxLP &lp, int _i, int _j, bool strictLo, bool strictUp, Real newLo, Real newUp, Real oldLo, Real oldUp)
DuplicateRowsPS(const SPxLP &lp, int _i, int maxLhsIdx, int minRhsIdx, const DSVector &dupRows, const DataArray< Real > scale, const DataArray< int > perm, const DataArray< bool > isLhsEqualRhs, bool isTheLast, bool isFixedRow, bool isFirst=false)
virtual ~SPxMainSM()
destructor.
Result aggregateVars(SPxLP &lp, const SVector &row, int &i)
aggregate two variables that appear in an equation.
Result duplicateRows(SPxLP &lp, bool &again)
removes duplicate rows.
Real m_cutoffbound
the cutoff bound that is found by heuristics
friend class AggregationPS
DSVector m_col
does the index mapping have to be updated in postsolving?
Result multiaggregation(SPxLP &lp, bool &again)
performs multi-aggregations of variable based upon constraint activitu.
Save arrays of arbitrary types.
friend class DuplicateColsPS
FreeZeroObjVariablePS(const FreeZeroObjVariablePS &old)
copy constructor
const SVectorBase< R > & rowVector(int i) const
Gets row vector of row i.
comparator for class SVector::Element: compare nonzeros according to index
virtual const Vector & unsimplifiedPrimal()
returns a reference to the unsimplified primal solution.
FreeColSingletonPS & operator=(const FreeColSingletonPS &rhs)
assignment operator
virtual const Vector & unsimplifiedRedCost()
returns a reference to the unsimplified reduced costs.
void trivialHeuristic(SPxLP &lp)
tries to find good lower bound solutions by applying some trivial heuristics
int m_j
slack column index
virtual PostStep * clone() const
clone function for polymorphism
Postsolves duplicate columns.
DataArray< bool > m_isLhsEqualRhs
virtual SPxSimplifier * clone() const
clone function for polymorphism
SimpleStep
Different simplification steps.
Result removeEmpty(SPxLP &lp)
removed empty rows and empty columns.
int size() const
return nr. of elements.
Postsolves forcing constraints.
virtual PostStep * clone() const
clone function for polymorphism
FixBoundsPS(const SPxLP &lp, int j, Real val)
Result simplifyDual(SPxLP &lp, bool &again)
performs simplification steps on the LP based on dual concepts.
Postsolves unconstraint constraints.
R val
Value of nonzero element.
Postsolves variable bound tightening from pseudo objective propagation.
const SVectorBase< R > & colVector(int i) const
Returns column vector of column i.
Postsolves variable fixing.
int nCols() const
Returns number of columns in LP.
friend class FreeColSingletonPS
Real m_pseudoobj
the pseudo objective function value
friend class FreeZeroObjVariablePS
void computeMinMaxValues(SPxLP &lp, Real side, Real val, Real minRes, Real maxRes, Real &minVal, Real &maxVal)
calculate min/max value for the multi aggregated variables
virtual PostStep * clone() const
clone function for polymorphism
int m_addedcols
columns added by handleRowObjectives()
virtual const Vector & unsimplifiedSlacks()
returns a reference to the unsimplified slack values.
friend class ZeroObjColSingletonPS
int operator()(const SVector::Element &e1, const SVector::Element &e2) const
void removeRow(SPxLP &lp, int i)
removes a row in the LP.
friend class EmptyConstraintPS
FreeConstraintPS & operator=(const FreeConstraintPS &rhs)
assignment operator
RowObjPS(const RowObjPS &old)
copy constructor
RowObjPS(const SPxLP &lp, int _i, int _j)
Result simplifyCols(SPxLP &lp, bool &again)
performs simplification steps on the columns of the LP.
Array< DSVector > m_dupRows
arrange duplicate rows using bucket sort w.r.t. their pClass values
EmptyConstraintPS & operator=(const EmptyConstraintPS &rhs)
assignment operator
void reSize(int newsize)
reset size to newsize.
ZeroObjColSingletonPS(const ZeroObjColSingletonPS &old)
copy constructor
DVector m_slack
unsimplified slack vector.
const VectorBase< R > & lower() const
Returns (internal and possibly scaled) lower bound vector.
void spx_free(T &p)
Release memory.
virtual SPxSolver::VarStatus getBasisColStatus(int j) const
gets basis status for a single column.
DoubletonEquationPS & operator=(const DoubletonEquationPS &rhs)
assignment operator
DataArray< SPxSolver::VarStatus > m_cBasisStat
basis status of columns.
void propagatePseudoobj(SPxLP &lp)
tightens variable bounds by propagating the pseudo objective function value.
LP simplifier for removing uneccessary row/columns.This SPxSimplifier is mainly based on the paper "P...
Array< DSVector > m_classSetRows
stores parallel classes with non-zero colum entry
friend class FixVariablePS
int operator()(const SVector::Element &e1, const SVector::Element &e2) const
DVector m_redCost
unsimplified reduced cost vector.
ForceConstraintPS(const ForceConstraintPS &old)
copy constructor
virtual PostStep * clone() const
clone function for polymorphism