3

在 MiniZinc 中,我怎样才能让这段代码编译而不会出现错误“没有找到具有此签名的函数或谓词:`round(var float)'”?

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

1 回答 1

4

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

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 浮点数。

于 2015-02-09T17:01:24.987 回答