this repo has no description
1MiniZinc Change Log 2------------------- 3 4For detailed bug reports consult the issue tracker at 5https://github.com/MiniZinc/libminizinc/issues. 6 7.. _v2.5.3: 8 9`Version 2.5.3 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.5.3>`__ 10~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 12(released 24 November 2020) 13 14Changes: 15^^^^^^^^ 16 17- Fully reify -> (x != y) in the linear library. 18- Allow printing of comprehensions using introduced variables. 19- Allow increasing/decreasing over multidimensional arrays. 20- Add mzn_ignore_symmetry_breaking_constraints and mzn_ignore_redundant_constraints 21 options, allowing the symmetry_breaking_constraint and redundant_constraint 22 predicates to be overridden, so that those constraints can be disabled independent 23 of the solver library that's being used (:bugref:`429`). 24- Add automatic coercion of strings in JSON input data to enum constants where needed. 25- Add automatic coercion of lists in JSON input data to sets where needed. 26 27Bug fixes: 28^^^^^^^^^^ 29 30- Fix int_lin_eq_imp in the linear library. 31- Use variable declaration location for invalid type-inst error messages without 32 locations. 33- Rewrite par versions of fzn_count_* into var versions, allowing solvers that 34 only redefine the bar version to use their built-in propagators even if the 35 value to count is fixed at compile time (:bugref:`427`). 36- Add multi-level array construction for enumerated types when outputting in 37 JSON format. 38- Ensure that functions can only be used as par if their return type is par 39 (:bugref:`431`). 40- Fix parser default location macro, preventing loss of location filenames 41 in some cases. 42- Fix parser rule for non-opt sets to give the correct starting location. 43- Fix fzn_bin_packing_capa_reif.mzn and fzn_bin_packing_load_reif.mzn 44 (:bugref:`435`). 45- Update decl for binary and unary operators when creating par versions of 46 functions (:bugref:`437`). 47- Only throw type errors for enum type identifier mismatch in strict enums mode. 48- Only post cumulative constraints if there is at least one task, preventing an 49 assertion about the lower bound from failing. 50 51Changes in the IDE: 52^^^^^^^^^^^^^^^^^^^ 53 54- Only reset config window item focus if it is still focused, preventing spurious 55 changes in focus during code checking. 56- Fix handling of final statuses, including UNSAT (:idebugref:`123`). 57- Remove -s flag support from Gecode Gist solver configuration (:idebugref:`125`). 58- Fix crash when saving a project with no solver selected (:idebugref:`127`). 59- Correctly remove temporary parameter configuration files after use 60 (:idebugref:`128`, :idebugref:`129`). 61- Fix the time limit readout in the status bar when solving. 62 63.. _v2.5.2: 64 65`Version 2.5.2 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.5.2>`__ 66~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 67 68(released 6 November 2020) 69 70Changes: 71^^^^^^^^ 72 73- Use full reification in int_ne_imp. 74- Add support for redefining 2d element constraints in the solver library. 75- Produce warning when shadowing a variable in a let or comprehension in the 76 same function (or toplevel) scope (:bugref:`419`). 77- Rewrite symmetric_all_different to inverse (:bugref:`426`). 78- Add link icons to globals etc in the reference documentation (:bugref:`425`). 79- Make the nodes statistic show the total number of nodes across all restarts 80 for SCIP. 81- Add support for multidimensional arrays in counting constraints (:bugref:`413`). 82- Allow .json files to be specified using the --data option (in addition to 83 .dzn files). 84- When specifying relative paths inside parameter configuration files, 85 resolve them relative to the config file. 86 87Bug fixes: 88^^^^^^^^^^ 89 90- Correctly add file extension to plugin libraries when omitted. 91- Fix JSON array index coercion when the first index is undefined. 92- Catch ResultUndefined exception when evaluating cv par expressions, 93 and turn into undefined result. 94- Fix trailing for lets and comprehensions, resolving some issues with 95 recursive functions containing lets and/or comprehensions. 96- Only create par version of functions that do not refer to any toplevel 97 variables (:bugref:`418`). 98- Keep correct location information for identifiers. 99- Print warnings from solns2out. 100- Fix the removal of reverse mapped arrays when they contain aliases. 101- Disallow macro replacement when call has reification implementation. 102- Fix the behaviour of passing an invalid version hint to --solver. 103 104Changes in the IDE: 105^^^^^^^^^^^^^^^^^^^ 106 107- Properly resize extra flags table after adding parameters (:idebugref:`119`). 108- Use the minimal configuration to check the model interface 109 (:idebugref:`118`). 110- Allow omitting builtin solver version in project JSON. 111- Don't mark as modified when loading non-synced solver configurations. 112- Ensure the last open configuration in a project is selected when loaded. 113- Fix the default values of solution truncation and output window clearing. 114- Process unrecognised extra flags from old project configurations. 115- Fix watching for modification of the additional data box. 116- Fix the alignment of line numbers. 117- Make behaviour controls more narrow to accommodate smaller window sizes. 118- Defocus config window widgets when updating solver config so values of 119 currently edited fields are updated. 120- Pass user input data correctly during compilation. 121- Remove solns2out options from MiniZinc call when compiling. 122 123.. _v2.5.1: 124 125`Version 2.5.1 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.5.1>`__ 126~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 127 128(released 22 October 2020) 129 130Changes: 131^^^^^^^^ 132 133- Rewrite alldifferent_except_0 to fzn_alldifferent_except_0, to enable 134 solvers to implement that constraint if it is available (:bugref:`414`). 135- Propagate domains for variables even when reverse-mapped. This 136 ensures that variables with multiple encodings can be created with 137 the tightest possible bounds. 138- Fail instead of producing empty domains when simplifying int_le 139 constraints. 140- Allow parsing of nested objects in parameter configuration files. 141- Add --backend-flags option to provide a uniform way of passing flags 142 to an underlying solver. 143- Add extra flags support to the MIP solver interfaces, allowing 144 parameters to be set in the IDE. 145- Improve automatic detection of the Xpress solver and license file. 146- Allow the use of spaces in the --solver flag argument. 147- Automatically add the last part of the solver ID as a tag. 148- Improve handling of var functions in output, automatically creating 149 par versions of var functions if possible. 150 151Bug fixes: 152^^^^^^^^^^ 153 154- Fix parsing of empty multidimensional JSON arrays. 155- Allow use of --parallel long form option in MIP solvers. 156- Fix item lookup when increasing annotation usage in annotate builtin. 157- Fix JSON array coercion to handle arrays with 1 unknown index. 158- Don't try to access array dimensions for output of empty 159 multi-dimensional arrays. 160- Print verbose version information to stderr instead of stdout. 161- Fix context handling when flattening par expressions that contain 162 variables (:bugref:`415`). 163- Flatten string expressions if they contain variable parts in 164 assert/abort/trace calls. 165- Fix breakage on older versions of Windows due to UTF-8 conversion 166 failing. 167- Remove defines_var/is_defined_var annotations when simplifying 168 boolean constraints. 169- Fix transfer of cv status from where parts to newly generated 170 conjunctions during typechecking. 171- Fix multiple issues with the defined_var / is_defined_var 172 annotations. 173- Move all included files from stdlib into solver_redefinitions.mzn, so 174 that solver redefinitions are not marked as belonging to the standard 175 library (:bugref:`416`). 176- Fix documentation group for standard annotations (:bugref:`417`). 177- Show correct version of solver plugins which have their DLLs 178 specified using a command-line parameter (:bugref:`411`). 179- Fix arbitrary flag support for NL solvers. 180- Kill child processes if exception occurs during solns2out on 181 Unix-like platforms. 182 183Changes in the IDE: 184^^^^^^^^^^^^^^^^^^^ 185 186- Fix typo when passing solver statistics option to minizinc (:idebugref:`112`). 187- Fix missing statistics output (:idebugref:`112`). 188- Add support for colour themes (:idebugref:`110`). 189- Don't prompt for saving after adding/removing files from the Untitled 190 project. 191- Fix running of compiled FlatZinc files. 192- Show error message when trying to load an invalid configuration file. 193- Ensure all output is sent to the output console, and that fragments 194 in standard error output appear when a newline is written to standard 195 output (:idebugref:`114`). 196- Fix running of solver configurations from the project explorer. 197- Improve performance of adding a large number of extra flags at once. 198- Add support for 64-bit integer extra flags. 199- Add support for setting both solver backend flags and MiniZinc 200 command flags (:idebugref:`113`). 201- Improve interface for adding extra parameters, allowing search/filter 202 and multiselection of known parameters. 203 204.. _v2.5.0: 205 206`Version 2.5.0 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.5.0>`__ 207~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 208 209(released 6 October 2020) 210 211Language, tool and library changes: 212^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 213 214- Allow `reading command line arguments from JSON config 215 file </doc-2.5.0/en/command_line.html#ch-param-files>`__. 216- Add support for `enum 217 constructors </doc-2.5.0/en/modelling2.html#enumerated-types>`__. 218- Put subprocesses in their own process group so that they don't 219 receive signals from both the console and MiniZinc. 220- Implement soft and hard process timeouts on Windows, allow triggering 221 of shutdown from named pipe on Windows for the IDE. 222- Make MiniZinc unicode-aware on Windows. 223- Better error messages for index set mismatches. 224- Report similar identifiers when matching fails. 225- Better error messages when a call cannot be matched to an existing 226 function or predicate. 227- Print error stack if top of stack is a single identifier (i.e., error 228 occurred while flattening a variable declaration). 229- Add new separate flags for intermediate and all solutions. -i enables 230 intermediate solutions for optimisation problems and 231 --all-satisfaction enables all solutions for satisfaction problems. 232 233Changes in interfaces to solvers: 234^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 235 236- Solvers which only support intermediate solutions now can now support 237 the standard flag -i rather than -a. 238- Restructure the `MiniZinc standard 239 library </doc-2.5.0/en/lib-stdlib.html#standard-library>`__. 240 241Changes in MIP solver backends: 242^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 243 244- Remove non-conforming -n flags for MIP solver configs standard flags. 245- Improve autodetection of Gurobi DLL. 246- Find Gurobi 9.0.2 when building. 247- Don't create gurobi log. 248- Interface to concurrent solves in Gurobi (--readConcurrentParam). 249- Add -DMinMaxGeneral option for min/max as fzn_array_float_minimum for 250 Gurobi 251- Find SCIP 7.0 on Windows 252- Use -Glinear library, built-in cumulative by default for SCIP. 253- Use quadratics in Gurobi and SCIP by default. 254- Add options --xpress-root and --xpress-password for finding Xpress 255 installation directory and licence file. 256- Add MIQCP quadratic constraints for Gurobi and SCIP. 257 258Changes dealing with option types: 259^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 260 261- Add opt versions of several globals. 262- Define weak equality for var opt bool. 263- Add set_in definitions for var opt int. 264- Add opt versions of enumerated type functions (to_enum, enum_next, 265 enum_prev etc). 266- Enable set literals with optional values (which will be ignored), 267 including var set literals with var opt int elements. 268- Add opt version of float_dom to stdlib. 269- Change unary not for opt bool to use absorption lifting. 270- Add array2set functions on var opt int arrays. 271- Add opt versions of dom, dom_array and dom_bounds_array. 272- Add missing logical operators to var opt bool. 273 274Changes in the MiniZinc IDE: 275^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 276 277- Remove support for the old binary storage format of projects. These 278 must be opened and re-saved with version 2.4.3 to remain compatible. 279- Include experimental CP-profiler through the \*MiniZinc\* > \*Profile 280 search\* option for supported solvers. 281- Redesign the solver configuration window. 282- Use parameter configuration files rather than passing command-line 283 options directly. 284- Show solver configurations and checkers in their own sections in the 285 project explorer. 286- Allow multiselection in the project explorer for running particular 287 sets of files. 288- Allow MiniZinc to manage subprocesses by itself. 289- Allow non-privileged installs of the IDE on Windows. 290- Correctly remove files from old installations of the IDE on Windows. 291- Enable scroll bars in the preferences dialog to allow for low 292 resolution displays. 293- Prompt to save modified files before performing MOOC submissions or 294 running models. 295- Fix infinite recursion when a model file for a MOOC submission 296 doesn't exist. 297- Use --output-mode checker for MOOC solution submission where 298 supported. 299- Fully support unicode on Windows. 300 301Minor changes: 302^^^^^^^^^^^^^^ 303 304- Clean up code base and format using clang-format and clang-tidy. 305- Update WebAssembly build for new versions of emscripten. 306- Support --cp-profiler option to activate search profiler for IDE. 307- Add --solver-json to output single solver config as JSON. 308- Coerce JSON arrays to match the MiniZinc TypeInst. 309- Add more informative README file. 310- Split shared MIP cpp code into seperate CMake object target. 311- Compile with POSITION_INDEPENDENT_CODE targets by default. 312- Change ASTString to use String Interning. 313- Add included_files output to model interface. 314- Update Bison parsers to be compatible with Bison 3.7. 315- Allow annotating enum declarations. 316- Add support for --c_d and --a_d options to set recomputation 317 commit/adaption distance for Gecode presolver. 318- Place float_set_in in a version redefinition documentation group. 319- Place int_pow_fixed into a version redefinitions group. 320- Move set_in(var int, set of int) to the Integer FlatZinc Builtins. 321- Make "show" display contents of arrays rather than array identifiers 322 if the array is var 323- Add support for checking statistics after solving has finished. 324- Include preferences set by IDE repository. 325- Add has_ann(var, ann) annotation introspection builtin. 326- Use reverse mapped version for output if FlatZinc contains an aliased 327 variable. 328- Remove NDEBUG flag from the compile flags added by CPLEX and Gurobi. 329- Use integer variables in decomposition for array_int_element, 330 array_var_int_element, array_int_minimum, and array_int_maximum. 331- More preprocessing for pow(int, int). 332- Add is_same builtin. 333- Add multiobjective annotation for Gurobi and Yuck (in 334 std/experimental.mzn). 335- Add --output-mode checker, which outputs exactly the variables that 336 are required for a given solution checker. 337- Improve propagation of annotations, especially for redefined forall, 338 exists, clause, xor 339- Make omitting RHS from output_only variable a type error. 340- Add support for var set comprehensions 341- Make sets inside set literals a type error (rather than evaluation 342 error). 343- Aggregate bool_not into exists/clause, use bool_not(e) for 344 clause([],[e]) expressions 345- Cleanup the common-subexpression elimination table. 346- Generate bool_not calls (instead of bool_eq_reif) and add both "x=not 347 y" and "y=not x" into the CSE map, to avoid double negations. 348- Add arg_max and arg_min builtins for boolean arrays. 349- Remove -O flag from ozn file naming. 350- Allow var items in checkers to be omitted from the model. 351- Add builtins for binary operators that have a var redefinition. 352- When an integer or bool variable has a singleton domain, use the 353 value. This enables more overloading to par functions. 354- Check if domain becomes empty when binding variable to value, 355 avoiding empty domains (such as 1..0) in FlatZinc. 356- Ignore unknown JSON data items instead of throwing an error. 357- Add trace_logstream and logstream_to_string builtins. These can be 358 used for writing model checkers/graders, but also for general 359 logging. 360- Clean up CMake configuration 361- Allow any installed solver to be used with the test suite, add 362 ability to test for expected ozn output. 363 364.. _bug-fixes-1: 365 366Bug fixes: 367^^^^^^^^^^ 368 369- Fix error message for type errors in domains that are integer 370 literals (:bugref:`408`). 371- Fix comprehensions over option types, which could cause crashes and 372 incorrect flattening (:bugref:`407`). 373- Fix the usage count of annotations added using the annotate function 374- Flatten "in" expressions in comprehensions when required. 375- Check if operator is built-in after evaluating arguments, to make 376 sure it is rewritten into the correct predicate. 377- Use dom(x) instead of lb(x)..ub(x) for opt int. 378- Use eval_par to compute bounds for par expressions since they might 379 be opt. 380- Use library defined operators where available. 381- Fix -O flag parsing for optimisation level. 382- Fix par set inequality calculation. 383- Flatten domain expressions that contain variables. 384- Catch ResultUndefined when flattening an array with an undefined 385 expression in a generator 386- Fix source paths in MD5 generation scripts. 387- Fix crash when reporting undefined result in assignment generator. 388- Only add coercion for normal generators, not for assignment 389 generators. 390- Check output var status on actual item being removed. 391- Include absolute path instead of filename in multipass processing. 392- Coerce comprehension generators if necessary, so that slicing 393 notation can be used there. 394- Fix copying of comprehensions with followIds. 395- Fix the method signature of printStatistics for Geas. 396- Ensure the definition of reverse mappers are copied into the output 397 model. 398- Print solns2out statistics to stdout to comply with MiniZinc spec. 399- Minor doc-fix for global_cardinality_closed. 400- Make statistics output comply with MiniZinc spec. 401- Fix reverse function to work with empty arrays 402- Fix the coercion of boolean sum in aggregation. 403- Remove eval_par on var expressions in show builtin. 404- Fix the table construction for the Geas solver interface 405- Fixed wrong sign in Boolean linear constraints in Geas solver 406 interface. 407- Fix istrue and isfalse by using flat_cv_exp if necessary. 408- Fix the excess flattening of items marked for removal. 409- Do not add newline to output when killing FlatZinc solver process, 410 since this may be in the middle of a line 411- Fix typo in loop for Geas solver instance. 412- Don't call doAddVars when there are no variables, fixing a crash in 413 MIP solvers for empty models. 414- Do not copy type of lhs onto rhs when parsing solutions. This tagged 415 some literals as cv(), which broke the evaluation. 416- Fix flattening of all par set literals. 417- Fix error macro to be compatible with newer versions of Bison (:bugref:`389`). 418- Fix printing of if-then-else expressions without an else branch. 419- Fix allowed solvers option in test suite. 420- Make bind only create an int_eq constraint if a variable has a 421 reverse mapper. 422- Fix automatic coercions to keep cv type attribute of their argument 423 (:bugref:`387`). 424- Fix copying of output_only variables to the output model. 425- Only print checker output for unique solutions. 426- Fix rewriting of lin_exp into int/float_lin_eq. 427- Fix flattening of calls and let expressions that have par type but 428 contain var expressions. 429- Use eval_bool instead of eval_par for boolean evaluation. 430- Remove the direct assignment to a domain if it has a reverse mapper. 431- Fix arg_max and arg_min for array index sets not starting at 1. 432- Add missing set_superset_reif FlatZinc predicate. 433- Fix counting of non-fixed variables in Boolean constraints. Could 434 previously lead to incorrect simplifications. 435- Enable eval_floatset for SetLits that contain an IntSetVal. This is 436 used during chain compression and could previously result in 437 incorrect domains. 438- Fix bugs in chain compressor caused by modifying multimaps while 439 iterating over them. 440- Fix crash when cleaning up after running builtin Gecode. 441- MIPdomains: don't assume equations have no literals. 442- Only fix domain after flattening bool_eq. 443- Only return singleton domain as value for non-optional variables. 444- When evaluating identifier that is bound to a fixed value, check that 445 the value is inside the domain to correctly detect model 446 inconsistency. 447- Add missing assert and trace builtin overloads. 448- Flatten expressions that may contain variables in par where clauses. 449- Fix segmentation fault when the declaration of an array is passed to 450 setComputedDomains with the -g parameter. 451- Consider single-valued domain variables to be fixed 452- Add missing definition of to_enum for arrays of sets. 453- Evaluate partiality of arguments even if call was already in CSE 454 table (:bugref:`374`). 455 456.. _v2.4.3: 457 458`Version 2.4.3 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.4.3>`__ 459~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 460 461(released 4 March 2020) 462 463.. _changes-1: 464 465Changes: 466^^^^^^^^ 467 468- Enable CPLEX 12.10. 469- Add checker output to generated output items. 470- Short-circuit evaluation for mixed par/var conjunctions, 471 disjunctions, and clauses. 472- Add inverse_in_range global. 473- Pretty printing set ranges now uses union instead of ++ to be 474 compatible with DZN. 475- Add array2set for par bool and float arrays 476- The \_objective variable is no longer added to FlatZinc input files. 477- JSON representation of sets with ranges can now be parsed (previously 478 they could only be output). 479- Check index sets to arguments of global_cardinality_low_up. 480- Xpress and SCIP are not compiled as plugins and no longer require 481 recompilation to enable. 482- If-then-else for opt are no longer written in terms of the non-opt 483 version, allowing them to return absent. 484 485.. _bug-fixes-2: 486 487Bug fixes: 488^^^^^^^^^^ 489 490- Fix checking of domains and index sets in par arrays inside lets. 491- Remove duplicate call stack items to improve error messages. 492- Ignore absent values when computing domains. 493- Generate call for actual binary operator (after optimising double 494 negation). Fixes :bugref:`364`. 495- Fix non-associative operators on optional values. 496- Only output optional parameters in model interface if they were 497 undefined (rather than assigned to <>). 498- Fix some issues with evaluating par opt expressions. 499- Make solution checkers work for multi-dimensional arrays and arrays 500 with enum index sets 501- Fix Boolean aggregation for expressions that are defined recursively. 502- Use correct index set for nosets set_lt and similar (partial fix for 503 :bugref:`369`) 504- Fix coercion of sets to arrays (previously, coercing a set of X to an 505 array of X to an array of Y did not work correctly). 506- Fix infinite loop when printing infinite set range 507- Add assertion so that array2set can only be used for arrays with 508 bounds (:bugref:`370`, :bugref:`371`). 509- Fix typing and pretty printing of par bool sets. 510- Use output_array dims for output vars in FlatZinc files (previously, 511 a type-checker error would occur when running a solver through 512 MiniZinc on a FlatZinc file with multidimensional arrays). 513- The Xpress backend was made functional again. 514- Fix segmentation fault in output_only type-checking. 515- Compute correct array enum type for array slices (:bugref:`372`). 516- Fix behaviour of using undefined expressions in var comprehensions 517 guarded against by where clauses (previously, these undefined 518 expressions would bubble up regardless of the where clause, 519 constraining the model). 520- IDE: Disable menu items that don't make sense when all tabs are 521 closed, fix behaviour of stop button when all tabs closed (fixes 522 several crashes). 523- IDE: Add x86_64 suffix to linux package name (:idebugref:`96`). 524- IDE: Make boolean extra solver options with a default of true 525 functional. 526- IDE: Only read linter results if it exited normally (:idebugref:`97`). 527- IDE: Resolve paths in \_mooc to paths (allowing submission of models 528 in subdirectories). 529 530.. _v2.4.2: 531 532`Version 2.4.2 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.4.2>`__ 533~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 534 535(released 10 January 2020) 536 537.. _changes-2: 538 539Changes: 540^^^^^^^^ 541 542- The test suite is now integrated into the continuous integration 543 system. 544 545.. _bug-fixes-3: 546 547Bug fixes: 548^^^^^^^^^^ 549 550- Fix flattening of negated disjunctions (:bugref:`359`). 551- Fix simplification of Boolean constraints (repeated simplification 552 could sometimes crash). 553- Fix memory management during flattening of conditionals (:bugref:`358`). 554- Fix type inference for rewriting of sums into count constraints, and 555 only apply the rewriting for var type-insts. 556- Fix handling of solution checkers (these used to produce spurious 557 error messages). 558- IDE: Fix syntax highlighting of keywords, and add syntax highlighting 559 for interpolated strings. 560- IDE: Redraw when switching to/from dark mode, and fix dark mode 561 header colours. 562- IDE: Fix "Select all" menu item. 563 564.. _v2.4.1: 565 566`Version 2.4.1 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.4.1>`__ 567~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 568 569(released 20 December 2019) 570 571.. _changes-3: 572 573Changes: 574^^^^^^^^ 575 576- Improve compiler optimisation for some linear, multiplication and 577 Boolean constraints. 578- Improved translation of lex and all_equal constraints when the arrays 579 have no or only one variable. 580- IDE: Display error message when submission to MOOC provider fails. 581- IDE: Make "previous tab" and "next tab" actions cycle rather than 582 stop at first/last tab. 583 584.. _bug-fixes-4: 585 586Bug fixes: 587^^^^^^^^^^ 588 589- Fixed regular expression constraint for expressions containing 590 negated character classes (^ operator). 591- Fix element constraint in nosets.mzn library when set domains are not 592 contiguous. 593- Correctly identify Windows paths starting with // or \\\\ as absolute 594 (this enables the parser to open files stored on network drives). 595- Use set_in constraints (rather than int_in) for internal Gecode-based 596 presolver. This fixes some issues when compiling with -O3. 597- The optimisation phase of the compiler now fully substitutes par bool 598 variables (these can be introduced into the FlatZinc during multipass 599 compilation). (:bugref:`357`) 600- Fixed the reference counting for variables that are re-used in 601 multipass compilation. (:bugref:`357`) 602- Remove incorrect error handling when parsing from strings rather than 603 files. Partially fixes (:bugref:`357`) 604- Made the is_fixed builtin work for more types. (:bugref:`356`) 605- Enable rewriting of sum(i in x)(i=c) op d and count(x,y) op z into 606 global counting constraints. 607- Split up count global constraints into separate files for reified 608 versions. 609- Use contiguous range for array index set in set_lt for nosets.mzn. 610- Negate results of conditionals if required. (:bugref:`355`) 611- Partiality of conditional needs to be translated in root context 612 (even if conditional itself is negated). (:bugref:`355`) 613- Don't copy function into output again if it was already copied (and 614 made par) before. (:bugref:`323`) 615- Define card function on var sets in terms of set_card FlatZinc 616 builtin. 617- Don't set bounds for set variables in internal Gecode presolver. 618- IDE: Fix shift left and shift right indentation behaviour when 619 selecting text backwards. 620- IDE: Fix OpenSSL library in binary distribution to enable update 621 checks and submission to MOOCs again. 622 623.. _v2.4.0: 624 625`Version 2.4.0 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.4.0>`__ 626~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 627 628(released 13 December 2019) 629 630.. _changes-4: 631 632Changes: 633^^^^^^^^ 634 635- The compiler now detects counting constraints in expressions such as 636 count(i in x)(i=3) <= 4 and rewrites them into global counting 637 constraints. This is now the preferred way to specify counting. The 638 atmost/atleast/exactly constraints on integer variables have been 639 deprecated, and versions of count predicates with par variables have 640 been added. FlatZinc solvers that supported atmost/atleast/exactly 641 should now support the corresponding fzn_count_?_par predicates. 642- The compiler now supports the command line option 643 --output-detailed-timing, which provides timing information for each 644 toplevel constraint item, or for each line of code when used in 645 conjunction with the --keep-paths option. 646- The library now contains annotations for deprecated library 647 functions. 648- A par version of the inverse function has been added (include 649 inverse_fn.mzn to use it). 650- The common case of sums of optional variables is now handled more 651 efficiently. This case often arises from generator expressions with 652 variable where clauses. 653- Added set_to_ranges built-ins to enable efficient iteration over 654 sets. These are used to implement set_in for float variables, which 655 was missing before. 656- The Gurobi and CPLEX backends now support the --random-seed command 657 line option. 658- The Gurobi and CPLEX backends now use nodefile for search trees 659 exceeding 500 MB (--nodefilestart can change this value and 660 --nodefiledir the folder.) 661- The MIPDomains optimisations have been switched back on by default. 662 The optimisations have also been strengthened for some special cases. 663- Without the MIPdomains postprocessing, linearisation of variable 664 domains with holes now uses set_in instead of individual not-equal 665 constraints, which may result in more compact FlatZinc. 666- Linearisation of multiplication can now consider the exact domain of 667 a factor. 668- The product functions have been made non-recursive in order to 669 support longer arrays. 670- Bounds inference for results of if-then-else expressions has been 671 improved. 672- Support for optional float variables has been added. 673- The interfaces to CBC, CPLEX and Gurobi now report correctly that 674 they support verbose output during solving (so that the "verbose 675 solving" option is available from the MiniZinc IDE). 676- IDE: Parse timing and statistics output produced by compiler, and 677 display as profiling information next to each line in the model. 678- IDE: Enable run/compile action on data files. This automatically 679 selects the model file if there is only one, or presents a dialog for 680 selecting the model if there are multiple. 681- IDE: Select first data file in parameter dialog if there was no 682 previous selection, and always focus parameter dialog. 683- IDE: Highlight current line. 684- IDE: Support .json as file extension for data files. 685- IDE: Remember whether wrap around, case sensitivity and regular 686 expression was selected in find/replace dialog, pre-select the 687 find/replace text when find/replace widget is openend, and close 688 find/replace widget when ESC is pressed while editor has focus. 689 690.. _bug-fixes-5: 691 692Bug fixes: 693^^^^^^^^^^ 694 695- Fixed output handling on Windows (output is now processed on the main 696 thread, so that exceptions thrown during output are printed 697 correctly, and memory management is thread safe). 698- Fixed decomposition of reified mdd constraint, and strengthened 699 decompositions of mdd and cost_mdd. 700- Fix handling of variable re-definitions (e.g. converting sets to 701 arrays of bools), which would previously sometimes result in 702 variables being removed although they were required for output, or 703 the reverse mapping function not being available in the output model. 704- Include regular.mzn from regular_regexp.mzn. (:bugref:`351`) 705- Inlining of function calls has been moved from the flattener into the 706 type checker, and it now is more strict about which functions can be 707 inlined in order to avoid overloading issues. 708- Updated fzn_count_{neq,leq,lt,geq,gt}, 709 fzn_global_cardinality_low_up{,_reif} to use use the count_eq 710 predicate. (:bugref:`334`, :bugref:`335`) 711- Fixed the documentation for several constraints, which did not 712 display as bullet point lists as intended. 713- Copy function/predicate declarations into FlatZinc without 714 annotations, since most FlatZinc parsers would not expect annotations 715 and fail to parse. 716- Process right hand side of par VarDecls to make sure any identifiers 717 it uses are copied into the output model. Fixes :bugref:`336`. 718- Fix type checking for conditionals where the else branch has enum 719 type but the then branch has int type. 720- Make the deopt function return correct enum instead of int type. 721- Fix for path handling when 'needRangeDomains' is active. Avoids 722 infinite recursion in the compiler. 723- Fix race condition in temporary file generator for Windows. (:bugref:`349`) 724- Register fzn\_ names for Gecode presolver. Fixes command line flags 725 -O3 and above. 726- Fix par evaluation of float and bool set comprehensions. 727- Fix documentation of array_bool_xor. Fixes :docbugref:`13`. 728- Fix the round() built-in to correctly round negative numbers 729- Fix computation of intersection of domains when assigning an array to 730 an array variable. Fixes :bugref:`310`. 731- Add defines_var annotations for functional global constraints. Fixes 732 :bugref:`345`. 733- Add set_lt_reif/set_le_reif to flatzinc builtins library. Fixes :bugref:`338`. 734- Clarify set order based on spec. Fixes :bugref:`339`. 735- Don't return already removed VarDecl objects from CSE. Fixes :bugref:`346`. 736- Do not post y!=0 constraint if 0 is not in the domain (workaround for 737 a limitation in the handling of basic float constraints). Fixes :bugref:`344`. 738- Help type checker by making deopt/occurs argument types explicit. 739 Fixes :bugref:`331`. 740- Fix transfer of domains when aliasing one variable to another 741- MIP: fix for aux_float_ne_if_1 742- MIP: int_(eq/ne)_imp: don't force eq_encode without MIPdomains 743- Fix a typo in the definition of fzn_at_least_int{,_reif} 744- Fix dependency problem in the gecode_presolver table specification 745- Add seq_precede_chain.mzn to globals.mzn. Fixes :bugref:`332`. 746- Don't assign right hand side of set variables if domain is singleton. 747 Fixes :bugref:`330`. 748- Don't invalidate float bound just because an expression contains an 749 integer. 750- Fix copying of let expressions. 751- Put lexer and parser helper functions into MiniZinc namespace to 752 avoid linker issues. Fixes :bugref:`325`. 753- Reset array index sets defined in lets inside recursive function 754 calls. 755- Arrays copied into output model need to have par type-inst. Fixes :bugref:`322`. 756- Don't complain when same function is registered twice. Fixes :bugref:`323`. 757- Fix partiality handling of if-then-else expressions. 758- Track whether variable is used in an output array before making 759 decision to compress implication chains. Fixes :bugref:`318`. 760- IDE: Fix dark mode detection on macOS 10.15, improve dark mode colors 761 a bit and fixed some dark mode bugs. 762- IDE: Make background compilation of a model (used to display syntax 763 and type errors) a bit more stable. 764- IDE: Avoid infinite loop in wrap around replace all. 765- IDE: Fix memory management for HTML visualisation windows, and resize 766 docked HTML visualisation widgets to take up equal space. 767 768.. _v2.3.2: 769 770`Version 2.3.2 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.3.2>`__ 771~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 772 773(released 12 September 2019) 774 775.. _changes-5: 776 777Changes: 778^^^^^^^^ 779 780- Add warm starts and subtour cuts to CBC interface. 781- Add documentation and assertion requiring that mdds are 782 deterministic, and add nondeterministic variant of mdd constraint. 783- Add -s to the standard flags supported by MIP interfaces. 784- Add flag --output-output-item to include user specified output item 785 in the formatted JSON and DZN output. 786 787.. _bug-fixes-6: 788 789Bug fixes: 790^^^^^^^^^^ 791 792- Fix a bug that could leave unused variables in the resulting 793 FlatZinc. 794- bounded_dpath should rewrite to fzn_bounded_dpath. Fixes :bugref:`300`. 795- Fix definition of sum_set. 796- Check if overloaded function required for output. Fixes :bugref:`303`. 797- Move regular constraint with set argument to its own file. 798- Flatten assignment generators if necessary. 799- Simplify fzn_value_precede_chain_int and avoid use of element 800 predicate. Fixes :bugref:`307`. 801- Only initialise par opt variables as absent if they are not arrays. 802- Fix the description of the neural_net predicate. 803- Fix regular constraint with regular expressions (stopped working in 804 2.3.0). 805- Fix the model interface output to include the same variables as the 806 generated output statement. 807- Fix CSE for removed variable declarations. Could lead to reified 808 constraints not being compiled correctly when the control variable 809 got fixed to true. 810 811.. _v2.3.1: 812 813`Version 2.3.1 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.3.1>`__ 814~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 815 816(released 10 July 2019) 817 818.. _bug-fixes-7: 819 820Bug fixes: 821^^^^^^^^^^ 822 823- Report error when trying to assign an array literal to an array 824 variable with incompatible index set. 825- Fix partial evaluation of expressions, so that only par expressions 826 are fully evaluated. Fixes :bugref:`298`. 827- Remove carriage returns when reading piped solver output on Windows. 828- Canonicalize paths of executables to avoid spurious warnings about 829 multiple executables for the same solver. 830- Add implementations for != on arrays. 831- Compute quotient bounds before decomposition of int_div in 832 linearisation library. 833- Propagate domain constraints on variables that are aliased 834 (previously domain constraints could get lost). 835- Propagate domain constraints from left-hand-side to right-hand-side 836 in variable assignments. 837- piecewise-linear: reuse decomposition for X when only Y-values 838 change. 839- nosets: add set_in_imp(var set) and simplify set_in_reif, set_eq(var 840 set, var set). 841- linearisation: improved compilation of set_in constraints. 842- MiniZinc IDE: Remove incorrect symbolic link and fix qt.conf for some 843 bundled distributions. 844- MiniZinc IDE: Fix check for availability of dark mode on older 845 versions of macOS. 846- MiniZinc IDE: Fix a typo in the cheat sheet. 847- MiniZinc IDE: Provide more robust solution for checking the model 848 parameters, which will get rid of some "internal error" messages. 849- MiniZinc IDE: Always show directory selection dialog in the Windows 850 installer. Addresses :idebugref:`89`. 851- MiniZinc IDE: Improved the configuration files for some bundled 852 solvers, provides nicer configuration interface. 853 854.. _v2.3.0: 855 856`Version 2.3.0 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.3.0>`__ 857~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 858 859(released 26 June 2019) 860 861Major changes: 862^^^^^^^^^^^^^^ 863 864- The compiler can now generate FlatZinc with half reified constraints. 865 See 866 https://www.minizinc.org/doc-2.3.0/en/fzn-spec.html#reified-and-half-reified-predicates 867 for more details. 868- The standard library of global constraints has been reorganised, 869 making it easier for solvers to override just the bits that they 870 support. See 871 https://www.minizinc.org/doc-2.3.0/en/fzn-spec.html#solver-specific-libraries 872 for more details. 873- There is experimental support for solvers that can read AMPL NL 874 files. See 875 https://www.minizinc.org/doc-2.3.0/en/solvers.html#non-linear-solvers 876 for details. 877 878.. _minor-changes-1: 879 880Minor changes: 881^^^^^^^^^^^^^^ 882 883- The JSON input and output has been improved, with full support for 884 enums and optional types. 885- A new compiler option -g has been added, which turns variable domain 886 changes into constraints (useful for debugging models). 887- The SCIP interface has been updated, with support for indicator 888 constraints, bounds disjunctions and a native cumulative constraint. 889- Error reporting has been improved, with location information 890 available for errors in par float expressions as well as include 891 items. 892- The timeout command line parameter now also applies to compilation 893 itself (:bugref:`281`). 894- Operations on par float values are now checked for overflows. 895- The arg_min/arg_max constraints have been improved, with new special 896 versions for Boolean variables, and a better standard decomposition. 897- if-then-else-endif expressions with variable conditions are now 898 compiled to a predicate call (rather than handled by the compiler), 899 which enables solver libraries to implement these as native 900 constraints or special decompositions. 901- Dividing a variable by a constant is now translated as a 902 multiplication (to keep the constraints linear). 903- A new piecewise_linear predicate has been added to the library to 904 make it easier to specify piecewise linear constraints. 905- Print number of solutions as mzn-stat after solving (:bugref:`244`). 906- Make search annotations work for arbitrary array index sets. 907- MiniZinc IDE: The IDE will now check MiniZinc code for syntax and 908 type errors, and the editor performs simple code completion for 909 MiniZinc keywords 910- MiniZinc IDE: The find/replace dialog is now an inline widget and 911 supports incremental search. 912- MiniZinc IDE: Now supports dark mode on macOS. 913- MiniZinc IDE: Add support for extra solver flags (parsed from solver 914 configuration). 915 916.. _bug-fixes-8: 917 918Bug fixes: 919^^^^^^^^^^ 920 921- Translate let expressions that contain constraints or variables as 922 var type-inst. Fixes :bugref:`263`. 923- Fix JSON array parsing by counting elements instead of commas. 924- Fix parsing of the -p flag (:bugref:`271`). 925- Fix type checking for array declarations with single enum type inst 926 identifier. E.g. array[$$T] of $U previously matched any 927 multi-dimensional array, and now only matches one-dimensional arrays 928 with any enum index set. 929- Fix computation of function return type when using type inst 930 variables (:bugref:`272`). 931- Evaluate each variable declaration only once in a par let expression. 932- Check domain constraints on variable declarations in par let 933 expressions. 934- Try .exe/.bat on windows when using (constructed) absolute paths. 935- Fix array slicing to support empty slices (:bugref:`275`). 936- Fix a bug in the parser that could cause crashes on certain syntax 937 errors. 938- Fix the type of bool2int for arrays. 939- Initialise counter for introduced variable ids based on names in 940 original model. This avoids reusing variable names if the user model 941 contains names such as X_INTRODUCED_0_. 942- Fix compilation of nested clause/exist constraints, and improve 943 handling of negation. Tries to use primitive negation instead of 944 creating negated constraints. Should help with half-reification by 945 creating more positive contexts. 946- Reorder fields in basic data structures to reduce padding on 64 bit 947 platforms (improved memory footprint). 948- Perform type coercion after desugaring array slicing. 949- Translate arguments to bool2int, exists, forall in positive context 950 even if those functions are redefined. 951- Don't evaluate par array literals twice (inefficient, and can lead to 952 incorrect results when using random number generators). 953- Terminate child processes when minizinc process is terminated by 954 signal. 955- Fix function return value array index check for empty arrays (:bugref:`286`). 956- Fix translation of constant false where clause in array 957 comprehension. 958- Report error when json multi-dimensional array is not rectangular. 959- Check index sets of function arguments (:bugref:`273`). 960- Ignore partiality variables from CSE table when compiling \_reif and 961 \_imp predicates (:bugref:`269`). 962- Flatten comprehensions with variable generators or where conditions 963 before evaluating any par functions on them (:bugref:`259`). 964- Add missing redefinitions of basic operators and search annotations 965 for optional integers. 966- Resolve filenames given on the command line relative to working 967 directory, and warn if file in working directory has same name as 968 included file from the library. Fixes :bugref:`276`. 969- Update nosets library with a valid redefinition of set_less over 970 booleans. 971- Fix translation of showJSON (:bugref:`294`). 972- Only apply set2array coercion for supported types, otherwise report 973 error (:bugref:`295`). 974- Improve special case reasoning for abs on strictly negative 975 variables. 976- Add bounds for floating point min/max result in the standard library. 977- MiniZinc IDE: Ensure cursor is visible (editor scrolls to cursor 978 position) when pressing tab or enter. Fixes :idebugref:`71` :idebugref:`71`. 979- MiniZinc IDE: Re-dock configuration editor when closing un-docked 980 window. 981- MiniZinc IDE: Handle quotes when parsing additional solver command 982 line arguments. Fixes :idebugref:`77`. 983- MiniZinc IDE: Add workaround for the missing libnss requirements. 984 Fixes :idebugref:`79`. 985- MiniZinc IDE: Allow spaces in $DIR in MiniZincIDE.sh Fixes :idebugref:`81`. 986 987.. _v2.2.3: 988 989`Version 2.2.3 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.2.3>`__ 990~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 991 992(released 31 October 2018) 993 994.. _bug-fixes-9: 995 996Bug fixes: 997^^^^^^^^^^ 998 999- Fix some typos in the library documentation. 1000- Fix solution checking. 1001- Fix line numbers in parsed locations on 64 bit platforms. 1002- Fix bounds computation for calls. 1003- Fix translation of var where clauses with more than 3 par components. 1004- IDE: Only run solution checker if it is enabled in the solver 1005 configuration dialog. 1006 1007.. _v2.2.2: 1008 1009`Version 2.2.2 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.2.2>`__ 1010~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1011 1012(released 26 October 2018) 1013 1014.. _changes-6: 1015 1016Changes: 1017^^^^^^^^ 1018 1019- Some changes to the optimisation phase of the compiler, to take into 1020 account more variables and constraints. 1021- Preliminary support for MIP cuts based on graph algorithms (only 1022 available when compiled with boost C++ libraries; not part of the 1023 binary distribution). 1024- Set Release as default build type when nothing is specified (for 1025 CMake platforms that do not support multiple build types, like 1026 Makefiles). 1027- Add builtins outputJSON() and outputJSONParameters() for creating an 1028 array of strings that capture the output and parameters of the model 1029 as JSON. 1030- On Linux and macOS, add /usr/share/minizinc/solvers and 1031 /usr/local/share/minizinc/solvers to list of paths where solver 1032 configuration files can be placed. 1033- Add OSICBC_INCLUDEDIR and OSICBC_LIBDIR cmake flags. 1034- Output search paths for solver configurations using --solvers command 1035 line option. 1036- Add support for Gurobi 8.1 1037- Support parsing from stdin and files at the same time. 1038- IDE: Add line/column display in status bar. 1039- IDE: Optional parameters don't have to be defined in input dialog. 1040- IDE: Provide mzn-json-init / mzn-json-init-end handlers to initialise 1041 HTML window before first solution is produced. 1042- IDE: Add version information and minimum system version into 1043 Info.plist on macOS. 1044- IDE: Manage multiple open visualisation windows, and implement 1045 re-solve function that can be initiated from a visualisation. 1046- Binary bundle: Gecode updated to version 6.1.0, Chuffed updated to 1047 version 0.10.3 1048 1049.. _bug-fixes-10: 1050 1051Bug fixes: 1052^^^^^^^^^^ 1053 1054- Fix crash when flattening top-level array comprehensions with var 1055 where clauses. 1056- Support input files with more than 1M lines. 1057- Special case handling for array literals in top-level foralls: 1058 flatten in root context. 1059- Fix translation of if-then-else for branches with undefined right 1060 hand sides. 1061- Only propagate defines_var annotation to the variable that's actually 1062 being defined (not others that arise from the same decomposition). 1063- Don't flatten arguments of predicates like 1064 symmetry_breaking_constraint. 1065- Remove output_var and output_array annotations from user models 1066 (these could cause crashes). 1067- Fix precedences for weak operators (~+, ~-, ~=, ~*). 1068- Fix min and max for opt var arrays to work when the bounds of the 1069 arrays are unknown. 1070- Fix a bug in bounds computations for function calls. 1071- Add missing superset FlatZinc builtin. 1072- Fix includes in file values.hh for some platforms. 1073- Fix a garbage collection issue when printing solutions. 1074- Deal with the case that a variable that's required for output is 1075 assigned to a par variable. 1076- Throw type error when an array has only absent values. 1077- Flatten all arrays in FlatZinc, also those coming from functional 1078 definitions. 1079- Use list of strings as mzn_solver_path entry in the preferences json 1080 file. 1081- Fix crash when output variable is defined using recursive function 1082- IDE: Fix race condition in constructor of HTMLWindow. 1083 1084.. _v2.2.1: 1085 1086`Version 2.2.1 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.2.1>`__ 1087~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1088 1089(released 6 September 2018) 1090 1091.. _changes-7: 1092 1093Changes: 1094^^^^^^^^ 1095 1096- all_different, all_equal, {int,set,float,bool}_search now accept 1097 multi-dimensional arrays. 1098- Add exponentiation operator (^). 1099- Improve layout of generated library documentation for some 1100 constraints. 1101- Relax typechecking to allow assignment of empty array ([]) to 1102 multi-dimensional array variables. This is required to make empty 1103 arrays work in JSON data files. 1104- Enumerated types can now be initialised using lists of strings. This 1105 enables enumerated type support in JSON. 1106 1107.. _bug-fixes-11: 1108 1109Bug fixes: 1110^^^^^^^^^^ 1111 1112- Cumulative constraint for linear solvers now accepts empty arrays. 1113- show2d/show3d functions now do not add quotes around array elements 1114 and work for empty arrays. 1115- Add support for slicing of arrays with enumerated types. 1116- Fix slicing of 1d arrays. 1117- Fix bounds computation for float variable declarations. 1118- When FlatZinc solver is terminated due to a timeout, do not report 1119 this as an error. 1120- Fix pretty-printing of multi-dimensional arrays where dimensions 1121 other than the first one are empty. 1122- Add support for where clauses on generator assignment expressions. 1123- MiniZinc IDE: Improve dark mode by changing line numbers to dark 1124 background. 1125- MiniZinc IDE: Make parameter input dialog scrollable. 1126- MiniZinc IDE: Fix solution compression limit, and output one solution 1127 per block of compressed solutions. 1128 1129.. _v2.2.0: 1130 1131`Version 2.2.0 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.2.0>`__ 1132~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1133 1134(released 24 August 2018) 1135 1136This is a major release of MiniZinc, introducing many new features and 1137improvements. 1138 1139Major new features: 1140^^^^^^^^^^^^^^^^^^^ 1141 1142- **New minizinc command line tool** 1143 Previous releases contained a ``minizinc`` command line tool that was 1144 not much more than a simple script that could execute the compiler, 1145 solver and output processor. The ``minizinc`` executable in version 1146 2.2.0 is now the main frontend to compilation and solving and 1147 integrates all of the functionality. It has access to all installed 1148 MiniZinc solvers (both internal solvers and those interfaced through 1149 FlatZinc files), and can automatically select the required options 1150 (e.g., to include the solver-specific MiniZinc globals library). 1151 You can get a list of available solvers using the ``--solvers`` 1152 command line option, and select a solver using ``--solver``. The 1153 ``minizinc`` executable can now also be used as a replacement for 1154 ``mzn2fzn`` (using ``-c``) and ``solns2out`` (using ``--ozn-file``). 1155- **Multi-pass compilation** 1156 The compiler can now perform multiple passes in order to improve the 1157 target FlatZinc code. This can be controlled using the ``-O`` command 1158 line flags (``-O0`` to ``-O4``). Multi-pass compilation is 1159 particularly useful when the target solver requires sophisticated 1160 decomposition of global constraints (such as for MIP solvers). 1161- **Solution checking** 1162 You can now supply an additional model that will be used to check 1163 each solution produced by your main model. This can be useful for 1164 teaching MiniZinc (to give students automatic feedback) and if your 1165 main model is very complex but checking that a solution is correct is 1166 easy. 1167- **MIP solvers:** support for FICO Xpress, and loading IBM ILOG CPLEX 1168 as a plugin 1169 We have added support for FICO Xpress (this requires compiling 1170 MiniZinc from sources). CPLEX can now be loaded as a plugin, which 1171 means that the binary distribution of MiniZinc has built-in CPLEX 1172 support (just bring your own CPLEX dll). 1173- **Language extensions** 1174 The MiniZinc language has been extended with two new features. 1175 1176 - Array slicing introduces syntax to conveniently select rows, 1177 columns or entire slices of arrays. For example, ``x[3,..]`` 1178 selects the third row of array ``x``, while ``x[..,4]`` selects 1179 the fourth column, and ``x[3..5,2..7]`` selects a slice of rows 3 1180 to 5 and columns 2 to 7. 1181 - Generator expressions can now contain multiple where clauses, e.g. 1182 ``forall (i in S where foo(i), j in T where i < j) (bar(i,j))`` 1183 This enables more efficient compilation compared to evaluating all 1184 where clauses in the inner-most generator. In addition to 1185 iteration (``i in S``), generators can now contain assignment 1186 expressions (``j=foo(i)``). This enables intermediate definitions 1187 that can then be used in further generators. 1188 1189Changes and minor features: 1190^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1191 1192- The value of the objective can now be added automatically to the 1193 output using the ``--output-objective`` command line option. Using 1194 ``--output-mode dzn``, this allows automatic output of all the free 1195 variables of the model. 1196- Models that do not contain a solve item are now accepted and treated 1197 as ``solve satisfy`` 1198- Support for naming constraints and expressions (using ``::"name"`` 1199 syntax) 1200- Error messages have been improved, they now contain more accurate 1201 location information. 1202- The compiler can be instructed to accept multiple assignments to the 1203 same parameter (as long as they are all identical), using the 1204 ``--allow-multiple-assignments`` command line option. 1205- Annotations for supplying warm start values have been added to the 1206 standard library (currently supported by the MIP solvers Gurobi and 1207 IBM ILOG CPLEX). 1208- The compiler now accepts multiple .mzn files as input. 1209- Memory consumption and garbage collection performance has been 1210 improved. 1211- The conditional expression has been extended to support 1212 ``if <cond> then <exp> endif`` (where ``<exp>`` is bool) 1213- Decomposition of one variable type to another (e.g. set into array of 1214 bool) has been improved. 1215- MIP solvers Gurobi and IBM ILOG CPLEX use node files when over 3GB 1216 working memory 1217- Gurobi and CPLEX support the MIPfocus parameter 1218- Gurobi supports MiniZinc search annotations by setting fixed 1219 branching priorities 1220 1221.. _bug-fixes-12: 1222 1223Bug fixes: 1224^^^^^^^^^^ 1225 1226Consult the bug tracker at 1227https://github.com/MiniZinc/libminizinc/issues 1228 1229.. _v2.1.7: 1230 1231`Version 2.1.7 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.7>`__ 1232~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1233 1234(released 10 January 2018) 1235 1236.. _changes-8: 1237 1238Changes: 1239^^^^^^^^ 1240 1241- Improved linearisation for some element constraints. 1242- Improve performance of optimisation phase by using a queue instead of 1243 a stack. 1244- Add --dll option for Gurobi backend to specify the Gurobi DLL to 1245 load. 1246- Add more defines_var annotations. 1247 1248.. _bug-fixes-13: 1249 1250Bug fixes: 1251^^^^^^^^^^ 1252 1253- Fix generation of variable names in output model (sometimes could 1254 contain duplicates). 1255- Fix enum type inference for array literals with empty sets as their 1256 first arguments. Fixes :bugref:`180`. 1257- Fix incorrect simplification of float domain constraints. Fixes :bugref:`159`. 1258- Fix ceil builtin for float values. 1259- Add superset decomposition for solvers that do not support set 1260 variables. 1261- Fix three bugs in the garbage collector. 1262- Fix a bug in flattening that would create duplicate variables when a 1263 variable declaration referred to another one in its type-inst. 1264- Fix a crash in flattening of partial functions. Fixes :bugref:`187`. 1265- Add missing deopt builtins for all par types. 1266- Fix output for arrays of sets of enums. 1267- Define more functions on par opt types. Fixes :bugref:`188`. 1268- Fix type checker to accept arrays of opt set values. 1269- Support printing of opt enum types. Fixes :bugref:`189`. 1270- Fix evaluation of comprehensions in recursive functions. 1271- Fix output of Gurobi backend when used in conjunction with solns2out. 1272- Fix pthread linking for mzn-cbc. 1273- Catch type error when set literal is declared that contains another 1274 set. 1275 1276IDE changes and bug fixes: 1277^^^^^^^^^^^^^^^^^^^^^^^^^^ 1278 1279- Fix problem where files with a . in the filename could not be run. 1280- Fix font settings (were not saved reliably on some platforms). 1281- Enable generic interface for submitting assignments (not just to 1282 Coursera). 1283- Fix output handling for solvers that do not run mzn2fzn. 1284- Fix hidden solution display when there are exactly as many solutions 1285 as the configured threshold for hiding solutions. 1286- Add configuration option to print timing information for each 1287 solution. 1288 1289.. _v2.1.6: 1290 1291`Version 2.1.6 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.6>`__ 1292~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1293 1294(released 22 September 2017) 1295 1296.. _bug-fixes-14: 1297 1298Bug fixes: 1299^^^^^^^^^^ 1300 1301- Fully evaluate parameters before binding formal arguments when 1302 evaluating call expressions. Fixes :bugref:`177`. 1303- Fix incorrect simplification of Boolean constraints assigned to 1304 variables that are assigned to false. 1305- Fix bug in flattening of linear equations that contain the same 1306 variable on both sides. 1307- Fix un-trailing for let expressions, which could sometimes cause 1308 incorrect code to be emitted when lets are evaluated in nested loops. 1309 Fixes :bugref:`166`. 1310- Fix bug in JSON output of one-dimensional array literals. 1311- Fix unification of enum type-inst variables. 1312 1313.. _v2.1.5: 1314 1315`Version 2.1.5 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.5>`__ 1316~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1317 1318(released 17 May 2017) 1319 1320.. _changes-9: 1321 1322Changes: 1323^^^^^^^^ 1324 1325- Some improvements to the linearisation library. 1326- Make parser read multiple .mzn files correctly. 1327- Enable better bounds computation for array access expressions on 1328 fixed arrays. 1329- Perform better constant folding during optimisation phase. Fixes :bugref:`155`. 1330- Don't rewrite pow function into multiplication in the case of power 1331 of 2. 1332- Save some memory by making certain internal data structures more 1333 compact. 1334- Improve source code location of identifiers in generator calls 1335 (should give more precise error messages). 1336- Produce an error message when a comprehension attempts to iterate 1337 over an infinite set. 1338- Produce better error messages for operations on infinite values 1339 (previously some errors did not contain a source code location). 1340- Speed up garbage collection by pre-allocating some memory. 1341 1342.. _bug-fixes-15: 1343 1344Bug fixes: 1345^^^^^^^^^^ 1346 1347- Fix range check for float literals in arrays. 1348- Fix a bug where a constraint could be removed incorrectly. Fixes :bugref:`150`. 1349- Include variables for dzn and json output from all included models, 1350 not just the main model. Fixes :bugref:`153`. 1351- Produce multi-dimensional arrays in json output. Fixes :bugref:`156` and :bugref:`157`. 1352- Remove incorrect closing bracket from json output. Fixes :bugref:`154`. 1353- Fix bounds computation of par int and float arrays. 1354- Don't allow var access to arrays of strings or annotations (since 1355 that would require an element constraint and var string / var ann 1356 types). 1357- Introduce int2float constraints where necessary for some 1358 linearisations. 1359 1360.. _v2.1.4: 1361 1362`Version 2.1.4 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.4>`__ 1363~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1364 1365(released 13 March 2017) 1366 1367.. _changes-10: 1368 1369Changes: 1370^^^^^^^^ 1371 1372- Add warning for MIP solvers that do not support -a option for 1373 satisfaction problems. 1374- Print introduced variable names with additional underscore to make 1375 debugging FlatZinc easier. Fixes :bugref:`147`. 1376- Add support for pow function in linearisation library. 1377- Add support for parallel solving with CBC. 1378- Flatten top-level conjunctions in the order defined in the model. 1379 1380.. _bug-fixes-16: 1381 1382Bug fixes: 1383^^^^^^^^^^ 1384 1385- Fix major race condition that would crash the IDE when it didn't 1386 detect that a solver process had finished. 1387- Improve HTML output in the IDE by making sure every line is 1388 terminated by a newline. 1389- Fix a garbage collection bug that could cause dangling pointers when 1390 expressions were copied. 1391- Fix type checker to allow empty arrays to be assigned to variables 1392 declared as arrays of enums. 1393- Fix infeasibility check in MIP translation for some inequality 1394 constraints. 1395- Improved defines_var annotations for reified xor constraints. Fixes 1396 :bugref:`146`. 1397- Fix output of empty integer sets and deal with empty arrays in output 1398 models. 1399- Fix MIP translation when boolean variables were removed due to 1400 aliasing. 1401- Improve corner cases for linearisation of cumulative constraint. 1402- Properly report undefinedness in par bool expressions. 1403- Enable some additional constant folding during flattening. Fixes :bugref:`149`. 1404 1405.. _v2.1.3: 1406 1407`Version 2.1.3 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.3>`__ 1408~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1409 1410(released 6 February 2017) 1411 1412.. _changes-11: 1413 1414Changes: 1415^^^^^^^^ 1416 1417- Remove more internal annotations from the generated FlatZinc. 1418- Detect failure earlier if optimisation pass leads to fixing of 1419 variables outside their domains. 1420 1421.. _bug-fixes-17: 1422 1423Bug fixes: 1424^^^^^^^^^^ 1425 1426- Fix CBC backend to correctly print UNSAT message for models where the 1427 compiler already detected unsatisfiability, and print solution 1428 separators even where there is no other output. 1429- Add missing var_dom function for arrays of optional integer 1430 variables. Fixes :bugref:`133`. 1431- Fix aliasing for optional integer variables. Fixes :bugref:`132`. 1432- Remove all annotations from output model. 1433- Fix computation of return type for functions that return arrays of 1434 enums. 1435- Don't output newline if user-defined solution separator or status 1436 message is empty 1437- Fix return type computation for functions where return type contains 1438 enums. 1439- Check finiteness of float literals and bounds. Fixes :bugref:`138`. 1440- More checks for function return values. Fixes :bugref:`136`. 1441- Fix var int comprehensions (now triggers error message instead of 1442 crash for var set of int comprehensions). Fixes :bugref:`135`. 1443- Fix output of variables with quoted identifiers. 1444- Fix flattening of let expressions that contain variables with 1445 undefined (i.e., partial) right hand side. 1446- Make printing of error messages to stdout or stderr more consistent 1447 across executables. 1448- Fix type checking of initialisation of enum types. 1449- Improve error messages for array access and index set errors. Fixes 1450 :bugref:`131`. 1451- Fix definition of multi-dimensional element constraints to impose 1452 correct bounds on index variables. 1453- Fix binding analysis during type checking, which did not handle the 1454 shadowing of top-level declarations by comprehension generators 1455 correctly. Fixes :bugref:`129`. 1456 1457.. _v2.1.2: 1458 1459`Version 2.1.2 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.2>`__ 1460~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1461 1462(released 20 December 2016) 1463 1464.. _bug-fixes-18: 1465 1466Bug fixes: 1467^^^^^^^^^^ 1468 1469- Fix a bug in the type checking for generators that iterate over 1470 arrays of enums. 1471- Fix a bug in the output handling of arrays of enums. 1472- Fix handling of multiple output items (only the last item was 1473 compiled, now the concatenation is used for output as defined in the 1474 specification). 1475 1476.. _v2.1.1: 1477 1478`Version 2.1.1 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.1>`__ 1479~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1480 1481(released 14 December 2016) 1482 1483.. _changes-12: 1484 1485Changes: 1486^^^^^^^^ 1487 1488- Add missing min/max functions for set variables. Can be redefined to 1489 solver builtins using the new redefinitions-2.1.1.mzn library file. 1490- Add support for option type expressions as objective functions. 1491- Automatically coerce arrays constructed using ++ to any enum index 1492 set (in addition to array literals and comprehensions). 1493 1494.. _bug-fixes-19: 1495 1496Bug fixes: 1497^^^^^^^^^^ 1498 1499- Include cmath header to fix compilation issues with some compilers. 1500 Fixes :bugref:`125`. 1501- Fix a garbage collection bug in the type checking for enumerated 1502 types that would sometimes lead to crashes or incorrect error 1503 messages. 1504- Fix type checking of comprehensions that involve enumerated types. 1505- Fix bounds computation for var sets of enumerated types. 1506- Support anon_enum function as documented. 1507 1508.. _v2.1.0: 1509 1510`Version 2.1.0 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.1.0>`__ 1511~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1512 1513(released 17 November 2016) 1514 1515.. _changes-13: 1516 1517Changes: 1518^^^^^^^^ 1519 1520- MiniZinc now supports enumerated types. 1521- Solvers can be interfaced directly to the MiniZinc library, and 1522 MiniZinc comes with direct support for the CBC, Gurobi and CPLEX MIP 1523 solvers. 1524- The linearisation library has been updated, resulting in much better 1525 FlatZinc being generated for MIP solvers. 1526- Data files can be in JSON format, and MiniZinc can produce JSON 1527 output (using the --output-mode command line option). 1528- Variables can be annotated as ::add_to_output instead of writing an 1529 output item. 1530- The compiler can output information about the parameters and output 1531 variables of a model (using the --model-interface-only option). 1532- Floats are handled better (detecting infinities and handling sets of 1533 floats). 1534- Bounds can be computed for more expressions (instead of failing with 1535 an error message). 1536 1537.. _bug-fixes-20: 1538 1539Bug fixes: 1540^^^^^^^^^^ 1541 1542- Fix a bug in optimization that could remove variables even if they 1543 are used. Fixes :bugref:`123`. 1544- Fix float variable declarations with sets of floats as domains. Fixes 1545 :bugref:`117` and :bugref:`98`. 1546- Fix type checking and evaluation of asserts with array arguments. 1547 Fixes :bugref:`109`. 1548- Fix abs(var float) declaration to work on floats without declared 1549 bounds. Fixes :bugref:`106`. 1550- Fix a bug in the computation of int and float bounds that could 1551 result in incorrect bounds in some cases. Fixes :bugref:`94`. 1552- Fix garbage collection when creating output models. Fixes :bugref:`77`. 1553- Fix binary operators on optional variables (in some cases comparison 1554 operators were reversed). 1555- Fix optimization of unconstrained variables (could sometimes lead to 1556 constraints being removed although they were not subsumed). 1557 1558.. _v2.0.14: 1559 1560`Version 2.0.14 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.14>`__ 1561~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1562 1563(released 31 July 2016) 1564 1565.. _changes-14: 1566 1567Changes: 1568^^^^^^^^ 1569 1570- Less aggressive aggregation of linear expressions in cases where it 1571 leads to much less efficient FlatZinc. 1572- Don't create temporary variable for an array literal if it is 1573 discarded immediately anyway. 1574- Only create new partiality variable for if-then-else expression if 1575 there's at least one var condition. 1576- Replace recursive definitions of array_intersect and array_union with 1577 iterative ones. 1578 1579.. _bug-fixes-21: 1580 1581Bug fixes: 1582^^^^^^^^^^ 1583 1584- Don't report warnings about partiality when using extended generator 1585 expressions. 1586- Include cmath to enable building with some versions of gcc. 1587- Constrain result of function call based on function return type if 1588 necessary. 1589- Make sure linear expressions generated during binding of variables 1590 are properly flattened (including simplification of the linear 1591 expression) 1592 1593.. _v2.0.13: 1594 1595`Version 2.0.13 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.13>`__ 1596~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1597 1598(released 26 March 2016) 1599 1600.. _bug-fixes-22: 1601 1602Bug fixes: 1603^^^^^^^^^^ 1604 1605- Fix a bug in the Common Subexpression Elimination table of the 1606 compiler, which could lead to some constraints being dropped 1607 (especially when using linear redefinitions). 1608- The output model sometimes did not include all required definitions, 1609 in particular when array declarations used identifiers to specify the 1610 dimensions. 1611- The generated FlatZinc sometimes still contained bool variables that 1612 were not connected to the rest of the model, which could produce 1613 incorrect solutions being printed. 1614- Fix a bug where warnings (e.g. about partial functions) could lead to 1615 crashes. 1616- Fix the bounds computation for integer and float variables, which 1617 could produce incorrect bounds for linear expressions. Fixes :bugref:`94`. 1618- Fix a bug in the IDE that caused solver output to be shown 1619 incompletely in some cases. 1620 1621.. _v2.0.12: 1622 1623`Version 2.0.12 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.12>`__ 1624~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1625 1626(released 25 February 2016) 1627 1628.. _changes-15: 1629 1630Changes: 1631^^^^^^^^ 1632 1633- Partial functions are now always evaluated in their Boolean context, 1634 independent of whether they are par or var. If the result of a 1635 partial function is statically known to be undefined (such as 1636 division by zero or array access out of bounds), and it is used in a 1637 constraint expression, this now results in a warning instead of an 1638 error. Warnings can be turned off using the ::maybe_partial 1639 annotation. Fixes :bugref:`43` and :bugref:`74`. 1640 1641.. _bug-fixes-23: 1642 1643Bug fixes: 1644^^^^^^^^^^ 1645 1646- Fix a bug in the optimisation phase related to unification of aliased 1647 variables. 1648- Fix short-circuit evaluation of Boolean expressions. 1649- Fix a bug in the optimisation phase related to repeated 1650 simplification of some Boolean expressions. 1651- Handle errors in output produced by solver without solns2out 1652 crashing. Fixes :bugref:`80`. 1653- Fix a bug in the integer bounds computation that caused bool2int with 1654 an embedded conditional to crash. 1655- Fix a problem with short-circuit compilation of == expressions when 1656 one side was a var opt bool. 1657- Stop compilation when model is failed. Fixes a bug where mzn2fzn 1658 would sometimes not clean up the FlatZinc enough for the solver. 1659 1660.. _v2.0.11: 1661 1662`Version 2.0.11 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.11>`__ 1663~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1664 1665(released 15 January 2016) 1666 1667.. _bug-fixes-24: 1668 1669Bug fixes: 1670^^^^^^^^^^ 1671 1672- Fix parsing of hex and octal literals. Fixes :bugref:`71`. 1673- Fix compilation of extended comprehensions. Fixes :bugref:`72`. 1674- Fix computation of float array access bounds. 1675- Fix aggregation of clauses (could sometimes ignore the negative 1676 literals). 1677 1678.. _v2.0.10: 1679 1680`Version 2.0.10 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.10>`__ 1681~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1682 1683(released 9 December 2015) 1684 1685.. _bug-fixes-25: 1686 1687Bug fixes: 1688^^^^^^^^^^ 1689 1690- Fix a bug in the optimiser that could lead to undefined variables in 1691 the generated FlatZinc. Fixes :bugref:`70`. 1692 1693.. _v2.0.9: 1694 1695`Version 2.0.9 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.9>`__ 1696~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1697 1698(released 6 December 2015) 1699 1700.. _bug-fixes-26: 1701 1702Bug fixes: 1703^^^^^^^^^^ 1704 1705- Need to take return type into account when copying functions to 1706 output model. Fixes :bugref:`55`. 1707- Evaluate calls that result in arrays using eval_arraylit. Fixes :bugref:`57`. 1708- Move inverse function to its own library file, so that it remains 1709 available when a solver provides an alternative for the inverse 1710 predicate. 1711- Optimisation phase now recursively checks constraints when elements 1712 in an array become fixed. 1713- Fix CMakeLists file to work for paths that contain spaces. 1714- Distinguish between infix operators and regular functions in the 1715 generated html documentation. Fixes :bugref:`61`. 1716- Made parser more robust against incorrect code. 1717- Fix increment/decrement operators for IntVals and make all operations 1718 throw correct overflow exceptions. 1719- Fix automatic type coercion for variables declared in let 1720 expressions. 1721- Fix a crash when printing some error messages. 1722- Fix compute_div_bounds builtin to return correct result for a 1723 division by zero. 1724- Fix optimisation of Boolean constraints to use pointer equality 1725 instead of structural equality (same expression can occur multiple 1726 times in the FlatZinc). 1727- Only optimise constraints that have not been removed yet. 1728- Fix declaration of functional version of bin_packing_load. Fixes :bugref:`64`. 1729- Set type of arrays returned from polymorphic functions. Fixes :bugref:`65`. 1730- Fix parsing of quoted unary operator calls. 1731- Only compute set functions when bounds are valid. Fixes :bugref:`66`. 1732- Compute proper bounds for if-then-else expressions. 1733- Report error when no reified version of a constraint is available. 1734 Fixes :bugref:`67`. 1735- Fix type checking of annotations on binary operators. 1736- Keep annotations when rewriting linear constraints and remove 1737 is_defined_var annotations from fixed variables. Fixes :bugref:`69`. 1738 1739.. _changes-16: 1740 1741Changes: 1742^^^^^^^^ 1743 1744Integer, Boolean and float literals are now cached to achieve better 1745memory performance for some models. 1746 1747Improve performance of parsing integer literals. 1748 1749Improve handling of clause constraints. 1750 1751Add source files of MiniZinc specification to the repository. 1752 1753Limit maximum array size to enable better error messages. 1754 1755Add implied_constraint predicate as a synonym for redundant_constraint. 1756 1757.. _v2.0.8: 1758 1759`Version 2.0.8 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.8>`__ 1760~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1761 1762(released 19 October 2015) 1763 1764.. _bug-fixes-27: 1765 1766Bug fixes: 1767^^^^^^^^^^ 1768 1769- Fix incorrect negation of some reified comparisons. 1770- Make lb/ub functions work in more cases. 1771- Fix several bugs in the optimisation phase (could lead to incorrect 1772 FlatZinc and crashes). 1773- Fix a problem with reverse mapper functions when the result of the 1774 reverse mapper can be fixed to a constant. 1775 1776.. _v2.0.7: 1777 1778`Version 2.0.7 <https://github.com/MiniZinc/MiniZincIDE/releases/tag/2.0.7>`__ 1779~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1780 1781(released 5 October 2015) 1782 1783.. _changes-17: 1784 1785Changes: 1786^^^^^^^^ 1787 1788- Improved propagation of Boolean constants in the optimisation phase. 1789 This should result in far fewer aliases and improves simplification 1790 of conjunctions, disjunctions and clauses. 1791- Add special case handling for integer division by 1. 1792 1793.. _bug-fixes-28: 1794 1795Bug fixes: 1796^^^^^^^^^^ 1797 1798- Fix FlatZinc generator phase, need to turn all array literal 1799 arguments into 1-based single dimensional arrays. 1800- Fix compilation of if-then-else expressions with var conditions 1801 (which didn't implement proper partiality/totality semantics). Fixes 1802 :bugref:`42`. 1803- Provide correct bounds for weak opt var arithmetic. Fixes :bugref:`51`. 1804- Need to be able to handle unflattened annotations. Fixes :bugref:`53`. 1805- Fix generation of output model (needs to ignore items that have been 1806 removed previously). 1807- Add missing lb(var set of int) builtin. Fixes :bugref:`47`. 1808- Check that var set declarations have a finite element type. Fixes :bugref:`46`. 1809- Fix translation context for binary operators on arrays. 1810- Need to access IntVal::infinity as a function, otherwise depending on 1811 linker etc it may become 0 in some cases. Fixes :bugref:`40`. 1812- Change pretty printer to use one less digit when printing float 1813 literals. This fixes :bugref:`41` (or at least 1814 provides a workaround), but some double constants may still be 1815 rounded incorrectly when pretty printing and reading them back in. 1816 The real fix will be to output hex float literals (coming soon). 1817- Distinguish between generalised comprehensions (iterating over sets) 1818 and iterating over arrays. Fixes compilation of comprehensions where 1819 iteration over an array is combined with var where clauses. Fixes :bugref:`45`. 1820- Fix bug in creation of output model where sometimes chains of 1821 variable definitions could lead to crashes. 1822- Avoi creating mutually recursive definitions in some corner cases, 1823 which could cause the compiler to run into infinite loops. 1824- Don't copy vardecl items to output model that are already there. 1825 Fixes :bugref:`44`. 1826- Remove domain from array declarations in FlatZinc (avoids problems 1827 with domains where holes need to be removed and when there are 1828 infinities in the domains) 1829- Fix flattening of equality operator between non-opt and opt vars. 1830- Check that model contains a single solve and output item during type 1831 checking (previously, multiple output items were not detected and 1832 resulted in incorrect .ozn files). 1833- Fix flattening of xor (arguments need to be in mixed context). 1834- Use is_fixed in cumulative definition. 1835- Fix bug where a par right hand side of a variable mentioned in the 1836 output would cause a crash. 1837- Fix variable dependency tracking during rewriting in the optimisation 1838 phase. Could previously lead to variables being removed that are 1839 still required. Fixes :bugref:`54`. 1840 1841.. _v2.0.6: 1842 1843Version 2.0.6 1844~~~~~~~~~~~~~ 1845 1846(released 2 August 2015) 1847 1848.. _changes-18: 1849 1850Changes: 1851^^^^^^^^ 1852 1853- Add parser support for hexadecimal floating point constants. 1854 1855.. _bug-fixes-29: 1856 1857Bug fixes: 1858^^^^^^^^^^ 1859 1860- Fix bounds computation for some calls (abs, int_times). 1861- Fix flattening of some array declarations (when right hand side is an 1862 identifier). 1863- Add four missing GC locks (could lead to incorrect garbage 1864 collection). 1865- Compact output model only after optimisation phase (could lead to 1866 incorrect items being removed from output model). 1867 1868.. _v2.0.5: 1869 1870Version 2.0.5 1871~~~~~~~~~~~~~ 1872 1873(released 31 July 2015) 1874 1875.. _changes-19: 1876 1877Changes: 1878^^^^^^^^ 1879 1880- Improve the standard decomposition for the cumulative constraint. 1881- Better handling of binary operators during type checking and 1882 flattening, can sometimes avoid stack overflows (e.g. for large 1883 conjunctions). 1884- Make ++ operator left associative (avoid stack overflows in the 1885 parser). 1886- Add ::domain annotations to linear constraints generated from 1887 multi-dimensional element constraints. 1888- Greatly improved linearisation library. 1889 1890.. _bug-fixes-30: 1891 1892Bug fixes: 1893^^^^^^^^^^ 1894 1895- Fix recursive function calls that contain let expressions. 1896- Fix compilation of comprehensions inside parametric functions. 1897- Fix a memory leak in solns2out. 1898- Fix a problem in the evaluation of binary operators. 1899- Fix a bug in the flattening of array literals. 1900- Fix a bug that would crash the parser on certain syntax errors in let 1901 expressions. 1902 1903.. _v2.0.4: 1904 1905Version 2.0.4 1906~~~~~~~~~~~~~ 1907 1908(released 1 July 2015) 1909 1910.. _changes-20: 1911 1912Changes: 1913^^^^^^^^ 1914 1915- Models can now be read from standard input (using the "-" or 1916 "--input-from-stdin" command line options). Thanks to Sebastian 1917 Kosch. 1918- Improved handling of bool2int during FlatZinc generation. 1919 1920.. _bug-fixes-31: 1921 1922Bug fixes: 1923^^^^^^^^^^ 1924 1925- Fix unification of aliased variables which could sometimes result in 1926 variables being removed although had a constraining right hand side. 1927- Fix evaluation of set comprehensions. 1928- Fix command line flag --no-output-ozn 1929- Fix performance problem when evaluating array expressions inside 1930 lets. 1931- Fix flattening of bool_xor redefinitions. 1932- Fix partial evaluation of some array access expressions with var 1933 indexes. 1934- Fix definition of geost constraint. 1935- User-defined functions are now copied correctly into the output model 1936 if they are referenced in the output item. 1937- Set comprehensions are fully evaluated. 1938 1939.. _v2.0.3: 1940 1941Version 2.0.3 1942~~~~~~~~~~~~~ 1943 1944(Internal release that did not contain some essential fixes) 1945 1946.. _v2.0.2: 1947 1948Version 2.0.2 1949~~~~~~~~~~~~~ 1950 1951(released 26 May 2015) 1952 1953.. _changes-21: 1954 1955Changes: 1956^^^^^^^^ 1957 1958- The optimiser now removes simple domain constraints from the FlatZinc 1959- The compiler now checks for integer overflows in all built-in 1960 operations 1961- Report an error when the FlatZinc or ozn file cannot be opened for 1962 writing 1963- Add support for 3d array literals (e.g. [\| \|1,2|3,4|,|5,6|7,8\| \|] 1964 ) 1965- Add show2d and show3d functions for formatting array output 1966- Add row/col functions for variable arrays (fixes :bugref:`2`) 1967- Introduce builtins for creating random distributions 1968- Add reverse library function 1969- Postpone flattening of some reified constraints 1970- Slightly improved compilation of partial function calls when it can 1971 be inferred at compile time that their result is undefined 1972- Allow functions with empty argument lists to be declared as function 1973 int: foo(); instead of just function int: foo; 1974- Improve error reporting, in particular for errors in comprehensions 1975- Enable expressions a..b where a and b are integer variables 1976- Add redundant_constraint and symmetry_breaking_constraint builtins, 1977 these can be rewritten by solver libraries to allow e.g. local search 1978 solvers to ignore redundant constraints. 1979- Improve flattening of predicates that simply return their arguments 1980 (makes the redundant_constraint and symmetry_breaking_constraint 1981 predicates work in more situations). 1982- Replace command line option --only-range-domains by optional boolean 1983 value so that solver libraries can set the flag directly in their 1984 redefinitions file. 1985- Stop flattening immediately when a model has been found to contain an 1986 inconsistency. 1987- Improve flattening of array access expressions, in particular for 1988 nested array accesses that can be combined into a single element 1989 constraint 1990- Add command line option -s or --statistics to print statistics about 1991 the generated FlatZinc 1992- Improve bounds computation for if-then-else expressions 1993- Clause arguments are compiled in positive and negative contexts 1994 instead of mixed. That means that predicates that introduce free 1995 variables can now be used in the positive part of a clause. 1996 1997.. _bug-fixes-32: 1998 1999Bug fixes: 2000^^^^^^^^^^ 2001 2002- Fix simplification of linear expressions, negative coefficients could 2003 sometimes result in incorrect bounds 2004- Fix bounds computation for unary minus operator 2005- Add missing par set comparison builtins 2006- Fix bounds computation for extended comprehension syntax 2007- Fix a bug in the garbage collector that could sometimes lead to 2008 premature deletion of expressions 2009- Fix bounds computation for set difference 2010- Fix duplication of some arrays in the FlatZinc (fixes :bugref:`3`) 2011- Fix bounds inference for variables bound to empty sets (fixes :bugref:`3`) 2012- Fix bug in error reporting function, which would sometimes not report 2013 the entire call stack 2014- Fix the generation of fresh variable names for generator expressions 2015- Fix subtype check to allow empty arrays as subtype of arrays of sets 2016- Fix crash when using assert/2 2017- Fix bug when function used in output referred to par variable 2018- Fix bug in type checker, the detection of cyclic definitions was not 2019 correct and could lead to stack overflows 2020- Fix parser to accept expressions with two consecutive array accesses 2021 (like x[3][4], which are valid MiniZinc if x is an array of sets) 2022- Fix error reporting when an evaluation error occurs within a 2023 comprehension generator 2024- Report type error on some ambiguous function calls 2025- Report type error on var sets with element type other than int 2026- Report type error when trying to coerce a var set into an array 2027- Report error when calling function with a value that is outside the 2028 declared parameter bounds 2029- Fix arg_sort builtin to implement the correct semantics 2030- Fix sort_by builtin to sort in non-decreasing order, and work with 2031 floats 2032- Fix bug in type checker, now automatic coercions in functions defined 2033 with type variables (like the comparison operators) work correctly 2034- Check that index sets match for arrays assigned in let expressions 2035- Fix bug in bounds inference for integer expressions with annotations 2036- Fix propagation of defines_var annotation to be pushed through calls 2037- Fix parser to accept empty 2d and 3d array literals 2038- Fix flattening to remove defines_var annotations with par argument, 2039 e.g. defines_var(2), which could be introduced by the optimisation 2040 pass 2041- Fix output model creation for variables that have been redefined, and 2042 remove more unused variables from the FlatZinc. 2043- Fix bug in the garbage collector that could result in function items 2044 not being kept alive in rare cases. 2045 2046.. _v2.0.1: 2047 2048Version 2.0.1 2049~~~~~~~~~~~~~ 2050 2051(released 15 December 2014) 2052 2053Major bugs and changes: 2054^^^^^^^^^^^^^^^^^^^^^^^ 2055 2056- Fix optimisation phase, which was previously incorrectly removing 2057 variables 2058- Add support for trigonometric functions (built-ins were missing in 2059 2.0.0) and pow (var versions were missing) 2060- Fix equality operator on par arrays 2061- All expressions in output model are now made par 2062- Improve bounds computation for float variables 2063- Fix translation of functions that need automatic coercion of their 2064 return value 2065- Fix the array_lb and array_ub builtins, which would return incorrect 2066 bounds in some cases 2067 2068Minor bugs and changes: 2069^^^^^^^^^^^^^^^^^^^^^^^ 2070 2071- Add space between "array" and "[" in the pretty printer, to be 2072 compatible with 1.6 output 2073- Output all par declarations before the var declarations in FlatZinc 2074- Fix parser, which could sometimes crash on invalid input 2075- Improve efficiency of bounds computation on some float expressions 2076- Add special case handling for division by 1 2077- Add missing float_times definition to the flatzinc builtins 2078- Use correct version of var_dom for float variables 2079- Output information about which files are included in verbose mode 2080- Only compute bounds for "then" expressions if the "if" is not fixed 2081 to false 2082 2083.. _v2.0.0: 2084 2085Version 2.0.0 2086~~~~~~~~~~~~~ 2087 2088(released 9 December 2014) 2089 2090MiniZinc 2.0 contains many new features and is based on a complete 2091rewrite of the MiniZinc-to-FlatZinc compiler. If you are currently using 2092the previous version 1.6, the new tools can be used as drop-in 2093replacements. The generated FlatZinc is compatible with version 1.6, so 2094all FlatZinc solvers should work without changes. 2095 2096MiniZinc language changes 2097^^^^^^^^^^^^^^^^^^^^^^^^^ 2098 2099- MiniZinc now supports user-defined functions. Details have been 2100 published in the paper "MiniZinc with Functions". Both functions and 2101 predicates can be recursive. 2102- MiniZinc now supports option types. Details have been published in 2103 the paper "Modelling with Option Types in MiniZinc". 2104- Let expressions have been generalised. They can now contain 2105 constraint items in addition to variable declarations. 2106- Array index sets can be declared using arbitrary set expressions as 2107 long as they evaluate to contiguous ranges. 2108- The if-then-else expression has been generalised to allow the 2109 condition to be a var bool expression (instead of only par bool). 2110- Array and set comprehensions as well as generator calls can now 2111 iterate over variables and use var bool where conditions. 2112- Any bool expression can now automatically coerce to an int 2113 expression, likewise for int and float. This means that you don't 2114 have to write bool2int or int2float in you models any more. 2115- Equality constraints can now be posted between array expressions. 2116- Arbitrary expressions can now be included ("interpolated") into 2117 strings, using the syntax "some text \\(e) some more text", where e 2118 is any expression. It is the same as writing "some text "++show(e)++" 2119 some more text". 2120 2121New built-in functions 2122^^^^^^^^^^^^^^^^^^^^^^ 2123 2124- Array functions: array1d, arrayXd, row, col, has_index, has_element, 2125 sort_by, sort, arg_sort, arg_min, arg_max 2126 2127New global constraints 2128^^^^^^^^^^^^^^^^^^^^^^ 2129 2130- arg_max, arg_min 2131- arg_sort 2132- k-dimensional diffn 2133- disjunctive 2134- geost 2135- knapsack 2136- network_flow 2137- regular with NFAs 2138- symmetric all different 2139- optional scheduling constraints: alternative, span, disjunctive, 2140 cumulative 2141- functional versions of many global constraints 2142 2143New tool chain 2144^^^^^^^^^^^^^^ 2145 2146- There are a few new builtins that solvers can reimplement, these are 2147 listed in the redefinitions-2.0 file. 2148- Include items use a different method for finding included files. 2149 Paths are now interpreted as relative to the file that has the 2150 include item. That way, the mzn2fzn compiler can be called from a 2151 different working directory. 2152- A new tool, mzn2doc, can produce html output from the documentation 2153 comments. The MiniZinc distribution contains the documentation for 2154 global constraints and builtins generated directly from the library 2155 source code.