在MiniZinc中如何解决此错误?

时间:2015-02-09 09:22:07

标签: floating-point minizinc

在MiniZinc中,如何在没有错误的情况下编译此代码“没有找到此签名的函数或谓词:`round(var float)'”?

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

1 个答案:

答案 0 :(得分:3)

该消息只是意味着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浮动。