【问题标题】:How to handle large integers in IBM ILOG CPLEX CP Optimizer?如何在 IBM ILOG CPLEX CP Optimizer 中处理大整数?
【发布时间】:2018-10-21 07:51:22
【问题描述】:

这是this post 的后续报道。简而言之,我在 Python 中使用IBM ILOG CPLEX CP Optimizer 来解决约束规划问题。优化目标之一是最大化整数 x_1 * x_2 * ... * x_n 的乘积。随着问题的扩大(例如 n 约为 300),产品显然会变得非常大,CP Optimizer 似乎无法处理这个大整数。对于不同的n值,返回的产品总是1.79769e+308。

整数的大小是无限的,并且在原生 Python 中没有最大值,所以我猜 CP Optimizer 以不同的方式处理大整数。 CP Optimizer 有没有办法处理大整数?

一些旁注:

  • 我的程序适用于较小的数据大小(小 n)。
  • 我尝试最大化 log(x_1) + log(x_2) + ... + log(x_n) 但程序不停地运行。我认为 log 会让事情变得复杂。
  • 有兴趣的朋友,我的源代码和示例数据是here

非常感谢!

【问题讨论】:

  • 这是 float64 的上限(所以即使这种数据类型对你来说也失败了;并且在核心中默默地使用)。由于可能不支持任意算术,您可能会尝试在该总和上添加上限,来自其他模型假设。当然,这有点假设,您期望在这个有效范围内有一个解决方案。

标签: python optimization constraint-programming ilog cp-optimizer


【解决方案1】:

https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.ide.help/refcppopl/html/variables/IlcIntMax.html

你可以阅读

在 64 位平台上,根据 IEEE 754 可以表示为 64 位浮点数的最大正整数,或常数 2^53-1。在 32 位平台上,常数 2^31-1。

在为 IlcIntVar 类指定域值时应遵守此上限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多