如何最大化大于 32 位的 var int?

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)

hak*_*ank 5

这里真正的限制并不是 MiniZinc,而是求解器。正如文档所述(来自您引用的有关整数的链接,我的重点):

概述。整数代表整数。整数表示是实现定义的。这意味着整数的可表示范围是实现定义的。然而,如果整数运算溢出,实现应该在运行时中止。

以下是运行测试模型时某些求解器的解决方案的一些示例maxInt(使用约束maxInt > 0):

  1. 地理编码:2147483646
  2. PicatSAT:72057594037927935 (2^54)
  3. 高兴:500000000