JaCoP v4.5 Release Notes

  • ๐ŸŽ 1. Performance improvements and identification of the same items in Binpacking constraint.

    1. Correcting definitions of bin_packing and bin_packing_capa in JaCoP flatzinc library.

    2. New constructor for LinearInt and LInearIntDom that makes it easier to define it. Makes it possible to specify result as IntVar.

    3. New constraint SumFloat and new constructor for LinearFloat. Makes it possible to specify result as FloatVar.

    4. New JaCoP specific variable selection options in flatzinc (smallest_max, smallest_most_constrained, smallest_first_fail). It requires to include jacop.mzn in minizinc program.

    5. Adding soft_all_different_int and soft_global_cardinality_int to flatzinc. It requires to include jacop.mzn in minizinc program.

    ๐Ÿ–จ 7. Printing BooleanVar when store is printed.

    1. Adding possibility to Scala wrapper to define element constraint on a list of BoolVar as array access.

    2. Adding floating-point constraints log2 and log10 to flatzinc to JaCoP compiler.

    3. Two new classes for debugging and statistics gathering. VariableTrace prints out variables prunings during search. FailConstraintsStatistics gather number of fails for each constraints and class of constraints.

    4. New cumulative constraints. CumulativeBasic does time-tabling propagation, Cumulative does time-tabling and edge finding propagation, and CumulativeUnary is a specialized version of unary resources and does in addition to two previous propagations not-first-not-last, detectable and overload propagations. All propagations, except time-tabling, are done on binary trees and have the following complexities, where n is the number of tasks and k is the number of distinct resource values for tasks. Edge finding O(k*n*logn), not-first-not-last, detectable and overload O(n*logn).

    5. New, more efficient implementation of Diffn constraint. Added Nooveralp constraint implementing basic non-overlapping conditions for rectangles and DiffnDecomposed implemented as three constraints: Nooverlap and two CumulativeBasic constraints in direction X and Y.

    6. New Table and SimpleTable (number of table entries =< 64) constraints based on compact-table representation.

    7. Calls to new cumulative, diffn and table constraints in Scala wrapper.

    8. New method for constraint generation for flatzinc.

    9. Making JaCoP compatible with Scala 2.12.

    10. Improvement in pruning for MinSimple and MaxSimple.

    ๐Ÿ›  18. Bug fixes:

    • Changing comparator method in LinearFloat that IllegalArgumentException is not reported.
    • Correcting bugs in AndBool, OrBool and AndBoolSimple.
    • Correcting a bug when a constraint needs information of changed variables and is a parameter to other constraint, for example Reified, Xor.
    • Bug fix when reified BoolClause is generated in falzinc. The case when BoolClause fails and reified variable is false.
    • Bug fix in SumInt that stopped the propagator from computing a fix-point in some situations.
    • Bug fix in method inComplement that did not generated event "BOUND" when bounds in the domain was changed (generated "ANY" instead).

    ๐Ÿš€ 19. Different Maven profiles for testing (commit, push, release) that will execute different lengths tests in Maven test phase using Minizinc tests stored in src/test/fz/ directory.

    1. Various code cleaning based on complaints from findbugs, Intelij IDE, and Sonar.

    โ†ช 21. Adding workaround for a bug in Geost caused by too eager ignoring execution of propagation when constraint is not consistent.

    โœ… 22. Extending testing suites by adding thousands of minizinc based tests, as well as some unit tests for domain classes. Adding fznFileGenerator skrypt to quickly categorize new minizinc problems into time categories to be used by future tests.

    ๐Ÿ”จ 23. Cleaning up design around Constraints. Refactoring a lot of code from particular constraints into common functionality in Constraint.