在 MiniZinc 中我该如何解决这个错误?

In MiniZinc how can I resolve this error?

在 MiniZinc 中,我怎样才能编译这段代码而不出现错误 "no function or predicate with this signature found: `round(var float)'"?

var int: D = 1;
var int: F;
constraint F = round (D / 2);

该消息仅表示 MiniZinc 不支持带有决策变量的 round(),即 "round(var float)"。它只支持 "round(float)" 即固定浮点值。 ceil()和floor()也是一样,只是支持固定的float值。

MiniZinc 2.0 自动将参数除法 (/) 转换为决策变量的浮点除法(因此不支持)。但是,由于您使用的是 var int,您可以尝试使用整数除法 ("D div 2"),它给出 F = 0.

对于 MiniZinc 2.0 以及支持 var float 的求解器(例如 G12/mip、JaCoP、Gecode 和 ECLiPSe):如果您将 F 定义为 "var float: F",则 F 将为 0.5。请注意 G12/fd 不支持 var 浮点数。