diff --git a/CMakeLists.txt b/CMakeLists.txt
index 32ec4c86..94340c9e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -154,8 +154,11 @@ endif()
# look for presolvelib PaPILO
if(PAPILO)
message(STATUS "Finding PAPILO")
- set(PAPILO_MIN_VERSION 2.0.0.0)
- find_package(PAPILO CONFIG ${PAPILO_MIN_VERSION} HINTS ${PAPILO_DIR})
+ find_package(PAPILO CONFIG HINTS ${PAPILO_DIR})
+ set(PAPILO_MIN_VERSION 2.0.0)
+ if(PAPILO_VERSION LESS ${PAPILO_MIN_VERSION})
+ message( FATAL_ERROR "At least PaPILO Version ${PAPILO_MIN_VERSION} required - found ${PAPILO_VERSION}!")
+ endif ()
endif()
if(PAPILO_FOUND)
message(STATUS "Finding PAPILO - found")
diff --git a/doc/soplex.dxy b/doc/soplex.dxy
index d34e74b3..07490195 100644
--- a/doc/soplex.dxy
+++ b/doc/soplex.dxy
@@ -824,7 +824,7 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE =
+EXCLUDE = ../src/soplex/external/
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
@@ -1643,7 +1643,7 @@ COMPACT_LATEX = YES
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.
-PAPER_TYPE = a4wide
+PAPER_TYPE =
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. The package can be specified just
@@ -2423,4 +2423,4 @@ GENERATE_LEGEND = YES
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
-DOT_CLEANUP = YES
\ No newline at end of file
+DOT_CLEANUP = YES
diff --git a/doc/xternal.cpp b/doc/xternal.cpp
index 79b2f71e..d3967abe 100644
--- a/doc/xternal.cpp
+++ b/doc/xternal.cpp
@@ -299,7 +299,7 @@
*
coVector | colVector | rowVector |
*
*
- * Whether the \ref soplex::SPxBasis::Desc::Status "SPxBasis::Desc::Status" of a
+ * Whether the \ref soplex::SPxBasisBase::Desc::Status "SPxBasisBase::Desc::Status" of a
* variable indicates that the corresponding vector is in the basis matrix or
* not also depends on the chosen representation. Hence, methods \c isBasic()
* are provided to get the correct answer for both representations.
diff --git a/src/soplex.hpp b/src/soplex.hpp
index 557ba605..d0412daf 100644
--- a/src/soplex.hpp
+++ b/src/soplex.hpp
@@ -6565,10 +6565,12 @@ bool SoPlexBase::setRealParam(const RealParam param, const Real value, const
// lower limit on objective value is set in solveReal()
case SoPlexBase::OBJLIMIT_LOWER:
+ this->_solver.toggleTerminationValue(true);
break;
// upper limit on objective value is set in solveReal()
case SoPlexBase::OBJLIMIT_UPPER:
+ this->_solver.toggleTerminationValue(true);
break;
// working tolerance for feasibility in floating-point solver
diff --git a/src/soplex/classset.h b/src/soplex/classset.h
index e047d960..e405b4c4 100644
--- a/src/soplex/classset.h
+++ b/src/soplex/classset.h
@@ -137,8 +137,6 @@ class ClassSet
*newelem = item;
}
/// adds element \p item.
- /**@return 0 on success and non-zero, if an error occured.
- */
void add(const T& item)
{
T* newelem = create();
diff --git a/src/soplex/clufactor.h b/src/soplex/clufactor.h
index fe55a8ed..8558463c 100644
--- a/src/soplex/clufactor.h
+++ b/src/soplex/clufactor.h
@@ -485,7 +485,8 @@ class CLUFactor
///
void factor(const SVectorBase** vec, ///< Array of column VectorBase pointers
R threshold, ///< pivoting threshold
- R eps); ///< epsilon for zero detection
+ R eps ///< epsilon for zero detection
+ );
///@}
//----------------------------------------
diff --git a/src/soplex/clufactor_rational.h b/src/soplex/clufactor_rational.h
index 78965071..c70e50e0 100644
--- a/src/soplex/clufactor_rational.h
+++ b/src/soplex/clufactor_rational.h
@@ -449,7 +449,8 @@ class CLUFactorRational
///
void factor(const SVectorRational** vec, ///< Array of column vector pointers
- const Rational& threshold); ///< pivoting threshold
+ const Rational& threshold ///< pivoting threshold
+ );
///@}
//----------------------------------------
diff --git a/src/soplex/dataset.h b/src/soplex/dataset.h
index e4764068..22779306 100644
--- a/src/soplex/dataset.h
+++ b/src/soplex/dataset.h
@@ -141,8 +141,6 @@ class DataSet
*data = item;
}
/// adds element \p item.
- /**@return 0 on success and non-zero, if an error occured.
- */
void add(const DATA& item)
{
DATA* data = create();
diff --git a/src/soplex/lprowbase.h b/src/soplex/lprowbase.h
index 088bb8f0..32aab325 100644
--- a/src/soplex/lprowbase.h
+++ b/src/soplex/lprowbase.h
@@ -40,7 +40,7 @@ namespace soplex
*
* Class LPRowBase provides constraints for linear programs in the form \f[ l \le a^Tx \le r, \f] where \em a is a
* DSVector. \em l is referred to as %left hand side, \em r as %right hand side and \em a as \em row \em vector or the
- * constraint vector. \em l and \em r may also take values \f$\pm\f$ #R(infinity). This static member is predefined, but
+ * constraint vector. \em l and \em r may also take values \f$\pm\f$ R(infinity). This static member is predefined, but
* may be overridden to meet the needs of the LP solver to be used.
*
* LPRowBases allow to specify regular inequalities of the form \f[ a^Tx \sim \alpha, \f] where \f$\sim\f$ can take any
diff --git a/src/soplex/lprowsetbase.h b/src/soplex/lprowsetbase.h
index 665d6c17..ad1e1aa8 100644
--- a/src/soplex/lprowsetbase.h
+++ b/src/soplex/lprowsetbase.h
@@ -656,6 +656,7 @@ class LPRowSetBase : protected SVSetBase
// ------------------------------------------------------------------------------------------------------------------
/**@name Consistency check */
+ ///@{
/// Checks consistency.
bool isConsistent() const
diff --git a/src/soplex/slinsolver.h b/src/soplex/slinsolver.h
index 3874a3f9..cce2eabc 100644
--- a/src/soplex/slinsolver.h
+++ b/src/soplex/slinsolver.h
@@ -45,8 +45,8 @@ namespace soplex
Class SLinSolver provides a class for solving sparse linear systems with
a matrix \f$A\f$ and arbitrary right-hand side vectors. For doing so, the
- matrix must be first #load%ed to an #SLinSolver object as an array of
- pointers to the \em column \ref SVectorBase "SVectors" of this matrix.
+ matrix must be first #load%ed to an SLinSolver object as an array of
+ pointers to the \em column \ref soplex::SVectorBase "SVectors" of this matrix.
*/
template
class SLinSolver
diff --git a/src/soplex/spxharrisrt.h b/src/soplex/spxharrisrt.h
index 17d951c2..7126bef4 100644
--- a/src/soplex/spxharrisrt.h
+++ b/src/soplex/spxharrisrt.h
@@ -59,26 +59,26 @@ class SPxHarrisRT : public SPxRatioTester
///
int maxDelta(
- R* /*max*/, ///< max abs value in \p upd
+ R* /*max*/, ///< max abs value in upd
R* val, ///< initial and chosen value
- int num, ///< number of indices in \p idx
- const int* idx, ///< nonzero indices in \p upd
- const R* upd, ///< update VectorBase for \p vec
+ int num, ///< number of indices in idx
+ const int* idx, ///< nonzero indices in upd
+ const R* upd, ///< update VectorBase for vec
const R* vec, ///< current vector
- const R* low, ///< lower bounds for \p vec
- const R* up ///< upper bounds for \p vec
+ const R* low, ///< lower bounds for vec
+ const R* up ///< upper bounds for vec
) const;
///
int minDelta(
- R* /*max*/, ///< max abs value in \p upd
+ R* /*max*/, ///< max abs value in upd
R* val, ///< initial and chosen value
- int num, ///< of indices in \p idx
- const int* idx, ///< nonzero indices in \p upd
- const R* upd, ///< update VectorBase for \p vec
+ int num, ///< of indices in idx
+ const int* idx, ///< nonzero indices in upd
+ const R* upd, ///< update VectorBase for vec
const R* vec, ///< current vector
- const R* low, ///< lower bounds for \p vec
- const R* up ///< upper bounds for \p vec
+ const R* low, ///< lower bounds for vec
+ const R* up ///< upper bounds for vec
) const;
///@}
diff --git a/src/soplex/spxout.h b/src/soplex/spxout.h
index 9291372f..c3cdc37f 100644
--- a/src/soplex/spxout.h
+++ b/src/soplex/spxout.h
@@ -235,8 +235,8 @@ class SPxOut
/**@name Verbosity manipulator
Manipulators are implemented in a similar way as done for @c setw(),
@c setprecision(), etc. in the standard library file iomanip. For
- instance, the non-member function \ref verb() "verb(v)" returns a
- struct struct_Severity which contains only the verbosity level.
+ instance, the non-member function \ref soplex::verb() "verb(v)"
+ returns a struct struct_Verbosity which contains only the verbosity level.
Calling
@code
SPxOut spxout;
@@ -246,7 +246,7 @@ class SPxOut
extracts the verbosity level from the struct and passes it to the
member function SPxOut::setVerbosity().
*/
-//@{
+///@{
/// manipulator to be used in an output statement
inline SPxOut::struct_Verbosity
verb(const SPxOut::Verbosity& v)
@@ -274,7 +274,7 @@ operator<< (SPxOut& stream,
* other. When using only a template type, it is not clear what the
* compiler makes out of it (according to lint).
*/
-//@{
+///@{
///
/// Passes instances of type \p Type to the current stream.
inline SPxOut& operator<< (SPxOut& _spxout, long t)
@@ -364,7 +364,7 @@ inline SPxOut& operator<< (SPxOut& _spxout, T t)
return _spxout;
}
-//@}
+///@}
} // namespace soplex
diff --git a/src/soplex/spxpapilo.h b/src/soplex/spxpapilo.h
index eb78988d..e2bc790e 100644
--- a/src/soplex/spxpapilo.h
+++ b/src/soplex/spxpapilo.h
@@ -530,11 +530,7 @@ void Presol::unsimplify(const VectorBase& x, const VectorBase& y,
papilo::Postsolve postsolve {msg, num};
auto status = postsolve.undo(reducedSolution, originalSolution, postsolveStorage, isOptimal);
- if(status ==
-#if defined(PAPILO_API_VERSION) && PAPILO_API_VERSION >= 1
- papilo::
-#endif
- PostsolveStatus::kFailed && isOptimal)
+ if(status == PostsolveStatus::kFailed && isOptimal)
{
SPX_MSG_ERROR(std::cerr << "PaPILO did not pass validation" << std::endl;)
assert(false);
diff --git a/src/soplex/spxpricer.h b/src/soplex/spxpricer.h
index 4a4f0cd6..52f9bde4 100644
--- a/src/soplex/spxpricer.h
+++ b/src/soplex/spxpricer.h
@@ -188,7 +188,7 @@ class SPxPricer
/// 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] < -#tolerance().
+ tested value must fullfill solver()->test()[i] < -#pricingTolerance().
*/
virtual int selectLeave() = 0;
@@ -209,7 +209,7 @@ class SPxPricer
/** 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 -#tolerance(). If not, SoPlex will discard the pivot.
+ than -#pricingTolerance(). If not, SoPlex will discard the pivot.
Note:
When method #selectEnter() is called by the loaded SoPlex
diff --git a/src/soplex/spxsolver.h b/src/soplex/spxsolver.h
index e0c1d2dc..c9252c16 100644
--- a/src/soplex/spxsolver.h
+++ b/src/soplex/spxsolver.h
@@ -255,7 +255,8 @@ class SPxSolverBase : public SPxLPBase, protected SPxBasisBase
Real maxTime; ///< maximum allowed time.
int nClckSkipsLeft; ///< remaining number of times the clock can be safely skipped
long nCallsToTimelim; /// < the number of calls to the method isTimeLimitReached()
- R objLimit; ///< objective value limit.
+ R objLimit; ///< objective value limit.
+ bool useTerminationValue; ///< true, if objective limit should be used in the next solve.
Status m_status; ///< status of algorithm.
R m_nonbasicValue; ///< nonbasic part of current objective value
@@ -276,7 +277,6 @@ class SPxSolverBase : public SPxLPBase, protected SPxBasisBase
int m_maxCycle; ///< maximum steps before cycling is detected.
int m_numCycle; ///< actual number of degenerate steps so far.
bool initialized; ///< true, if all vectors are setup.
- bool useTerminationValue; /// true, if objective limit should be used in the next solve.
SSVectorBase*
solveVector2; ///< when 2 systems are to be solved at a time; typically for speepest edge weights
diff --git a/src/soplex/spxsolver.hpp b/src/soplex/spxsolver.hpp
index 83318007..dd072452 100644
--- a/src/soplex/spxsolver.hpp
+++ b/src/soplex/spxsolver.hpp
@@ -1055,6 +1055,7 @@ void SPxSolverBase::setType(Type tp)
, nClckSkipsLeft(0)
, nCallsToTimelim(0)
, objLimit(R(infinity))
+ , useTerminationValue(true)
, m_status(UNKNOWN)
, m_nonbasicValue(0.0)
, m_nonbasicValueUpToDate(false)
@@ -1185,6 +1186,7 @@ void SPxSolverBase::setType(Type tp)
maxIters = base.maxIters;
maxTime = base.maxTime;
objLimit = base.objLimit;
+ useTerminationValue = base.useTerminationValue;
m_status = base.m_status;
m_nonbasicValue = base.m_nonbasicValue;
m_nonbasicValueUpToDate = base.m_nonbasicValueUpToDate;
@@ -1385,6 +1387,7 @@ void SPxSolverBase::setType(Type tp)
, nClckSkipsLeft(base.nClckSkipsLeft)
, nCallsToTimelim(base.nCallsToTimelim)
, objLimit(base.objLimit)
+ , useTerminationValue(base.useTerminationValue)
, m_status(base.m_status)
, m_nonbasicValue(base.m_nonbasicValue)
, m_nonbasicValueUpToDate(base.m_nonbasicValueUpToDate)
diff --git a/src/soplex/ssvectorbase.h b/src/soplex/ssvectorbase.h
index 9f1dcdb0..2774ff19 100644
--- a/src/soplex/ssvectorbase.h
+++ b/src/soplex/ssvectorbase.h
@@ -46,7 +46,7 @@ template < class R > class SVSetBase;
* @ingroup Algebra
*
* This class implements semi-sparse vectors. Such are #VectorBase%s where the indices of its nonzero elements can be
- * stored in an extra IdxSet. Only elements with absolute value > #epsilon are considered to be nonzero. Since really
+ * stored in an extra IdxSet. Only elements with absolute value > #getEpsilon() are considered to be nonzero. Since really
* storing the nonzeros is not always convenient, an SSVectorBase provides two different stati: setup and not setup.
* An SSVectorBase being setup means that the nonzero indices are available, otherwise an SSVectorBase is just an
* ordinary VectorBase with an empty IdxSet. Note that due to arithmetic operation, zeros can slip in, i.e., it is
@@ -141,7 +141,7 @@ class SSVectorBase : public VectorBase, protected IdxSet
setupStatus = false;
}
- /// Initializes nonzero indices for elements with absolute values above #epsilon and sets all other elements to 0.
+ /// Initializes nonzero indices for elements with absolute values above epsilon and sets all other elements to 0.
void setup()
{
if(!isSetup())
diff --git a/src/soplex/svsetbase.h b/src/soplex/svsetbase.h
index f1b246b6..2db56f72 100644
--- a/src/soplex/svsetbase.h
+++ b/src/soplex/svsetbase.h
@@ -363,7 +363,7 @@ class SVSetBase : protected ClassArray < Nonzero >
/** Adds SVectorBase \p svec to the %set. This includes copying its nonzeros to the sets nonzero memory and creating
* an additional SVectorBase entry in vector memory. If neccessary, the memory blocks are enlarged appropriately.
*
- * @return \p nkey contains the DataKey, that the SVSetBase has assosicated to the new SVectorBase.
+ * At return, \p nkey contains the DataKey, that the SVSetBase has assosicated to the new SVectorBase.
*/
void add(DataKey& nkey, const SVectorBase& svec)
{
@@ -379,7 +379,7 @@ class SVSetBase : protected ClassArray < Nonzero >
/** Adds SVectorBase \p svec to the %set. This includes copying its nonzeros to the sets nonzero memory and creating
* an additional SVectorBase entry in vector memory. If neccessary, the memory blocks are enlarged appropriately.
*
- * @return \p nkey contains the DataKey, that the SVSetBase has assosicated to the new SVectorBase.
+ * At return, \p nkey contains the DataKey, that the SVSetBase has assosicated to the new SVectorBase.
*/
template < class S >
void add(DataKey& nkey, const S* rowValues, const int* rowIndices, int rowSize)
@@ -419,7 +419,7 @@ class SVSetBase : protected ClassArray < Nonzero >
/// Adds n SVectorBase%s to SVSetBase.
/** Adds all \p n SVectorBase%s in the array \p svec to the %set.
*
- * @return \p nkey contains the DataKey%s, that the SVSetBase has assosicated to the new SVectorBase%s.
+ * At return, nkey contains the DataKey%s, that the SVSetBase has assosicated to the new SVectorBase%s.
*
* @pre \p nkey must be large enough to fit \p n DataKey%s.
*/
@@ -454,7 +454,7 @@ class SVSetBase : protected ClassArray < Nonzero >
/// Adds all SVectorBase%s of \p pset to SVSetBase.
/** Adds all \p n SVectorBase%s in the \p pset to an SVSetBase.
*
- * @return \p nkey contains the DataKey%s, that the SVSetBase has assosicated to the new SVectorBase%s.
+ * At return, \p nkey contains the DataKey%s, that the SVSetBase has assosicated to the new SVectorBase%s.
*
* @pre \p nkey must be large enough to fit \p pset.num() DataKey%s.
*/
@@ -721,7 +721,7 @@ class SVSetBase : protected ClassArray < Nonzero >
/** Removes \p n SVectorBase%s from %set.
* @pre \p nums must be at least of size \p n
* @pre \p perm must be at least of size num()
- * @return \p perm is the permutations resulting from this removal: \p perm[i] < 0 indicates
+ * At return, \p perm is the permutations resulting from this removal: \p perm[i] < 0 indicates
* that the element to index \p i has been removed. Otherwise, \p perm[i] is the new
* index of the element with index \p i before the removal.
*/