约束中可能的整数溢出:线性

Posted

技术标签:

【中文标题】约束中可能的整数溢出:线性【英文标题】:Possible integer overflow in constraint: linear 【发布时间】:2021-01-25 15:28:20 【问题描述】:

亲爱的,我在 python 中使用 CP-SAT。 我有两个变量:

pippo = model.NewIntVar(-93372036854775808,9123372036854775807, 'pippo')
test = model.NewIntVar(-93372036854775808,9123372036854775807, 'test')

以及以下决策变量:

for r in self.all_records:
            memory = 
            for p in self.all_decisions:
                # create bool decision variables
                memory[p] = model.NewBoolVar('c' + str(r) + self.scenario.decisions[p].name)
            self.decision_var[r] = memory

我有两个限制:

1) test==sum(self.scenario.dataset['is_fraud'][r]*self.decision_var[r][0] for r in self.all_records)

2) pippo == test


                                                                  

如果我删除约束 2) 一切正常,但使用约束 2 我会收到此错误:

Possible integer overflow in constraint: linear 
  vars: 126660
  vars: 126661
  coeffs: -1
  coeffs: 1
  domain: 0
  domain: 0

and Status is MODEL_INVALID.

我真的不明白为什么。你能帮帮我吗?

【问题讨论】:

【参考方案1】:

求解器主动检查可能的溢出。 如果模型有潜在的整数溢出,则视为无效。

您正在看到此消息。请减少整数变量的界限(int32 min/max 很可能就足够了)。

【讨论】:

有没有办法避免这种预先检查?我的意思是不执行它 不,在这种情况下求解器并不可靠。所以解决方案很可能是无效的。但是你可以在求解之前调用 validate 方法。

以上是关于约束中可能的整数溢出:线性的主要内容,如果未能解决你的问题,请参考以下文章

python非线性规划用啥模块

如何用matlab求解0-1规划问题

混合整数线性规划——切割平面

Python小白的数学建模课-04.整数规划

非线性整数规划的遗传算法Matlab程序

pulp求解简单线性规划问题