This file is dedicated to sum up the new features added and bugs fixed in Choco-solver since the version, 4.0.0. Note: double-space is replaced by "\t" character on release process. Make sure the format is ok.
- Add
PickOnDom
and variants (seeSearch.pickOnDom
)
Full Changelog: https://github.com/chocoteam/choco-solver/compare/v4.10.14...v4.10.15
- 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
BitsetArrayIntVarImpl
now managed inBitSetIntVarImpl
- Jean-Guillaume Fages (@jgFages)
- Arthur Godet (@ArthurGodet)
- Fabien Hermenier (@fhermeni)
- Charles Prud'homme (@cprudhom)
Full Changelog: https://github.com/chocoteam/choco-solver/compare/v4.10.13...v4.10.14
Mainly bug fixes and improvements of Pareto front performances.
- Charles Prud'homme (@cprudhom)
- Jani Simomaa (@jsimomaa)
- Fix bug #1006, #1011 and #1014
- Dimitri Justeau-Allaire (@dimitri-justeau)
- Charles Prud'homme (@cprudhom)
- Correcting the lack of filtering in
PropIncreasing
- Change the SetType for the undirected graph stored in DiffN for efficiency reason
SparseBitSet
for a backtrackable bitset with mostly 0s (#935)- Change the way restarting works: not a
Move
anymore, directly included inSolver
(#950) - Simplification of objective manager (#949)
- Calling
getValue()
on an uninstantiated variable throws an IllegalStateException (#957) - Change the MiniZinc complementary search to a FirstFail (instead of DomOverWDeg) (#958)
- Reduce object creation during solving (#985)
- Reduce object creation during propagation (#969)
- Reduce memory footprint of
Model
(#964) - Add
model.getEstimatedMemory()
method - Add
Model
analysis (#939) - Add log file as RegParser option (for parsers)
- creation of PropPower propagators with exponent as int
From Solver
:
Propagate getPropagate()
void setPropagate(Propagate p)
Closeable outputSearchTreeToCPProfiler(boolean domain)
Others:
Propagate
classIntEventType
:int combine(IntEventType... evts)
- Jean-Guillaume Fages (@jgFages)
- Arthur Godet (@ArthurGodet)
- Fabien Hermenier (@fhermeni)
- Charles Prud'homme (@cprudhom)
- Fix performance issue of ViewDeltaMonitor
- Fix lack of filtering in STR2+ when domain is bounded
- Fix issue relative to
OR
andAND
inLogOp
- Add missing checks in OneWordS32BitSet and OneWordS64BitSet + update constructors
- Add new API to VariableUtils
- Add CITATION.cff
- Update paper.md
- Jean-Guillaume Fages (@jgFages)
- Charles Prud'homme (@cprudhom)
- Mehmet Hakan Satman (@jbytecode)
- It is now possible to declare hints to help the search finding a first solution. See
solver.addHint(var, val)
. - Add
Solver.tableSampling
resolution policy which returns a stream ofSolution
randomly sampled. - Add
increasing
anddecreasing
constraints - Add
costFlow
constraint, which is composed of scalar products and a MinCostMaxFlow propagator - Revamp
pow
constraint - Add threshold for
element
with array of variables signature - Add a propagator for 0/1-knapsack (thanks to @PoltyPoltou)
- Remove
CPProfiler
since the project is not active anymore. - Make possible to deal with large domains for some constraints (#894)
- Add a
LinearProgram
class to deal with linear program (!) and a two-phase Simplex (not connected yet) - Fix bug related to delta in boolean views
- Improvements relative to reified propagators
- Change signature of AtLeastNValues
- Record time to best in
Measures(IMeasures measures)
constructor
Each variable is in charge of scheduling its propagators.
This impacts the way propagators are stored in a variable.
Consequently, the getPropagators()
and getPropagator(int)
methods are deprecated, streamPropagators()
replaces them.
Unless otherwise stated, a propagator that can be entailed is automatically swapped in its variables' internal structure.
- Extend some black-box strategies to
SetVar
- Add
union(SetVar unionSet, SetVar indices, SetVar[] sets)
constraint - Add free strategy for SetVar (RegParser and ParallelPortfolio)
- Fix
SetVar#getDomainSize
- Add
SetDomainMax
- Add 'setLe' and 'setLt' constraint (as a decomposition) in
ISetConstraintFactory
- Change default search of Flatzinc
- Increase interval for Flatzinc unbounded intvar
- Remove default ANSI in parsers
- Update FZN grammar to deal with 'set of int'
- Flatzinc: deal with warm_start
- Add ignored search annotation warning in FGoal
- Update XCSPParser + add
model.amongDec
Since 4.10.9, a new jar file is available for download.
This is a lighter version of the one with dependencies,
namely choco-parsers-light-VERSION.jar
.
The following dependencies have been excluded from this archive:
org.apache.pdfbox:pdfbox
org.apache.fontbox:fontbox
com.ibm.icu:icu4j
This results in 82% smaller archive. Note that the non-alleged versions are still available for download.
IOutputFactory.outputSearchTreeToCPProfiler(boolean domain)
See milestone 4.10.9
- Mathieu Vavrille (@MathieuVavrille)
- Nicolas Pierre (@PoltyPoltou)
- Charles Prud'homme (@cprudhom)
- Jean-Guillaume Fages (@jgFages)
- Arthur Godet (@ArthurGodet)
- Propagation is now observable,
solver.observePropagation(PropagationObserver)
. Consequently, it is now possible to profil the propagation by callingsolver.profilePropagation()
. See Javadoc for details and usages (#832). - Release 4.10.7 introduces a bug related to delta monitors, which is now fixed (#837).
- Add new black-box strategy: failure based variable ordering heuristics (@lihb905)
- Add
model.streamVars()
andmodel.streamCstrs()
- Bounded domains checking for table constraints
- Change complementary search in FlatZincParser
- Bump XCSP3
See milestone 4.10.8
- Jean-Guillaume Fages (@jgFages)
- Fabien Hermenier (@fhermeni)
- Hongbo Li (@lihb905)
- Charles Prud'homme (@cprudhom)
- Simplify the way deltamonitors work. There is no need to
freeze
andunfreeze
them before callingforEach...
methods. But, a call toforEach...
consumes all values stored. - Fix a bug related to incremental propagators, views and missing events.
- STR2+ now deals with STAR tuples. Can be used when CT+ is not efficient (mainly due to very large domain size)
- Resetting cutoff strategies now possible
- Change restart behavior to reset cutoff on solutions (can be disabled though, calling
solver.setRestarts(..)
API). - Display occurrences of variable types and occurrences of propagator types
- Now
IntDomainBest
offers API to break ties (seeSearch.ValH.BLAST
for an example). - Add
solver.defaultSolution()
which creates lazily a solution recording everything, plugs it and returns it. This is helpful when a Solution object is required in many places. - Modification of the management of expressions in order to reduce the number of created variables (WIP).
- Add
IntVar.stream()
that streams a variable's values (in increasing order) - Add
Search.ValH.BMIN
andSearch.ValH.BLAST
- Add DIMACS CNF parser (
org.chocosolver.parser.mps.ChocoDIMACS
) - Add Logger (
solver.log()
) to trace from Model/Solver. - Change some default settings
- Revamp
Settings
, now is defined as a factory pattern + addSettings.dev()
andSettings.prod()
profiles. - Make half reification possible. Seed
c.implies(b)
orc.impliedBy(b)
wherec
is a Constraint andb
a BoolVar. - Update MiniZinc constraints definition + flatzinc files (for testing).
- Update
choco.msc
(for MiniZinc IDE) +./minizinc/README.md
- Add
Argmax
andArgmin
constraints - Add
IfThenElse
as a decomposed constraint - Improvement of
solver.findParetoFront()
See milestone 4.10.7
- Dimitri Justeau-Allaire (@dimitri-justeau)
- Jean-Guillaume Fages (@jgFages)
- Charles Prud'homme (@cprudhom)
- Charles Vernerey (@chaver)
- Add new resolution helper in
Solver
, namelyfindOptimalSolutionWithBounds
. See Javadoc for details and usages. ParallelPortfolio
now allows to add unreliable models, that is models whose resolution is deliberately made incomplete. These models should not stop the parallel resolution process when they no longer find a solution. Only complete models can inform the portfolio that they have proven the full exploration of the search space.- Add
org.chocosolver.util.tools.PreProcessing
class, and a first preprocessing rule: equalities detection - Upgrade ibex integration to support ibex-java v1.2.0. Fixes for issues #653 and #740.
- Add QuickXPlain algorithm to find the Minimum Conflicting Set (see issue #509)
- Update XCSP3 parser.
- Fix
InDomainMedian
when domain size is even - Add new way to watch solving:
solver.verboseSolving()
- Deal with annotations for some Flatzinc constraints (allDifferent and inverse)
- Add
MultiArmedBandit
strategy sequencer
See milestone 4.10.6
- Charles Prud'homme (@cprudhom)
- João Pedro Schmitt (@schmittjoaopedro)
- add
IN
arithmetic int expression.
Settings.enableACOnTernarySum()
removedSettings.setEnableACOnTernarySum(boolean)
removed
See milestone 4.10.5
- Guillaume Le Louët (@glelouet)
- Charles Prud'homme (@cprudhom)
- João Pedro Schmitt (@schmittjoaopedro)
- Change search strategies in ParallelPortfolio
- Make "CT+" available to binary table constraint
- Update Dockerfile, now automatically released in hub.docker.com
- Migrate to ANTLR 4.8-1
- Support nested
seq_search
in FlatZinc file - Add missing operations in
model.unpost(c)
- Add new constraint, named
conditional
, that posts constraints on condition - Merge
cutoffseq
insolver
- Merge
pf4cs
inparsers
- Remove
geost
fromparsers
#692, #698, #700, #702, #703, #704, #705
- Dimitri Justeau-Allaire (@dimitri-justeau)
- João Pedro Schmitt (@schmittjoaopedro)
- Charles Prud'homme (@cprudhom)
Multi-modules and JPMS-ready.
- Move
cutoffseq
,choco-sat
,choco-solver
,pf4cs
,choco-parsers
andsamples
projects into a (maven) multi-modules project, JPMS-ready
- Add Conflict History Search ("Conflict history based search for constraint satisfaction problem." Habetand Terrioux,SAC 19 (#676)
- Add dom/wdeg with refinement ("Refining Constraint Weighting." Wattez et al. ICTAI 2019.)
- Default AC algorithm for
AllDifferent
is now from IJCAI-18 "A Fast Algorithm for Generalized Arc Consistency of the Alldifferent Constraint", Zhang et al. (#644) - Add a pure java alternative to Ibex (#666)
- LNS can now be defined with a solution as bootstrap.
- Add simplify API for current Solver operations (#659)
- Simplify code for the nValues constraint (using a watching/witnessing reasoning) (#674)
- Replace former Bin Packing propagators by Paul Shaw propagator (#671)
- Improving PropDiffN performance (#663)
- Add nogood stealing for
ParallelPortfolio
(#669) - Adding of new constructors for Task objects (#662)
- Remove JSON writer/parser (which was actually partially supported and not maintained) (#664)
Task(IntVar s, IntVar d, IntVar e, boolean declareMonitor)
AbstractProblem.readArgs(String... args)
#617, #633, #637, #639, #645, #646, #647, #648, #658, #665, #667, #678, #682, #686, #689, #691
- fix issues relative to propagation
- change constraints' status checking
- change stop conditions in
ExplanationForSignedClause
- add stable module name
#618
- LNS on other variables (e.g. SetVarLNS)
- Continuous integration fixed
IntDomainMiddle
now allows an external definition of what middle is, thanks toToDoubleFunction<IntVar>
#538, #600, #611, #612, #613, #614, #615, #617, #619, #627, #630
This release comes with several major modifications. The most important one is related to explanations. The previous framework is replaced by a new one based on "A Proof-Producing CSP Solver", M.Vesler and O.Strichman, AAI'10.
See notebooks for an example of use.
- Update statistic dashboard (see
solver.showDashboard()
) - Fix
Settings.load
on missing property - Fix issue in
Cumulative
simplified API - Add additional views
model.intEqView(x,c)
,model.intNeView(x,c)
,model.intLeView(x,c)
andmodel.intGeView(x,c)
- Detect when the same views is created twice on the same pair <variable, value?>
- Revamp the way LNS' neighbor is declared (simplication)
- Add
AbstractStrategy.remove()
method to remove a declared strategy and its dependencies - Add new strategies to
Search
- Add new decomposition to
IDecompositionFactory
- Improve initialization of CT+ and CT*
- Improve
IntVar#isInstantiatedTo(int)
INeighbor
interface is deprecated and replaced byNeighbor
abstract classINeighborFactory#explanationBased(IntVar...)
is deprecated, no replacement.ILearnFactory#setCBJLearning(boolean,boolean)
andILearnFactory#setDBTLearning(boolean,boolean)
are deprecated, seeILearnFactory#setLearningSignedClauses()
instead
#604, #605, #606
Minor release
- Offer possibility to store and load
Settings
from a property file. - Add API for
cumulative
when only starts are variable - Add decomposition of cumulative:
model.cumulativeTimeDecomp(...)
- Logical expression XOR manages more than 2 variables
- Add new API to IOutputFactory (to Gephi and to Graphviz)
- Add constraint network output (to gexf format), see
solver.constraintNetworkToGephi(file)
- add
ParallelPortfolio.streamSolutions
(#579)
#596, #600, #601, #602
Update DefaultSettings with right version
JAR file names have changed:
- the suffix 'with-dependencies' disappears,
- the suffix '-no-dep' (for no dependencies) appears.
This should intends to clarify the selection for new comers.
Add a PayPal button for donations.
Move to Ibex-2.6.5.
- Revamp
Settings
: no default method anymore, add setters. A concrete classDefaultSettings
provides the default behavior. IViewFactory.intScaleView
now manages negative constants,IViewFactory.intAffineView
is now available- add new constraint for mixed linear equation (over real/int variables and double/int coefficients)
- Dow/WDeg now manages variables in a bipartite set (instantiated variables are swaped)
- Assert that a propagator that is passive is not allowed to filter anymore
- An exception is thrown when a sum (or scalar) constraint is candidate for integer over/underflow (an alternative should be provided later)
BoolVar
now handles modifications in different way (may impact performances)- Propagation engine has changed: no alternative to seven-queue one anymore + simplification of code (may impact performances)
- add new relation expression
ift(e1,e2)
Model.set(Settings)
is deprecated. Now settings are declared in theModel
constructor.Settings.debugPropagation()
is deprecated. There is no alternative.
#527, #564, #569, #576, #578, #581, #586
Move to Ibex-2.6.3.
- Ibex instance is no longer static, that offers better stability and reduce memory consumption when adding/removing functions. Reification no longer managed by Choco but delegated to Ibex.
Search.realVarSearch(...)
offers possibility to define minimal range size, known asepsilon
Search.ibexSolving(model)
let Ibex iterates over solutions once all integer variables are instantiated- add detection of min/max sub-cases
- add simple dashboard in Swing to show resolution statistics, see
solver.showDashboard()
IntEqRealConstraint
will be removed in next release, Ibex managed this concept (int to real)Model.getIbex()
should not be used. AIbexHandler
manages Ibex instances (one per model).
#558, #561, #565, #566, #568, #570
The current release was submitted to MiniZinc Challenge 2017 and at XCSP3 Competition 2017 and won medals.
choco-parsers provides utility to export a Model
to JSON format
and or import JSON data into a Model
.
- Compact-Table now deals with short tuples (#531)
- Checking if a created constraint is free (neither posted or reified) is now possible with
Settings.checkDeclaredConstraints()
- Improvements on BoolVarImpl and BoolNotView.
- Remove code deprecated in last release.
- Fix error in Views.
- Add scalar detection in
BiReExpression
- fix errors in Impact-based Search
- update Search.intVarSearch() + Search.defaultSearch(Model)
- update ParallelPortfolio default strategies
- fix bug in
PropNogoods
when dealing with negative values (impactsolver..setNoGoodRecordingFromRestarts()
andsolver..setNoGoodRecordingFromSolutions(...)
) - fix bug in
model.sum(...)
andmodel.scalar(...)
when dealing with arity greater than 100 and all operators except=
- fix bug in
model.table(...)
with binary scope and universal value - fix bug related to Ibex and GC.
#531 ,#545, #546.
- add logical operator to expression (#520). Now it is possible, f-ex., to declare expression like:
x.eq(y.add(1)).or(x.eq(y).and(x.eq(1)))
- add new API to
Solver
to print features in a single line - enable ignoring passivate propagators when iterating over propagators of a modified variable (false by default; see Settings)
IPropagationEngine.fails(c,v,m)
is replaced bySolver.throwsException(c,v,m)
(#524)IPropagationEngine.getContradictionException()
is replaced bySolver.getContradictionException()
(#524)MathUtils.bounds(values)
is replaced by a call toMathUtils.min(values)
andMathUtils.max(values)
- SparseSet
- IFeatures, Features, IAttribute and Attribute
#516, #517, #518, #519, #520, #521, #524.
arithm(IntVar,String,IntVar,String,int)
andarithm(IntVar,String,IntVar,String,IntVar)
manage '*' and '/'- add new APIs to
ArrayUtils
- fix error in
PropBoolMin
andPropBoolMax
#500, #502, #507, #510, #512, #514, #515.
- restrict calls to
Solver.setEngine(...)
when propagation started. See javadoc for details. - remove global constructive disjunction, only local constructive disjunction is allowed.
- add
Solution.restore()
to restore a solution (#354). - deep reset of
Solver
(#490, #491)
Solver.getState()
(#485)Measures.IN_SEC
(related to #486)Settings.outputWithANSIColors
,IOutputFactory.ANSI_*
IMoveFactory.setLubyRestart(int, int, ICounter, int)
#468, #479, #480, #481, #484, #487, #488, #489, #492, #493, #494, #495, #496, #497, #499.