## MiniZinc Challenge 2011 -- Rules

These are the official rules for the MiniZinc Challenge 2011. Version 1.0.

These rules were last updated on 13 April 2011.

### Entrants

The MiniZinc Challenge 2011 will test solvers on problems written in MiniZinc 1.3.

Let *name* be the name of the solver system in what follows.

An entrant in the challenge is a constraint solver submitted in either source code or binary format.

Constraint solvers that have several variants, for example that can alternatively use copying or trailing, may submit one entry per variant although the organizers reserve the right to reject such variations if they not sufficiently interesting, (e.g. multiple copies of the same solver with differing parameters).

Binary format submissions must be compatible with the competition hardware and operating system.

Each entrant must provide a gzipped tarball containing the following:

a README file explaining how to (compile and) install the solver.

a text file named DESCRIPTION, that contains a short (1-2 pages) description of the system. This should include a list of all authors of the system and their present institutional affiliations. It should also describe any algorithms or data structures that are not standardly used in such systems.

System descriptions will be posted on the MiniZinc Challenge 2011 website.fzn_

*name*-- an executable file that invokes a FlatZinc solver handling FlatZinc version 1.3 or XML-FlatZinc version 1.3

This executable will be invoked from the command line as follows:**fzn_**[<options>] file.fzn*name*The argument

*file.fzn*is the name of a FlatZinc 1.3 model instance to evaluate.

The executable must support the following command line options:*-a*

This causes the solver to search for, and output all solutions.

When this option is not given the solver should search for, and output the first solution.

This option will be used only for checking conformance to search annotations.

All competition instances will only look for the first or first optimal solution.*-f*

When invoked with this option the solver is free to ignore any specified search strategy.*-p <n>*

When invoked with this option the solver is free to use multiple threads and/or cores during search. The argument*n*specifies the number of cores that are available.

a directory named

*globals*containing any solver-specific definitions of the global constraints in the MiniZinc library.

This directory may also contain a file named*redefinitions.mzn*that contains redefinitions of FlatZinc built-ins required by the solver.- any other shell scripts, executables, Java archives etc required by the solver. You may assume that the directory containing these files will be in the PATH.

Installation and execution of solvers must not require root access.

Binaries should be statically linked.

The organizers will make reasonable efforts to install each system, including communication with the submitters of the system in case of difficulties. Nevertheless, the organizers reserve the right to reject an entrant if its compilation or installation process proves overly difficult.

The results will be announced at CP2011. Entrants are encouraged to physically attend CP2011, but are not required to in order to participate or win.

There will be three competition CLASSES:

- FD search: solvers in this class must follow the search strategy defined in the problem, they will be disqualified if there is evidence that they do not follow the search strategy.
- Free search: solvers in this class are free to ignore the search strategy. All FD search solvers will be automatically entered in this class too.
- Parallel search: solvers in this class are free to use multiple threads or cores to solve the problem. All entrants in the free search class will be automatically entered in this class too.

The README file included in the entry must specify which competition CLASS(es) the entry is to be entered in.

### Problem Format

The problem format will be MiniZinc 1.3.

There will be some restrictions on the problems tested in MiniZinc challenge.

- No floats may be involved in any model. This is to avoid accuracy differences and simplify entry requirements.
- No variable sets of integers may be used in any model. This is to simplify entry requirements. Not even implicit var sets of int, e.g. this is forbidden:
`array[1..3] of set of 1..3: a = [{1,2}, {3}, {1,3}]; var 1..3: i; constraint card(a[i]) > 1;`

- Each solve item must be annotated with a search strategy, such that fixing all the variables appearing in the search strategy would allow a value propagation solver to check a solution. e.g.

is correct but not`var 1..5: x; var 1..5: y; var 1..5: z; constraint x <= y /\ y <= z; solve :: int_search([x, y, z], input_order, indomain, complete) satisfy;`

even though most FD solvers would know the second was satisfiable.`solve :: int_search([x,z], input_order, indomain, complete) satisfy;`

- Search annotations will be restricted to
**bool_search**,**int_search**and**seq_search**.

For**bool_search**and**int_search**only the following parameters (where applicable) will be used:- variable choice:
- input_order
- first_fail (variable with smallest domain size)
- anti_first_fail (variable with largest domain size)
- smallest (variable with smallest minimal value)
- largest (variable with largest maximum value)

- value choice: [examples for domain {1,3,4,18}]
- indomain_min (x <= 1; x > 1)
- indomain_max (x >= 18; x < 18)
- indomain_median (x = 3 ; x != 3)
- indomain_split (x <= (1+18)/2 ; x > (1+18)/2 )
- indomain_reverse_split (x > (1+18)/2 ; x <= (1+18)/2 )

- search style
- complete

will first label`var 1..5: x; var 1..10: y; constraint x > 1 -> y > 7; constraint x = 1 -> y < 3; solve :: int_search([x, y], first_fail, indomain_min, complete) maximize y;`

`x = 1`

and find maximum value`y = 2`

eventually on backtracking to the choice`x = 1`

, then setting`x >= 2`

in most FD solvers will have domains for`x :: 2..5`

and`y :: 8..10`

and this time`y`

will be selected as the next variable to label. A full specification of the available choices is given in the FlatZinc 1.3 specification. - variable choice:

### Output Requirements

Output from entries must conform to the FlatZinc 1.3 specification. For optimization problems, if the time limit is exceeded before the final solution is printed then the last complete approximate solution printed will be considered to be the solution for that entry. Note that is important that entries flush the output stream after printing each approximate solution.

### Execution Environment

During the MiniZinc Challenge 2011 all programs will run on machines with the following specification:

- Operating System: Ubuntu 10.10
- Processor(s): i7 860 Quad Core 2.80GHz
- Memory: 4 Gb
- C compilers: gcc 4.4
- Java: Java 1.6
- Shells: bash 4.1, tcsh 6.17, zsh 4.3,

If your system requires other compilers or tools please contact us and we will try to make them available.

The above machines support both 32- and 64-bit environments. Binaries may be compiled for either.

Except in the Parallel search class, only a single core of one processor will be used for each entrant.

### Benchmark Selection

The benchmarks for MiniZinc Challenge 2011 (as well as for the qualification rounds) will be selected by the judges to try to examine some of the breadth of characteristics of FD solvers:

- propagation speed
- search speed
- global constraints
- satisfaction
- optimization

To obtain benchmarks of suitable difficulty we will select only such instances that can be solved by at least one of the participating solvers in a sensible time-frame. For the qualification rounds no such restriction applies.

In order to collect good benchmarks each entrant is strongly encouraged to submit one or two MiniZinc 1.3 models, making use of only the global constraints included in the MiniZinc 1.3 library, as well as some (preferably 20) instance files for each model. The instances should range from easy (about a minute) to hard (about 15 minutes) if possible.

Note that the model must conform to the problem format restrictions above.

Submitted benchmarks must be placed in the public domain.

### Initial Submission Round

There will be an initial submission round, which will provide the organizers with an opportunity to provide feedback on entries' compatibility with the competition hardware, compliance with the FlatZinc specification and any other matters that may arise. Submission in the initial round is not required in order to qualify for the final round, but it is **strongly** encouraged.

### The Challenge

The challenge will require solvers to process 100 MiniZinc models with a run-time limit of 15 minutes (process time) per problem.

The MiniZinc to FlatZinc conversion time will not be included in this, but the organizers reserve the right to penalize entries that use massively complicated globals definitions in order to reduce solving time. The conversion time from FlatZinc to XML-FlatZinc will also not be included.

### Assessment

Each solver *s* is run on problem *p* and the following information is collected.

*timeUsed(p,s)*- the*wall clock*time used by the solver, or*timeLimit(p)*if it was still running at the timeLimit (quantized to seconds).*solved(p,s)*- true if a correct solution is returned, or correct unsatisfiability is detected*quality(p,s)*- the objective value of the best solution found by the solver (that is the last solution fully output before the time limit) assuming maximization*optimal(p,s)*- whether the objective value is proved optimal by the solver.

#### SCORING PROCEDURE CHANGED from previous competitions

The new scoring procedure is based on the Borda count voting system. Each benchmark instance is treated like a voter who ranks the solvers. Each solver scores points equal to the number of solvers that they beat in the ranking (more or less). A solver*s*scores points on problem

*p*by comparing its performance with each other solver

*s'*on problem

*p*.

- If
*s*gives a better answer than*s'*it scores 1 point. - If
*s*gives an indistinguishable answer from*s'*then it scores 0.5 points. - If
*s*gives a worse answer than*s'*it scores 0 point.

*solved(p,s)*is false, that is,

*s*fails to find any solution or prove unsatisfiability for problem

*p*it always scores 0 points (even if

*s'*also similarly fails).

#### SATISFACTION PROBLEM

A solver*s*is

**better**than solver

*s'*on satisfaction problem

*p*iff

*solved(p,s) && not solved(p,s')*, or*solved(p,s) && timeUsed(p,s) < timeUsed(p,s')*

*s*is

**indistinguishable**from solver

*s'*on satisfaction problem

*p*iff

*solved(p,s) && solved(p,s') && timeUsed(p,s) == timeUsed(p,s')*

#### OPTIMIZATION PROBLEM

A solver*s*is

**better**than solver

*s'*on optimization problem

*p*iff

*solved(p,s) && not solved(p,s')*, or*optimal(p,s) && not optimal(p,s')*, or*quality(p,s) > quality(p,s')*, or*optimal(p,s) && optimal(p,s') && timeUsed(p,s) < timeUsed(p,s)*

*s*is

**indistinguishable**from solver

*s'*on optimization problem

*p*iff

*solved(p,s) && solved(p,s') && not optimal(p,s) && not optimal(p,s') && quality(p,s) == quality(p,s')**optimal(p,s) && optimal(p,s') && timeUsed(p,s) == timeUsed(p,s')*

#### CLASSES

The scoring calculations will be done once for each class: FD search, Free search, and Parallel search.

The organizers may well run entrants in the FD search class on a series of smaller problems to test that they indeed are following the given search strategy. These problems will not accrue points, but may disqualify an entry from the FD search class.

### Prizes

The solvers will be ranked on total points awarded. There will be prizes for the three solvers with the highest scores in each of the classes: FD search, Free search, and Parallel search. The organizers may also award prizes to the best solvers on a particular category of problems.

### Restrictions

The organizers reserve the right to enter their own systems--or other systems of interest--to the competition, but these will not be eligible for prizes, but still will modify the scoring results.

Return to the MiniZinc Challenge 2011 home page.