1Version 4.8 2============= 3 41. Removing -f (format) and -p (precision) option flags. Flatzinc uses 5 instead --format and --precision. Option -f is used to denote free 6 search, based on AFCMaxDeg/AFCMax variable selection method. The 7 default search (no search annotations) still uses the old search 8 method for compatibility reasons. 9 102. Improving debug information print-out for flatzinc. 11 123. Improvement in propagation for XinA constraint. 13 144. Improvement of propagation for ArgMin and ArgMax. 15 165. Generation of IfThenElse constraint instead of Conditional for 17 flatzinc if_then_else_* constraints in cases when it is possible. 18 196. Improvement in pruning of task duration in Cumulative Basic 20 constraint. 21 227. New implementation of counting constraints in flatzinc. Some 23 compile to Atleast and AtMost. Original at_least and at_most are 24 deprecated from version 2.4 of Minizinc. 25 268. New CountVar constraint and its flatzinc interface. 27 289. New global cardinality constraint CountValues and 29 CountValuesBounds. Changes in minizinc library for global 30 cardinality constraints to use these two new constraints. 31 3210. New constraint Channel that generalizes Reified 33 constraint. Available in Java and minizinc. Several reified 34 constraints on the same variable are converted to a single channel 35 constraint in flatzinc. 36 3711. Removing limitation in flatzinc compiler that flatzinc variables 38 must have domains within interval 39 IntDomain.MinInt..IntDomain.MaxInt. First constraints might report 40 arithmetic overflow. 41 4212. Changing Scala compiler to 2.13.1 and making related code changes. 43 4413. Not recognized search options in flatzinc are ignored instead of 45 aborting computation. 46 4714. Changing IntDomain.divIntBounds method to use double instead of floats 48 for bounds calculations (better precision). 49 5015. Constraints XplusYplusQeqZ, XplusYplusCeqZ and XplusYplusQeqC are 51 removed. Use SumInt instead. 52 5316. Additional CountBounds constraint added in flatzinc translation of 54 global_cardinality_low_up_closed if domain consistency annotation 55 is present (GCC does bounds consistency only). 56 5717. Bug corrections and performance improvements. 58 59Version 4.7 60============= 61 621. Implementation of restart search both in JaCoP and flatzinc (uses 63 standard minizinc annotation). 64 652. Implementation of priority search both in JaCoP and in flatzinc 66 (uses annotation priority_search; check JaCoP specific library 67 definition at jacop.mzn for the definition). 68 693. Making WeightedDegree variable selection method working correctly; 70 available in flatzinc as dom_w_deg. Adding new variable selection 71 methods based on accumulated failure count (AFC) and pruning 72 activity; defined in flatzinc also. 73 744. Time-out in flatzinc is changed to be specified in milliseconds (to 75 be compatible with minizinc options). 76 775. New distance step option for search with cost function specified as 78 FloatVar. Available in both Java and flatzinc. 79 806. Small corrections in pom.xml to use right version of Scala. 81 827. Restructuring of minizinc library with the new method introduced in 83 Minizinc 2.3. It uses fzn_*.mzn files to define JaCoP specific 84 global constraint 85 868. Definitions in redefintions.mzn and implementation of half-reified 87 constraints, that is minizinc constraints with the name *_imp. Implementation 88 of JaCoP constraint Implies. 89 909. Definitions and implementation of fzn_if_then_else_* constraints in 91 flatzinc JaCoP library and in Java (constraint Conditional). 92 9310. Implementation of Member constraint and making it available from 94 flatzinc (added into the JaCoP library). 95 9611. Flatzinc annotation "priority(k)" defining constraint priority 97 (0..4) where 0 is the highest and 4 the lowest priority of a constraint. 98 9912. New format for methods toString() for depth first search 100 methods. Flatzinc compiler prints search in debug mode. 101 10213. Bug corrections. 103 104Version 4.6 105============= 106 1071. Replacing buggy Lex constraint for sets with simple but correct 108 AltB and AleB. Both constraints implement lexical order between 109 sets using either "<" or "<=" relations. Lex is kept for 110 compatibility. 111 Constraints AltB and AleB are primitive and can be used as 112 parameters to other constraints. Implementation of flatzinc 113 set_lt_reif and set_le_reif. 114 1152. SumInt, SumBool, LinearInt, LinearIntDom and LinearFloat does not 116 need Store parameter any longer. 117 1183. Fix of null pointer exception in Binpacking constraint. It is 119 sometimes present if a bin variable is ground when constraint is 120 imposed. Improving performance of Binpacking constraint by running 121 computationally expensive lower bound computations only when 122 constraint is fix-point. 123 1244. New constraint for symmetry breaking, ValuePrecede. 125 1265. Implementation of ElementFloatVariable and ElementSetVariable as 127 well as related flatzinc predicates array_var_float_element 128 array_var_set_element. 129 1306. New version of Alldiff constraints that uses new algorithm with 131 complexity O(n logn) instead of O(n^2). 132 1337. Improvements in subcircuit constraint. It applies computationally 134 expensive dominance pruning if SCC did not pruned anything. 135 1368. New primitive constraints AtLeast and AtMost. Adding generation of 137 these constraints and their reified versions for flatzinc. 138 1399. Adding print-out of intermediate statistics for search (search nodes 140 and execution time) to flatzinc when option -v is given. 141 14210. Adding JaCoP solver configuration file, 'org.jacop.msc', for 143 minizinc 2.2 (both stand-alone and IDE) and fzn-jacop script to be 144 used to call JaCoP solve. 145 14611. New print-out of statistics for flatzinc that follows minizinc 2.2 147 standard. 148 14912. Definition of flatzinc library global constraint 150 alldifferent_except0 using global_cardinality_low_up_closed. 151 Related changes of generation of JaCoP GCC constraint. 152 15313. Bug fix in sequential search when there is float_search after 154 set_search. 155 156Version 4.5 157============= 158 1591. Performance improvements and identification of the same items in 160 Binpacking constraint. 161 1622. Correcting definitions of bin_packing and bin_packing_capa in JaCoP 163 flatzinc library. 164 1653. New constructor for LinearInt and LInearIntDom that makes it easier 166 to define it. Makes it possible to specify result as IntVar. 167 1684. New constraint SumFloat and new constructor for LinearFloat. Makes 169 it possible to specify result as FloatVar. 170 1715. New JaCoP specific variable selection options in flatzinc 172 (smallest_max, smallest_most_constrained, smallest_first_fail). It 173 requires to include jacop.mzn in minizinc program. 174 1756. Adding soft_all_different_int and soft_global_cardinality_int to 176 flatzinc. It requires to include jacop.mzn in minizinc program. 177 1787. Printing BooleanVar when store is printed. 179 1808. Adding possibility to Scala wrapper to define element constraint 181 on a list of BoolVar as array access. 182 1839. Adding floating-point constraints log2 and log10 to flatzinc to 184 JaCoP compiler. 185 18610. Two new classes for debugging and statistics gathering. 187 VariableTrace prints out variables prunings during search. 188 FailConstraintsStatistics gather number of fails for each 189 constraints and class of constraints. 190 19111. New cumulative constraints. CumulativeBasic does time-tabling 192 propagation, Cumulative does time-tabling and edge finding 193 propagation, and CumulativeUnary is a specialized version of unary 194 resources and does in addition to two previous propagations 195 not-first-not-last, detectable and overload propagations. All 196 propagations, except time-tabling, are done on binary trees and 197 have the following complexities, where n is the number of tasks 198 and k is the number of distinct resource values for tasks. Edge 199 finding O(k*n*logn), not-first-not-last, detectable and overload 200 O(n*logn). 201 20212. New, more efficient implementation of Diffn constraint. Added 203 Nooveralp constraint implementing basic non-overlapping 204 conditions for rectangles and DiffnDecomposed implemented as three 205 constraints: Nooverlap and two CumulativeBasic constraints in 206 direction X and Y. 207 20813. New Table and SimpleTable (number of table entries =< 64) 209 constraints based on compact-table representation. 210 21114. Calls to new cumulative, diffn and table constraints in Scala wrapper. 212 21315. New method for constraint generation for flatzinc. 214 21516. Making JaCoP compatible with Scala 2.12. 216 21717. Improvement in pruning for MinSimple and MaxSimple. 218 21918. Bug fixes: 220 - Changing comparator method in LinearFloat that 221 IllegalArgumentException is not reported. 222 - Correcting bugs in AndBool, OrBool and AndBoolSimple. 223 - Correcting a bug when a constraint needs information of changed 224 variables and is a parameter to other constraint, for example 225 Reified, Xor. 226 - Bug fix when reified BoolClause is generated in falzinc. The case 227 when BoolClause fails and reified variable is false. 228 - Bug fix in SumInt that stopped the propagator from computing a 229 fix-point in some situations. 230 - Bug fix in method inComplement that did not generated event 231 "BOUND" when bounds in the domain was changed (generated "ANY" 232 instead). 233 23419. Different Maven profiles for testing (commit, push, release) that 235 will execute different lengths tests in Maven test phase using 236 Minizinc tests stored in src/test/fz/ directory. 237 23820. Various code cleaning based on complaints from findbugs, Intelij IDE, 239 and Sonar. 240 24121. Adding workaround for a bug in Geost caused by too eager ignoring 242 execution of propagation when constraint is not consistent. 243 24422. Extending testing suites by adding thousands of minizinc based tests, 245 as well as some unit tests for domain classes. Adding fznFileGenerator 246 skrypt to quickly categorize new minizinc problems into time categories 247 to be used by future tests. 248 24923. Cleaning up design around Constraints. Refactoring a lot of code from 250 particular constraints into common functionality in Constraint. 251 252Version 4.4 253=========== 254 2551. New selection for search variables in minizinc. Only output 256 variables are selected by default. 257 2582. Adding additional pass to the flatzinc compiler. bool2int does not 259 generate the equality constraints on both variables. Only the first 260 variable is used in the model and the second one as the alias for 261 the first one. Decreases the number of generated constraints. 262 2633. Sum and SumWeight are deprecated and SumInt, SumBool or LinearInt 264 should be used instead. 265 2664. New circuit and subcircuit constraint definitions in minizinc that 267 accept arbitrary indexes (not always starting from 1). 268 2695. New constraint SumBool. 270 2716. Correcting a bug in OrBool constraint. 272 2737. Xor of Linear constraint corrected. Linear is deprecated and 274 LinearInt should be used instead. 275 2768. Correcting a bug in GCC. 277 2789. Improvements and corrections in Linear, LinearInt, SumInt, 279 LinearIntDom and LinearFloat. 280 28110. Bug fixes and improvements. 282 283Version 4.3 284=========== 2851. Implementation of constraints ArgMin and ArgMax as well connection to 286 flatzinc constraints arg_min_int and arg_max_int. 287 2882. Correcting implementation of Diff2 and Disjoint. Currently Diff2 289 implements non-strict version of diffn constraint (minizinc constraint 290 diffn_nonstrict) that makes it possible to pack zero-width rectangles 291 anywhere. Disjoint implements a strict version of diffn constraint 292 (minizinc diffn constraint). It requires that zero-width rectangles 293 does not overlap with any other rectangle. 294 2953. Implementation of primitive constraint BoolClause implementing flatzinc 296 constraint bool_clause. 297 2984. Sets of integer with bounds 1..0 are treated by flatzinc parser as 299 empty sets. This implements a way minizinc 2.0 represents empty sets. 300 3015. Adding int_pow build-in predicate to flatzinc interpreter. 302 3036. LexOrder global constraints accepts vectors of different sizes. 304 3057. Performance improvement for SumWeightDom. 306 3078. Performance improvement for ElementInteger and two new constraints 308 ElementIntegerFast and ElementVariableFast that implement a 309 straightforward pruning method. 310 3119. New primitive constraints LinearInt and SumInt that implement 312 pruning methods from paper "Bounds Consistency Techniques for Long 313 Linear Constraints" by Warwick Harvey and Joachim Schimpf. 314 31510. Fixing performance bug in IntervalBasedBacktrackableManager. 316 Unnecessary call to checkRemoveInvariant outside assert statement. 317 31811. Adding option --bound (-b) to flatzinc parser that enforces use of bounds 319 consistency for constraints (instead of domain, even for constraints 320 annotated with "::domain"). 321 32212. Adding SAT solver to JaCoP and connecting it to flatzinc 323 interpreter. The use of SAT solver in flatzinc is controlled by 324 option -sat. If the option is specified the SAT solver is used for 325 all bool_* constraints, otherwise CP constraints are used. 326 32713. Improving performance of Max and Min constraints. Specially for 328 large lists of varibales. 329 33014. Bug fixes. 331 332Version 4.2 333=========== 3341. Support for minizinc 2.0 3352. Constraint Geost avaible is now from minizinc. 3363. Implementation of Solution-Guided Multi-Point Constructive Search. 3374. Improvements in minimization method for floating-point variables. 338 339Version 4.1.1 340=========== 341 3421. New global constraint LexOrder that defines lexicographical order 343 between two vectors of IntVar. Vectors must be of the same size. 3442. Implementation of a loader for flazinc models and related examples. The 345 loader makes it possible to load the model and then define own search 346 methods as well as use all variables defined in the model and their values. 3473. Performance improvements in AndBool and OrBool. it is no longer needed 348 to scan the whole list for achieving consistency. 3494. Checking for overflow in Sum and improvement in detecting overflow for 350 addition. 3515. Since domain consistency is computationally expensive minizinc uses 352 domain consistency for linear constraints only when constrained are 353 annotated ":: domain" and the size of maximal domains is <= 4 and 354 there is no more than 2 variables. 355 356Version 4.1 357=========== 358 3591. New floating point variables and constraints on these variables. 360 3612. Flatzinc interface for JaCoP's floating point constraints. 362 3633. Scala interface for floating point constraints. 364 3654. Fixing a bug in knapsack constraints when large numbers are used. 366 3675. Implementing intersection method between SmallDenseDomain and BoundDomain. 368 369Version 4.0 370=========== 371 3721. Maven support and new directory structure. The package has changed name from JaCoP to org.jacop and files are placed in the new directory structure. 373 3742. Experimental feature - stochastic variables and constraints - is moved to feature branch as it still requires additional testing. 375 It is excluded from this release, but we encourage contribution in this branch (examples/tests in particular) to help us make it 376 quicker a part of the next release. 377 3783. Experimental feature SAT solver - JaSAT - is moved to experimental feature branch as its performance and integration with JaCoP still 379 requires extra work. It is excluded from this release, but we encourage contribution in this branch to help us make it quicker a part 380 of the next release. 381 3824. Adding constraint SumWeightDom that implements domain consistency 383 for weighted sum of linear terms. 384 3855. New primitive constraint Linear and its use in flatzinc. 386 3876. New global constraint Subcircuit. 388 3897. Adding additional propagation to Min and Max constraint. It 390 propagates in situations when one variable on the list is lowest 391 (greatest). It enforces that this variable from the list is equal 392 min (max) variable. 393 3948. Print of statistics for flatzinc (org.jacop.fz.Fz2jacop) after Ctrl-C. 395 3969. Updated JaCoP guide to reflect new features. 397 39810. Bug fixes. 399 400Version 3.2 401============= 402 4031. Fixes few bugs 4042. Provides an interface from Scala to JaCoP. Examples using Scala are provided in ExamplesScala package. 405 406Version 3.1.2 407============= 408 409The release of JaCoP version 3.1.2 fixes several bugs and makes JaCoP compatible with minizinc v.1.4. 410 4111. Compatibility changes for minizinc 1.4. 4122. Bug fix of reification in several primitive set constraints that made pruning working correctly. 4133. New method for pruning length of rectangles in Diff/Diff2 constraints. 4144. Several small bug fixes. 4155. Bug fix in search to make limit on a number of solutions work correctly (specially for sequence search). 416 417Version 3.1.1 418============= 419 4201. Changes to bo compatible with minizinc v. 1.3. 4212. New pruning methods for multiplication and division constraints, icluding div and mod. 4223. Bug fix in Among constraint. 4234. Bug fix in SmallDenseDomain. 424 425 426Version 3.1 427=========== 428 429This release fixes few bugs as well as provides a new Binpacking constraint. 430 431The Binpacking constraint allows modeling of problems exhibiting bin 432packing problem structure. The addition of this constraint introduced 433changes to minizinc/fz library in JaCoP since the definitions of 434bin_packing.mzn, bin_packin_capa.mzn and bin_packing_load.mzn have 435been added. The JaCoP guide has been updated to explain how to use 436Binpacking constraint. 437 438Version 3.0 439=========== 440 441We have just released JaCoP 3.0 final. Since the previous release 442(RC2) we have fixed one rarely triggering bug in ElementInteger 443constraint, as well as added code supporting generation of data for 444CP-viz framework. Here is the list of most important changes since 445version 2.4. 446 4471) The introduction of Network Flow constraint, which allows efficient 448 modeling of problems with network flow structure. The constraint 449 allows to specify minimum cost flow problem in terms of finite 450 domain variables. It uses network simplex algorithm as an 451 propagator for network-like structure. It is a very expressive 452 constraint where arc flow and arc unit costs can be specified by 453 variables. 454 4552) The introduction of set package forced changes in the design of 456 core interfaces. There are IntVar and SetVar classes which inherit 457 from Var class. This change allowed to refactor and improve set package 458 so it is designed in cleaner and more efficient manner. 459 4603) The introduction of special domain representation SmallDenseDomain, 461 which uses bits within a long primitive type to encode small 462 domains of range not larger than 64. 463 4644) The introduction of Soft-alldifferent as well as Soft-GCC global 465 constraints. The soft-alldifferent constraint implements Variable 466 and Decomposition based violation metrics. The soft-gcc constraint 467 implements value based violation metric. Both are decomposed constraints 468 based on network flow constraint. 469 4705) Examples have been updated by moving multiple solving functionality 471 from main function to test function, so user can easily see what is 472 the best model just by looking at main function. BIBD example has 473 been added. Examples with Set variables have been updated to 474 reflect the changes. 475 4766) A number of bug fixes and changes in flatzinc interface to better 477 comply with minizinc 1.1. We have also added into minizinc 478 predicates networkflow that uses newly introduced JaCoP Network 479 Flow constraint. 480 4817) A number of minor API changes to improve intuitiveness of use 482 (e.g. order of arguments in constructors). 483 4848) The JaCoP guide has been updated to reflect the changes and additions 485 to the newest version. 486 487Version 2.4.2 488============= 489 490The main reason for this release is change of Minizinc standard, the 491newest version handles Minizinc 1.1. 492 493Version 2.4.1 494============= 495 496??? 497 498Version 2.4 499=========== 500 501The version 2.4 has a number of new features in addition to some bug 502fixes. The most important additions in this version are: 503 504The flatzinc interface that makes it possible to run minizinc programs 505using JaCoP. The distribution contains number of different minizinc 506examples. 507 508Geometrical constraint, geost, based on pruning algorithms originally 509proposed by Nicolas Beldiceanu et al. This constraint makes it 510possible to define placement problems of non-convex objects in 511k-dimensional space. 512 513Knapsack constraint, which is based on the work published by Irit 514Katriel et al. We extend the original work in number of ways, for 515example by making it possible to use non-boolean quantity variables. 516 517Set constraints defining typical operation on sets using set interval 518variables. 519 520Version 2.3 521=========== 522 523As with previous releases, JaCoP focuses on ease of use, efficiency, 524and modeling power by providing more and more global constraints. 525 526In JaCoP 2.3 you'll notice: 527 528Number of new global constraints implemented, namely Among, GCC, 529Regular, two new variants of ExtensionalSupport constraint (STR, MDD), 530Stretch, and Sequence constraints. 531 532Redesigned search functionality making it possible to express search 533as by designing search plugins and transforming available search. 534 535Redesigned part of the JaCoP core focusing on domains, making it 536easier to add new domains representations. 537 538Significantly improved Java Doc API making code even better 539documented. 540 541Number of new examples explaining how to apply CP technology. 542 543 544Version JaCoP 2.2 545================= 546 547 548Version JaCoP 2.1 549================= 550 551Version JaCoP 1.7 552================= 553 554Version JaCoP 1.3 555================= 556