Releases: chocoteam/choco-solver
6.0.1
6.0.1 - 21 May 2026
Major features:
Constraints
- Fix PropModXY in case of negative mod
Contributors to this release:
- Charles Prud'homme charles.prudhomme@imt-atlantique.fr
- Jean-Guillaume Fages jg.fages@cosling.com
Full Changelog: v6.0.0...v6.0.1
6.0.0
6.0.0 - 05 May 2026
Major features:
Constraints & LCG
- Faster modulo constraints with bounded variables
- Fix modulo constraint with negative values
- Add
lcgExtractFromVariablesOnSolutionsetting to control whether the solution-forbidding clause is built from variable assignments (true) or from the decision path (false, default) - Add optimized implementations for the
elementconstraint - Improve filtering of signs of variables in PropDivXYZ
- Fix
SparseBitSet.prevClearBit(final int fromIndex)
Build, CI & Tooling
- Migrate to Java 17 (
<release>17</release>); Java 17 language features and APIs are now available - Simplify Maven compiler configuration: remove multi-release JAR dual-compilation strategy (Java 8 + module-info at Java 9)
- Enforce minimum Java 17 and Maven 3.6.0 via
maven-enforcer-plugin - Upgrade ANTLR from 4.9.3 to 4.13.2; migrate grammars to standard
src/main/antlr4/layout; generated parser sources are no longer committed to the repository - Upgrade TestNG from 7.5.1 to 7.12.0
- Upgrade args4j from 2.33 to 2.37
Deprecated API (to be removed in next release):
Other closed issues and pull requests:
See milestone 5.0.2
Contributors to this release:
5.0.1
5.0.1 - 10 Apr 2026
Major features:
Constraints & LCG
- Add table reformulation for pow constraint when LCG is on
- Reduce runtime for building table reformulations by excluding the result variable from the tuple generation
- Fix integer overflow in PropDivXYZLight
- Fix bounded domains management with LCG in PropDivXYZ
- Faster modulo constraint with large domains
- Add arithm preprocessing
- Fix decreasing constraint
Deprecated API (to be removed in next release):
Other closed issues and pull requests:
See milestone 5.0.1
Contributors to this release:
Full Changelog: v5.0.0...v5.0.1
5.0.0
5.0.0 - 02 Feb 2026
Major features:
This set of commits delivers a major consolidation of Lazy Clause Generation, significant performance and memory improvements,
more robust constraint handling, and a broad cleanup and modernization of the internal APIs and tooling.
Performance & Algorithms
- Significant performance improvements on:
- Core propagators (X+Y=Z, abs, div, sum, scalar, etc.)
- CompactTable (CT) and STR2+
- Memory management and estimation mechanisms
- Dynamic selection of table algorithms based on memory footprint
- Optimizations in MiniSat and SAT-related components (clause reduction, propagation, assertions)
Lazy Clause Generation (LCG)
- Major consolidation effort on LCG:
- Fixes for critical bugs (initialization, reification, lost propagations)
- New assertions and invariants
- Improved separation and handling of learnt clauses (failure vs prohibiting-solution)
- Extended LCG support for constraints such as abs, div, table, element
- Better interaction with:
- Restart strategies
- ParallelPortfolio
- Explanation and Reason APIs
Constraints & Modeling
- Refactoring or improvement of many constraints:
- AllDifferent, AllDifferentExcept*
- Cumulative, DiffN, BinPacking, Element, Table
- Arithmetic constraints (abs, div, times, min/max)
- Smarter choice between decomposition and extension
- Improved expression recognition and handling (XCSP / Flatzinc)
Testing & Robustness
- Numerous test fixes and stabilizations
- Addition of new tests, especially for LCG and XCSP
- Timeout adjustments
- Cleanup of memory-intensive or unstable tests
XCSP / Flatzinc / Parsing
- Update of XCSP3 tools (v2.5)
- Improvements in parsing and expression handling
- Better support for:
- Negative values
- Constants
- Variable groups and restarts
- Competition-oriented adjustments for XCSP and Flatzinc
Search & Strategies
- Enhancements to:
- RoundRobin strategies
- Dom/Wdeg and ConflictHistorySearch
- MetaStrategy framework
- New parameters and more robust default behaviors
- Simplification and clarification of search-related APIs
Refactoring & API Evolution
- Large-scale code cleanup:
- Removal of obsolete classes
- Simplification of core APIs (IntVar, Decision, Reason)
- Improved and updated Javadoc
- Clearer separation of responsibilities between Solver, MiniSat, and learning components
Build, CI & Tooling
- Updates to Maven configuration, Docker, and Makefiles
- CI workflow adjustments (tests, snapshots, releases)
- Preparation of intermediate and beta releases
Deprecated API (to be removed in next release):
Other closed issues and pull requests:
See milestone 5.0.0
- Performance improvement in PropXPlusYEqZ and PropAbsolute
- Fix bug in ConflictOrderingSearch (monitor not plugged)
- Performance improvement for LastConflict, ConflictOrderingSearch and StrategySequencer.
- Fix bug : regular constraints parsed from XCSP now support negative values
- Fix bug : Unexpected behavior when using Task with scalar (#1114)
- Replace Cumulative implementation by state-of-the-art implementation of TimeTabling and OverloadChecking
- Fix bug : IntVar no longer extends Iterable to avoid errors in nested loops
- Fix bug : Fix iterator issue when using ISet, especially within graph variables (#1174 and #1175)
Contributors to this release:
5.0.0-beta.1
5.0.0-beta.1 - 17 Feb 2025
Major features:
This version introduces CP-SAT in Choco-solver which
replaces the previous explanation framework.
The Lazy Clause Generation (LCG) is a technique that allows the solver to generate clauses during search.
The current implementation is inspired by Chuffed
and "Lazy Clause Generation Reengineered" - Feydy, T., Stuckey, P.J. (2009).
This new version has necessitated a rather intrusive revision of the way propagators filter.
By default, LCG is not enabled. The following code shows how to enable it:
Model model = new Model(Settings.init().setLCG(true));At this stage, this is a beta version.
First, only integer and boolean variables are supported.
Second, some constraints are explained with dedicated functions and
others are decomposed into explained ones.
More importantly, others are neither explained nor decomposed (for the moment).
In the latter case, an exception is raised to inform the user of the situation.
Other closed issues and pull requests:
See milestone 5.0.0
Contributors to this release:
v4.10.18
4.10.18 - 27 Jan 2025
Major features:
- Fix unexpected behaviour when using
neg()intvar in arithm #1115 - Fix bin packing initial propagation (#1113)
- Fixed an error in
increasingconstraint documentation and updateddecreasingconstraint documentation (#1103)
Full Changelog: v4.10.17...v4.10.18
v4.10.17
v4.10.16
v4.10.15
4.10.15 - 09 Sep 2024
Major features:
- Add
PickOnDomand variants (seeSearch.pickOnDom) - Enhance MiniZinc output
- Revamp scripts to solver flatzinc files
- Fix bugs (see closed issues)
Other closed issues and pull requests:
Contributors to this release:
- Arthur Godet (@ArthurGodet)
- Paul King (@paulk-asert)
- Zhang Yang (@zy-nesime)
- Charles Prud'homme (@cprudhom)
Full Changelog: v4.10.14...v4.10.15
v4.10.14
4.10.14 - 02 Nov 2023
Major features:
- NEW:
solver..showRestarts();to display the number of restarts during the search. - NEW: hybrid table constraints (see
model.table(...)) - NEW: partial assignement generator for COP (see
Search.generatePartialAssignment()) - NEW: Add Blackbox configuration (#1058)
- Revamp views (#564)
- Improve
pow(base, exponent, result) - Remove
BitsetArrayIntVarImplnow managed inBitSetIntVarImpl
Deprecated API (to be removed in next release):
Other closed issues and pull requests:
Contributors to this release:
- Jean-Guillaume Fages (@jgFages)
- Arthur Godet (@ArthurGodet)
- Fabien Hermenier (@fhermeni)
- Charles Prud'homme (@cprudhom)
Full Changelog: v4.10.13...v4.10.14