1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | % % All interval problem in MiniZinc. % % Different approaches inspired by % http://www.dis.uniroma1.it/~tmancini/index.php?currItem=research.publications.webappendices.csplib2x.problemDetails&problemid=007 % % Also see % % % Model created by Hakan Kjellerstrand, hakank@gmail.com % See also my MiniZinc page: http://www.hakank.org/minizinc % Licenced under CC-BY-4.0 : http://creativecommons.org/licenses/by/4.0/ include "globals.mzn" ; int : n = 12; set of int : classes = 0 .. n - 1; % Search space: The set of permutations of integer range [0..n-1] array [classes] of var classes: series; solve :: int_search(series, first_fail, indomain_median, complete) satisfy ; constraint % C1: Each pitch class occurs exactly once % GCAD: Exploitation of alldifferent() global constraint all_different(series) /\ % C2: Differences between neighbouring notes are all different % GCAD: Exploitation of alldifferent() global constraint % alldifferent(all (i in classes: i <> n-1) abs(series[i+1] - series[i])); all_different( [ abs (series[i + 1] - series[i]) | i in classes where i != n - 1] ) ; output [ show (series) ]; |