You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CP-SAT求解器值溢出是否返回INFEASIBILITY及模型扩展咨询

CP-SAT整数乘积相关问题解答

关于变量定义域的纠正

CP-SAT的整数变量基于64位有符号整数,最大正取值为9223372036854775807(19位数字),最小负取值为-9223372036854775808。你之前尝试设置18位失败,大概率是因为输入的数值超过了64位有符号整数的上限(比如1000000000000000000是19位数字,超出了上限)。

问题解答

  • 问题1:当target_prod的值超过其上界时,求解器是否会返回INFEASIBILITY?
    是的。如果模型的约束逻辑推导出target_prod必须大于设定的上界(或小于下界),求解器会直接返回INFEASIBILITY,因为不存在满足所有约束的可行解。

  • 问题2:有无方法将乘积分配到多个变量以实现模型的扩展?
    可以通过拆分乘积为多段变量的方式实现,常用两种思路:

    1. 十进制拆分:把大乘积拆分为高位和低位变量,利用算术约束关联。例如计算a * b,拆分出high(高位)和low(低位,存储低k位数值),添加约束:
      model.Add(a * b == high * 10**k + low)
      model.Add(low >= 0)
      model.Add(low < 10**k)
      
    2. 二进制拆分:基于2的幂拆分乘积,利用位运算相关约束关联多个变量,适合需要处理二进制位场景的需求。
      两种方式都能让多个变量共同承载超过单个变量上限的乘积结果。
  • 问题3:将定义域改为(-99999999999999999, 99999999999999999)时,求解器是否支持该设置?
    完全支持。这个范围落在CP-SAT 64位有符号整数的取值区间内,直接用以下代码创建变量即可:

    target_prod = model.NewIntVar(-99999999999999999, 99999999999999999, 'target_prod')
    

    求解器可以正常处理带符号的整数乘积约束。

内容的提问来源于stack exchange,提问作者Ken Adams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:42:47