Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2015
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. include "globals.mzn";
  2.  
  3. int: order; % this is called the length in the new problem.
  4.  
  5. set of int: LEN = 0..order*order;
  6. array[1..order] of var LEN: marks;
  7. int: ndiffs = order*(order-1) div 2;
  8. array[1..ndiffs] of var LEN: diffs =
  9. [marks[j] - marks[i] | i in 1..order, j in i+1..order];
  10.  
  11. % Old Golomb constraints.
  12. constraint increasing(marks) /\ marks[1] = 0 /\ alldifferent(diffs);
  13. % Break symmetry (optimisation): First difference is smaller than last one.
  14. constraint diffs[1] < diffs[ndiffs];
  15.  
  16. % Extra constraint: maximize obj s.th. diffs 1..obj appear.
  17. var 0..ndiffs: obj;
  18. constraint forall(d in 1..obj)(count(diffs, d) = 1);
  19.  
  20. solve :: int_search(marks, input_order, indomain_min, complete) maximize obj;
  21. output ["\(show_int(-3, order)) \(show_int(-3, obj))"] ++ [" \(x)" | x in marks] ++ ["\n"];
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement