2015-02-07 2 views
0

Написав мое первое нетривиальное приложение MiniZinc, я продолжаю работать с ошибкой «не могу определить границы». Как обычно удается устранить эту ошибку?MiniZinc «не может определять границы»

+0

На это легче ответить, если вы покажете модель (или сегмент, который все еще дает вам эту ошибку). Какой решатель FlatZinc вы используете? – hakank

ответ

0

В общем случае «невозможно определить границы» означает, что решатель не может определить границы (область) переменной принятия решения.

Следует избегать использования «var int» в качестве области переменной принятия решения, поскольку это, вероятно, замедлит процесс решения. Бывают моменты, когда решатель может определить домен, например. в случаях любит

% ... 
var int: z = sum(x); 

, когда «x» объявили домены. Но, как правило, пытайтесь определить домены.

+0

Я понимаю, что «не может определять границы» означает, что решатель не может определить границы. Но когда это произойдет - возможно, простой пример прольет некоторый свет. Кроме того, я думал, что «var» означает переменную решения и что все они являются точкой CP - для указания ограничений на неизвестные значения - так почему вы предлагаете их избегать? Я использую G12 fd. –

+0

Ну, «var int» - это переменная решения с огромным (максимально возможным) доменом, который заставит решателя попробовать все возможные значения для значений в этом домене. «var 0..10» также является переменной решения, но с гораздо меньшей областью возможных значений. Вы должны попытаться ограничить домен настолько малым, насколько это возможно, поскольку это ускорит работу. Что произойдет, если вы ограничите области переменных решения? Какую версию MiniZinc вы используете? Я знаю, что в некоторых более ранних версиях MiniZinc 2 были некоторые проблемы с этими ошибками, которые были исправлены позже. – hakank

+0

А, я использовал множество массивов типа "array [1 .. n] var int: X;" и не понимал, что это должен быть «массив [1 ..n] из var 1 .. 10: X». Благодарю. Использование 0.9.6. Но действительно ли решатель действительно пытается «все» значения? Я думал, что они умнее этого. –

Смежные вопросы