Я запускаю первый пример MiniZinc в Руководстве, раскрашивая штаты и территории Австралии. Работает нормально, как написано.
% Colouring Australia using nc colours
int: nc = 3;
var 1..nc: wa; var 1..nc: nt; var 1..nc: sa; var 1..nc: q;
var 1..nc: nsw; var 1..nc: v; var 1..nc: t;
constraint wa != nt;
constraint wa != sa;
constraint nt != sa;
constraint nt != q;
constraint sa != q;
constraint sa != nsw;
constraint sa != v;
constraint q != nsw;
constraint nsw != v;
solve satisfy;
output ["wa=\(wa)\t nt=\(nt)\t sa=\(sa)\n",
"q=\(q)\t nsw=\(nsw)\t v=\(v)\n",
"t=", show(t), "\n"];
Но когда я изменяю nc
(количество цветов) на переменную решения (меняю int: nc = 3;
на var 1..10: nc;
) и меняю solve satisfy;
на solve minimize nc;
, я получаюсообщение об ошибке
MiniZinc: type error: type-inst must be par set but is `var set of int'
Я надеялся, что MiniZinc сообщит мне минимальное количество необходимых цветов.
Что мне нужно сделать, чтобы получить минимальное количество цветов?
ОБНОВЛЕНИЕ: Я нашел один способ получить желаемый ответ. Я добавил следующее.
array[1..7] of var int: ts = [wa, nt, sa, q, nsw, v, t];
var int: min_nc = max(ts);
solve minimize min_nc;
Есть ли лучший способ?