diff --git a/changelog.md b/changelog.md index 9aa6dfdb..6c0060d7 100644 --- a/changelog.md +++ b/changelog.md @@ -4,6 +4,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - [Doc:Unreleased] +## [1.1.0] - 2023-10-15 + +### Changed + +- [PR14](https://github.com/scipopt/SCIPpp/pull/14) Using SCIP 8.0.4 now. + +### Added + +- [PR12](https://github.com/scipopt/SCIPpp/pull/12) + Expose SCIP counterparts via `Model::epsilon`, `Model::round`, and `Model::isZero`. +- [PR11](https://github.com/scipopt/SCIPpp/pull/11) + IO methods `Model::writeOrigProblem` to write a model to a file or standard output. + +### Fixed + +- [PR12](https://github.com/scipopt/SCIPpp/pull/12) + Added more const-correctness + ## [1.0.2] - 2023-08-12 ### Fixed @@ -28,7 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Initial release [Doc:Unreleased]: https://scipopt.github.io/SCIPpp/ -[Unreleased]: https://github.com/scipopt/SCIPpp +[Unreleased]: https://github.com/scipopt/SCIPpp/compare/1.1.0...main +[1.1.0]: https://github.com/scipopt/SCIPpp/releases/tag/1.1.0 [1.0.2]: https://github.com/scipopt/SCIPpp/releases/tag/1.0.2 [1.0.1]: https://github.com/scipopt/SCIPpp/releases/tag/1.0.1 [1.0.0]: https://github.com/scipopt/SCIPpp/releases/tag/1.0.0 diff --git a/conanfile.py b/conanfile.py index c8137a34..7e8a9b41 100644 --- a/conanfile.py +++ b/conanfile.py @@ -18,11 +18,13 @@ class ScipPlusPlus(ConanFile): homepage = "https://github.com/scipopt/SCIPpp" options = { "with_tests": [True, False], + "with_utils": [True, False], "shared": [True, False], "fPIC": [True, False] } default_options = { "with_tests": False, + "with_utils": False, "shared": False, "fPIC": True } @@ -65,7 +67,7 @@ def set_version(self): try: self.version = git.run("describe --tags --dirty=-d").strip() except: - self.version = "1.x.y" + self.version = "1.1.0" def layout(self): cmake_layout(self) @@ -79,6 +81,7 @@ def generate(self): tc = CMakeToolchain(self) tc.variables[self.name + "_version"] = self.version tc.variables["BUILD_TESTS"] = self.options.with_tests + tc.variables["BUILD_UTILS"] = self.options.with_utils tc.generate() def build(self): diff --git a/include/scippp/parameters.hpp b/include/scippp/parameters.hpp index 7e0c16ca..ff0b16da 100644 --- a/include/scippp/parameters.hpp +++ b/include/scippp/parameters.hpp @@ -4273,7 +4273,8 @@ namespace LIMITS { constexpr Param GAP { "limits/gap" }; //! solving stops, if the absolute gap = |primalbound - dualbound| is below the given value constexpr Param ABSGAP { "limits/absgap" }; - //! solving stops, if the given number of solutions were found (-1: no limit) + //! solving stops, if the given number of solutions were found; this limit is first checked in presolving (-1: no + //! limit) constexpr Param SOLUTIONS { "limits/solutions" }; //! solving stops, if the given number of solution improvements were found (-1: no limit) constexpr Param BESTSOL { "limits/bestsol" }; @@ -5292,7 +5293,7 @@ namespace PROPAGATING::SYMMETRY { constexpr Param OFSYMCOMPTIMING { "propagating/symmetry/ofsymcomptiming" }; //! run orbital fixing during presolving? constexpr Param PERFORMPRESOLVING { "propagating/symmetry/performpresolving" }; - //! recompute symmetries after a restart has occured? (0 = never, 1 = always, 2 = if OF found reduction) + //! recompute symmetries after a restart has occured? (0 = never) constexpr Param RECOMPUTERESTART { "propagating/symmetry/recomputerestart" }; //! Should non-affected variables be removed from permutation to save memory? constexpr Param COMPRESSSYMMETRIES { "propagating/symmetry/compresssymmetries" }; diff --git a/readme.md b/readme.md index 6291dc7c..22739729 100644 --- a/readme.md +++ b/readme.md @@ -115,7 +115,12 @@ model.setObjsense(Sense::MAXIMIZE); ### Accessing a Solution A model can be asked for the status and the number of solutions. -A variable can be asked for its value in a given solution. +A variable can be asked for its value in a given solution as + +* floating point number via `getSolVal(sol)`. +* integer via `getSolValAsInt(sol)`. +* long integer via `getSolValAsLongInt(sol)`, and +* it can be checked for zero via `isZero(sol)`. ```cpp const auto& [x0, x1] = model.addVars<2>("x_"); @@ -126,6 +131,19 @@ if (model.getNSols() > 0 && model.getStatus() == SCIP_STATUS_OPTIMAL) { } ``` +### IO + +A model can be written to file via `Model::writeOrigProblem` if a `std::filesystem::directory_entry` is given as +argument. If it is just a string representing a file extension, it is written to standard output. + +### Numerics + +The model exposes + +* `SCIPepsilon` via `epsilon()`, +* `SCIPround` via `round(double)`, and +* `SCIPisZero` via `isZero(double)` + ### Features Not Yet Supported For features not yet supported by SCIP++, one can access the underlying raw SCIP object via