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

CP-SAT中除构造补域外,是否有内置方式为AddLinearExpressionInDomain添加Not约束?

更简洁的OR-Tools SAT实现方式

你当前的实现确实可以简化,OR-Tools的CP-SAT库提供了更直接的内置方法来关联布尔变量与变量的域成员关系,无需手动构造补域:

from ortools.sat.python import cp_model

model = cp_model.CpModel()

x = model.NewIntVar(0, 20, 'x')
x_is_in_the_domain = model.NewBoolVar('indicator')

# 直接定义目标域
target_domain = cp_model.Domain.FromIntervals([[1, 3], [5, 7]])

# 核心:将布尔变量与x是否属于目标域直接等价关联
model.AddEquality(x_is_in_the_domain, x.IsInDomain(target_domain))

solver = cp_model.CpSolver()
status = solver.Solve(model=model)

说明

  • x.IsInDomain(target_domain)会返回一个线性约束表达式,代表x属于指定域的条件
  • AddEquality方法直接将布尔变量的取值与该条件的真假绑定,等价于你之前写的双向Implication约束,且无需手动处理补域,代码更简洁易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:03