All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
soplex.h
Go to the documentation of this file.
67 ///@todo implement statistical info (time, factor time, iters, ...) since last call to solveReal() or solveRational() (Ambros?)
75 ///@todo integrate rational SPxSolver and distinguish between original and transformed rational LP
181 /// returns objective function vector after transformation to a maximization problem; since this is how it is stored
185 /// returns objective value of column \p i after transformation to a maximization problem; since this is how it is
273 /// returns objective function vector after transformation to a maximization problem; since this is how it is stored
277 /// returns objective value of column \p i after transformation to a maximization problem; since this is how it is
353 /// removes all rows with an index \p i such that \p perm[i] < 0; upon completion, \p perm[i] >= 0 indicates the
354 /// new index where row \p i has been moved to; note that \p perm must point to an array of size at least
358 /// remove all rows with indices in array \p idx of size \p n; an array \p perm of size #numRowsReal() may be passed
362 /// removes rows \p start to \p end including both; an array \p perm of size #numRowsReal() may be passed as buffer
369 /// removes all columns with an index \p i such that \p perm[i] < 0; upon completion, \p perm[i] >= 0 indicates the
370 /// new index where column \p i has been moved to; note that \p perm must point to an array of size at least
374 /// remove all columns with indices in array \p idx of size \p n; an array \p perm of size #numColsReal() may be
378 /// removes columns \p start to \p end including both; an array \p perm of size #numColsReal() may be passed as
385 /// synchronizes real LP with rational LP, i.e., copies (rounded) rational LP into real LP, if sync mode is manual
399 void addRowRational(const mpq_t* lhs, const mpq_t* rowValues, const int* rowIndices, const int rowSize, const mpq_t* rhs);
402 void addRowsRational(const mpq_t* lhs, const mpq_t* rowValues, const int* rowIndices, const int* rowStarts, const int* rowLengths, const int numRows, const int numValues, const mpq_t* rhs);
413 void addColRational(const mpq_t* obj, const mpq_t* lower, const mpq_t* colValues, const int* colIndices, const int colSize, const mpq_t* upper);
416 void addColsRational(const mpq_t* obj, const mpq_t* lower, const mpq_t* colValues, const int* colIndices, const int* colStarts, const int* colLengths, const int numCols, const int numValues, const mpq_t* upper);
516 /// removes all rows with an index \p i such that \p perm[i] < 0; upon completion, \p perm[i] >= 0 indicates the new
517 /// index where row \p i has been moved to; note that \p perm must point to an array of size at least
521 /// remove all rows with indices in array \p idx of size \p n; an array \p perm of size #numRowsRational() may be
525 /// removes rows \p start to \p end including both; an array \p perm of size #numRowsRational() may be passed as
532 /// removes all columns with an index \p i such that \p perm[i] < 0; upon completion, \p perm[i] >= 0 indicates the
533 /// new index where column \p i has been moved to; note that \p perm must point to an array of size at least
537 /// remove all columns with indices in array \p idx of size \p n; an array \p perm of size #numColsRational() may be
541 /// removes columns \p start to \p end including both; an array \p perm of size #numColsRational() may be passed as
548 /// synchronizes rational LP with real LP, i.e., copies real LP to rational LP, if sync mode is manual
712 /// gets the indices of the basic columns and rows; basic column n gives value n, basic row m gives value -1-m
715 /// computes an estimated condition number for the current basis matrix using the power method; returns true on success
718 /// computes the exact condition number for the current basis matrix using the power method; returns true on success
772 /// reads LP file in LP or MPS format according to READMODE parameter; gets row names, column names, and
774 bool readFile(const char* filename, NameSet* rowNames = 0, NameSet* colNames = 0, DIdxSet* intVars = 0);
776 /// writes real LP to file; LP or MPS format is chosen from the extension in \p filename; if \p rowNames and \p
777 /// colNames are \c NULL, default names are used; if \p intVars is not \c NULL, the variables contained in it are
779 bool writeFileReal(const char* filename, const NameSet* rowNames = 0, const NameSet* colNames = 0, const DIdxSet* intvars = 0) const;
781 /// writes rational LP to file; LP or MPS format is chosen from the extension in \p filename; if \p rowNames and \p
782 /// colNames are \c NULL, default names are used; if \p intVars is not \c NULL, the variables contained in it are
784 bool writeFileRational(const char* filename, const NameSet* rowNames = 0, const NameSet* colNames = 0, const DIdxSet* intvars = 0) const;
786 /// reads basis information from \p filename and returns true on success; if \p rowNames and \p colNames are \c NULL,
788 bool readBasisFile(const char* filename, const NameSet* rowNames = 0, const NameSet* colNames = 0);
790 /// writes basis information to \p filename; if \p rowNames and \p colNames are \c NULL, default names are used;
792 bool writeBasisFile(const char* filename, const NameSet* rowNames = 0, const NameSet* colNames = 0, const bool cpxFormat = false) const;
794 /// writes internal LP, basis information, and parameter settings; if \p rowNames and \p colNames are \c NULL,
796 void writeStateReal(const char* filename, const NameSet* rowNames = 0, const NameSet* colNames = 0, const bool cpxFormat = false) const;
798 /// writes internal LP, basis information, and parameter settings; if \p rowNames and \p colNames are \c NULL,
800 void writeStateRational(const char* filename, const NameSet* rowNames = 0, const NameSet* colNames = 0, const bool cpxFormat = false) const;
817 /// should dual infeasibility be tested in order to try to return a dual solution even if primal infeasible?
1183 /// lower threshold in lifting (nonzero matrix coefficients with smaller absolute value will be reformulated)
1186 /// upper threshold in lifting (nonzero matrix coefficients with larger absolute value will be reformulated)
1189 /// sparse pricing threshold (\#violations < dimension * SPARSITY_THRESHOLD activates sparse pricing)
1192 /// threshold on number of rows vs. number of columns for switching from column to row representations in auto mode
1237 bool setBoolParam(const BoolParam param, const bool value, const bool quiet = false, const bool init = false);
1240 bool setIntParam(const IntParam param, const int value, const bool quiet = false, const bool init = false);
1243 bool setRealParam(const RealParam param, const Real value, const bool quiet = false, const bool init = false);
1247 bool setRationalParam(const RationalParam param, const Rational value, const bool quiet = false, const bool init = false);
1251 bool setSettings(const Settings& newSettings, const bool quiet = false, const bool init = false);
1298 bool areLPsInSync(const bool checkVecVals = true, const bool checkMatVals = false, const bool quiet = false) const;
1550 /// removes all rows with an index \p i such that \p perm[i] < 0; upon completion, \p perm[i] >= 0 indicates the
1551 /// new index where row \p i has been moved to; note that \p perm must point to an array of size at least
1555 /// remove all rows with indices in array \p idx of size \p n; an array \p perm of size #numRowsReal() may be passed
1559 /// removes rows \p start to \p end including both; an array \p perm of size #numRowsReal() may be passed as buffer
1566 /// removes all columns with an index \p i such that \p perm[i] < 0; upon completion, \p perm[i] >= 0 indicates the
1567 /// new index where column \p i has been moved to; note that \p perm must point to an array of size at least
1571 /// remove all columns with indices in array \p idx of size \p n; an array \p perm of size #numColsReal() may be
1575 /// removes columns \p start to \p end including both; an array \p perm of size #numColsReal() may be passed as
1597 /// reads real LP in LP or MPS format from file and returns true on success; gets row names, column names, and
1599 bool _readFileReal(const char* filename, NameSet* rowNames = 0, NameSet* colNames = 0, DIdxSet* intVars = 0);
1601 /// reads rational LP in LP or MPS format from file and returns true on success; gets row names, column names, and
1603 bool _readFileRational(const char* filename, NameSet* rowNames = 0, NameSet* colNames = 0, DIdxSet* intVars = 0);
1611 /// synchronizes real LP with rational LP, i.e., copies (rounded) rational LP into real LP, without looking at the sync mode
1614 /// synchronizes rational LP with real LP, i.e., copies real LP to rational LP, without looking at the sync mode
1617 /// synchronizes real solution with rational solution, i.e., copies real solution to rational solution
1620 /// synchronizes rational solution with real solution, i.e., copies (rounded) rational solution to real solution
1626 /// parses one line in a settings file and returns true on success; note that the string is modified
1639 void _performOptIRStable(SolRational& sol, bool acceptUnbounded, bool acceptInfeasible, int minRounds, bool& primalFeasible, bool& dualFeasible, bool& infeasible, bool& unbounded, bool& stopped, bool& error);
1642 void _performUnboundedIRStable(SolRational& sol, bool& hasUnboundedRay, bool& stopped, bool& error);
1647 /// reduces matrix coefficient in absolute value by the lifting procedure of Thiele et al. 2013
1665 /// introduces slack variables to transform inequality constraints into equations for both rational and real LP,
1672 /// transforms LP to unboundedness problem by moving the objective function to the constraints, changing right-hand
1673 /// side and bounds to zero, and adding an auxiliary variable for the decrease in the objective function
1679 /// transforms LP to feasibility problem by removing the objective function, shifting variables, and homogenizing the
1688 Given constraints of the form \f$ lhs <= Ax <= rhs \f$, a farkas proof y should satisfy \f$ y^T A = 0 \f$ and
1689 \f$ y_+^T lhs - y_-^T rhs > 0 \f$, where \f$ y_+, y_- \f$ denote the positive and negative parts of \f$ y \f$.
1690 If \f$ y \f$ is approximate, it may not satisfy \f$ y^T A = 0 \f$ exactly, but the proof is still valid as long
1697 we may therefore calculate \f$ y^T A \f$ and \f$ y_+^T lhs - y_-^T rhs \f$ exactly and check if the upper and lower
1698 bounds on \f$ x \f$ imply that all feasible \f$ x \f$ satisfy (*), and if not then compute bounds on \f$ x \f$ to
1707 \f$ B \f$ can be increased by iteratively including variable bounds smaller than \f$ B \f$. The speed of this
1708 method can be further improved by using interval arithmetic for all computations. For related information see
1716 SPxSolver::Status _solveRealForRational(bool fromscratch, VectorReal& primal, VectorReal& dual,
1721 SPxSolver::Status _solveRealStable(bool acceptUnbounded, bool acceptInfeasible, VectorReal& primal, VectorReal& dual,
1723 DataArray< SPxSolver::VarStatus >& basisStatusCols, bool& returnedBasis, const bool forceNoSimplifier = false);
1726 void _factorizeColumnRational(SolRational& sol, DataArray< SPxSolver::VarStatus >& basisStatusRows, DataArray< SPxSolver::VarStatus >& basisStatusCols, bool& stopped, bool& error, bool& optimal);
1729 bool _reconstructSolutionRational(SolRational& sol, DataArray< SPxSolver::VarStatus >& basisStatusRows, DataArray< SPxSolver::VarStatus >& basisStatusCols, bool& stopped, bool& error, const Rational& denomBoundSquared);
1745 /// loads original problem into solver and solves again after it has been solved to optimality with preprocessing
|