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

如何在Google OR Tools的CP-SAT模型中设置变量x的取值约束?

Google OR Tools CP-SAT 变量范围约束实现

要实现变量x要么取值为0,要么处于10到100之间的约束,你可以借助CP-SAT的条件约束结合辅助布尔变量来完成,以下是具体实现代码:

基础准备

首先初始化模型和变量:

from ortools.sat.python import cp_model

model = cp_model.CpModel()
# 定义x为整数变量,值域初始设为0到100(覆盖所有可能取值)
x = model.NewIntVar(0, 100, 'x')

约束实现

创建一个辅助布尔变量来标记x是否为非零值,再通过条件约束关联变量范围:

# 辅助布尔变量:is_non_zero为True时,表示x处于10-100区间;为False时x必须为0
is_non_zero = model.NewBoolVar('is_non_zero')

# 当is_non_zero为True时,约束x必须在10到100之间
model.Add(x >= 10).OnlyEnforceIf(is_non_zero)
model.Add(x <= 100).OnlyEnforceIf(is_non_zero)

# 当is_non_zero为False时,约束x必须等于0
model.Add(x == 0).OnlyEnforceIf(is_non_zero.Not())

逻辑说明

  • OnlyEnforceIf(变量):表示仅当括号内的布尔变量为True时,对应的线性约束才生效。
  • is_non_zero.Not():取布尔变量的反值,用于表达“x为0”的分支逻辑。

这种方式逻辑清晰,且符合CP-SAT求解器的约束表达规范,能确保求解器正确处理所有合法取值情况。

内容的提问来源于stack exchange,提问作者Prasad Darshana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:45:28