Ограничение Выпуск Неудовлетворенный MiniZinc - PullRequest
1 голос
/ 01 октября 2019

У меня есть массив S [1,4,2,3,0] индекса [1,2,3,4,5] и массив O [2,1,1,2] индекса [1,2,3,4], из этих двух я должен сгенерировать массив SO [2,2,1,1,0] индекса [1,2,3,4,5]. Когда я бегу с ограничением forall (я в 1..5) (SO [i] = O [S [i]]);Я получаю сообщение об ошибке неудовлетворенным из-за отсутствия индекса 0 для O. Пожалуйста, помогите мне с этим. Я новичок в Minizinc, и я не могу найти достаточно материалов, чтобы помочь

'' '' ''

constraint forall(i in 1..5)(SO[i] = O[S[i]]);`i/p array S[1,4,2,3,0] of index[1,2,3,4,5];

1 Ответ

1 голос
/ 01 октября 2019

Проблема с вашей моделью в том, что S[5] равно 0 (ноль), и нет соответствующего SO[0].

Я не уверен, что вы думали, что MiniZinc автоматически выдаст 0, если значение O[0] отсутствует, но MiniZinc требует, чтобы вы явно указывали индексы в массиве, когдаt начать с 1.

. Это можно исправить, добавив индекс 0 (ноль) в массив O вместе с array1d:

array[1..5] of int: S = [1,4,2,3,0];
array[0..4] of int: O = array1d(0..4,[0,2,1,1,2]);  # <---

array[1..5] of var 0..2: SO;

solve satisfy;

constraint forall(i in 1..5) (
                          SO[i] = O[S[i]]
                          );

Результат:

SO = array1d(1..5 ,[2, 2, 1, 1, 0]);
...