在MiniZinc中,如何获取此代码以进行编译而不会出现错误“没有找到具有此签名的函数或谓词:'round(var float)'”?

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

最佳答案

该消息仅表示MiniZinc不支持带有决策变量的round(),即“ round(var float)”。它仅支持“ round(float)”,即固定的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 float。

09-10 14:37
查看更多