我正在使用带有内置 Gecode 6.1.1 的 minizinc,我想最大化一个目标函数,其值远大于 max int 32。 32 位整数的最大值是 2147483646。虽然似乎没有太多与 the reference of minizinc 中的整数最大值相关的信息可用.但是下面的测试表明 Minizinc 使用 32 位整数。
测试非常简单,它只是试图最大化一个 var int。
var int: maxInt;
constraint maxInt>0;
solve maximize maxInt;
output ["maxInt = \(maxInt)"];
结果是
maxInt = 2147483646
结果接近最大 int32 值,而且 miniZinc 似乎无法进一步“最大化”它。以下示例返回一个奇怪的错误。
var int: maxInt;
constraint maxInt>2147483646;
solve maximize maxInt;
output ["maxInt = \(maxInt)"];
错误信息如下。错误消息的信息量不是很大,但在尝试使用大于 2147483646 的数字时会显示。
Error: invalid integer literal in line no. 2 Error: syntax error, unexpected ',' in line no. 2 Process finished with non-zero exit code 1
我的问题如下: 我可以在 minizinc 中使用 int64 位整数或任何其他大整数表示吗?如果可以,如何使用? (不能使用 float ) 理想情况下,我想举一些例子来说明如何使用
最大化某些东西constraint maxLargeInt>2147483647;
最佳答案
这里的限制并不是真正的 MiniZinc,而是求解器。正如文档所述(来自您引用的关于整数的链接,我的重点):
Overview. Integers represent integral numbers. Integer representations are implementation-defined. This means that the representable range of integers is implementation-defined. However, an implementation should abort at run-time if an integer operation overflows.
以下是运行测试模型时某些求解器的 maxInt
解的一些示例(使用约束 maxInt > 0
):
- 地理编码:2147483646
- PicatSAT:72057594037927935 (2^54)
- 开心:500000000
关于optimization - 如何最大化大于 32 位的 var int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389291/