chocoteam / chocoteam/choco-solver
[BUG] Clause learning broken since Choco 4.10.14
- Dominant language
- Java
- Stars
- 779
- Forks
- 159
- Avg merge
- 6d 9h
- Merged PRs (30d)
- 10
Description
**Describe the bug**
I am trying to upgrade a project from Choco 4.10.13 to 4.10.14, but every time I try to run with clause-learning enabled, I get the following exception:
```
java.lang.IllegalStateException: cannot find maximum of an empty set
at org.chocosolver.util.objects.setDataStructures.iterable.IntIterableRangeSet.max(IntIterableRangeSet.java:221) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.learn.LazyImplications.createDomain(LazyImplications.java:316) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.learn.LazyImplications.addEntry(LazyImplications.java:353) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.learn.LazyImplications.pushEvent(LazyImplications.java:383) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.learn.EventRecorder.updateLowerBound(EventRecorder.java:75) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.variables.view.integer.IntAffineView.updateLowerBound(IntAffineView.java:133) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.variables.IntVar.updateBounds(IntVar.java:415) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.constraints.ternary.PropXplusYeqZ.filterPlus(PropXplusYeqZ.java:91) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.constraints.ternary.PropXplusYeqZ.propagate(PropXplusYeqZ.java:72) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.propagation.PropagationEngine.propagateEvents(PropagationEngine.java:215) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.propagation.PropagationEngine.propagate(PropagationEngine.java:199) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.Solver.doPropagate(Solver.java:481) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.Solver.initialize(Solver.java:417) ~[carioca-solver-compute-functional-tests.jar:?]
at org.chocosolver.solver.Solver.solve(Solver.java:305) ~[carioca-solver-compute-functional-tests.jar:?]
```
I cannot share the actual code since it's from a huge internal project, but I am available to discuss this on Discord. This might be linked to `PropLexInt` since I seem to only get the error when activating it.
**Environment (please complete the following information):**
- Choco-solver version: 4.10.14 (works fine with 4.10.13).
- JRE : 17.0.13
Contributor guide
Research direction
Start with solver/learn/LazyImplications.java at createDomain, then trace addEntry and EventRecorder.updateLowerBound using the reported stack trace. Compare clause-learning behavior between Choco 4.10.13 and 4.10.14, including the suspected PropLexInt path. Done means the empty-set exception no longer occurs when clause learning is enabled and the regression is covered by a test.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100