chocoteam / chocoteam/choco-solver

[BUG] Clause learning broken since Choco 4.10.14

Open
#1,118 2 comments 0 reactions 0 assignees View on GitHub
bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.