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

在Ortools中用两变量线性表达式作分子添加除法约束致MODEL_INVALID

Google CP-SAT除法约束导致MODEL_INVALID的问题分析与解决

问题原因

你使用的9.11.4210版本CP-SAT solver中,AddDivisionEquality方法对分子表达式有严格限制:分子只能是单个变量,或单个变量与常数的加减组合,不支持两个变量相加这类多变量线性表达式。当传入v1 + v2作为分子时,求解器无法识别该结构,直接判定模型无效;而v1 + 1属于变量加常数的合法形式,符合方法输入要求,因此不会触发报错。

解决方法

方法1:引入中间变量替代多变量和

通过创建中间变量存储两个变量的和,再将该变量作为分子传入AddDivisionEquality,绕过旧版本限制。示例代码如下:

model = CpModel()
v1 = model.NewIntVar(1, 1, "var1")
v2 = model.NewIntVar(1, 1, "var2")
# 新增中间变量存储v1+v2的结果
sum_v = model.NewIntVar(2, 2, "sum_v")
model.Add(sum_v == v1 + v2)
div = model.NewIntVar(2, 2, "div")
# 使用中间变量作为分子
model.AddDivisionEquality(div, sum_v, v2)
solver = CpSolver()
status = solver.Solve(model)

if status == MODEL_INVALID:
    print("The model is invalid")
else:
    print("Solution found")

方法2:升级CP-SAT版本

Google后续更新的CP-SAT版本(如9.15及以上)已移除该限制,支持分子为任意线性表达式(包括多变量相加)。若项目允许,直接升级solver版本即可,原代码无需修改就能正常运行。

内容的提问来源于stack exchange,提问作者RM Ts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:46:08