在 MiniZinc 中打印数组的一部分

Printing part of an array in MiniZinc

我有一个 wolf-goat-cabbage 的 MiniZinc 模型,其中我将每个实体的位置存储在它自己的数组中,例如,array[1..max] of Loc: wolf,其中 Loc 被定义为一个枚举:enum Loc = {left, rght};max 是所需的最大可能步数,例如 20..

为了找到最短计划,我定义了一个变量 var 1..max: len; 并将结束状态限制在步骤 len

constraint farmer[len] == left /\ wolf[len] == left /\ goat[len] == left /\ cabbage[len] == left

那我要

solve minimize len

我都答对了。

我想显示来自 1..len, 的数组,但我找不到实现它的方法。例如,当我尝试在输出中包含:

 [ "\(wolf[n]), " | n in 1..max where n <= len ]

我收到一条错误消息,提示我无法显示 opt string.

的数组

有没有办法只显示数组的初始部分,其中初始部分的长度由模型确定?

谢谢。

您是否尝试像 n <= fix(len) 一样修复输出语句中的 len 变量?。另见 What is the use of minizinc fix function?