我正在尝试使用Minizinc IDE 2.2.3和Geocode 6.1.0 [内置]在Mac OS / X上运行以下代码:
var 1..10: x;
var float: y = x div 4;
constraint y == floor(y);
solve minimize( (x - 7)^2 );
output ["\(x) \(y)"]
我收到的错误是:
MiniZinc:类型错误:找不到带有此签名的函数或谓词:`floor(var float)'
我已经看过这个similar question,但是,我正在遵循selected answer中的建议并使用:
因此,这个问题不同于另一个问题。
答案 0 :(得分:1)
documentation (v. 2.2.3)说floor()
需要类型为float
的参数:
4.1.11.6。强制操作
将浮点数分别朝向+∞,-∞和最接近的整数。
int: ceil (float) int: floor(float) int: round(float)
从一个类型实例向另一个类型对象的显式转换。
int: bool2int( bool) var int: bool2int(var bool) float: int2float( int) var float: int2float(var int) array[int] of $T: set2array(set of $T)
在模型中,您将var float
而不是float
传递给函数floor
,因此会出现类型错误。
如上所述,在您的示例中,floor()
函数似乎不是必需的。即使您将y
声明为var float
,也只能为其分配一些 integral 值,因为 integer除法的结果始终是整数:
function var int: 'div'(var int: x, var int: y)
因此,我的建议是完全删除floor()
。
示例
var 1..10: x;
var float: y = x div 4;
constraint 1.5 <= y;
solve minimize( (x - 7)^2 );
output ["\(x) \(y)"]
收益
~$ minizinc t.mzn
8 2.0
----------
==========