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

标签 optimization minizinc gecode optimathsat

我正在使用带有内置 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):

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

关于optimization - 如何最大化大于 32 位的 var int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389291/

相关文章:

optimization - Gekko 不可行解,应满足 cotraint

t-sql - 添加新列只是为了拥有聚集表

optimization - 如何提高 MiniZinc 中图形着色模型的性能?

constraint-programming - MiniZinc 中的基数约束

Minizinc、Gecode,如何通过多解决方案模型跨分布式服务器获得相同的解决方案?

javascript - 所有参数的总和(有些参数是数组);总和( [1,2,3,4], 50, 10, [10, 20],1 )

javascript - 如何在 Shopify 中使用 gzip 压缩资源?

optimization - 如何识别 minizinc 问题(最大化或最小化)有多个答案

minizinc - MiniZinc 中的 $ 是什么意思?