Spy*_*s K 3 optimization minizinc gecode optimathsat
我正在使用带有内置 Gecode 6.1.1 的 minizinc,并且我希望最大化目标函数,其值远大于最大 int 32。32 位整数的最大值是 2147483646。虽然似乎没有太多信息与minizinc 参考文献中整数的最大值相关。然而,以下测试表明 Minizinc 使用 32 位整数。
测试非常简单,它只是尝试最大化 var int。
var int: maxInt;
constraint maxInt>0;
solve maximize maxInt;
output ["maxInt = \(maxInt)"];
Run Code Online (Sandbox Code Playgroud)
结果是
最大整数 = 2147483646
结果接近最大 int32 值,而且 miniZinc 似乎无法进一步“最大化”它。以下示例返回一个奇怪的错误。
var int: maxInt;
constraint maxInt>2147483646;
solve maximize maxInt;
output ["maxInt = \(maxInt)"];
Run Code Online (Sandbox Code Playgroud)
错误消息如下。该错误消息信息不多,但在尝试使用大于 2147483646 的数字时会显示。
错误:第 1 行中的整数文字无效。2 错误:语法错误,第 1 行出现意外的“,” 2 进程以非零退出代码 1 结束
我的问题如下:我可以在 minizinc 中使用 int64 位整数或任何其他大整数表示形式吗?如果可以,如何使用?(使用浮动不是一种选择)理想情况下,我想举一些例子来说明如何最大化某些东西
constraint maxLargeInt>2147483647;
Run Code Online (Sandbox Code Playgroud)
这里真正的限制并不是 MiniZinc,而是求解器。正如文档所述(来自您引用的有关整数的链接,我的重点):
概述。整数代表整数。整数表示是实现定义的。这意味着整数的可表示范围是实现定义的。然而,如果整数运算溢出,实现应该在运行时中止。
以下是运行测试模型时某些求解器的解决方案的一些示例maxInt
(使用约束maxInt > 0
):