如何用Docplex CP创建仅可取值于指定整数列表的变量
如何在docplex.cp中创建仅取指定整数列表值的变量
好问题!既然你已经掌握了创建固定范围整数变量的方法,那要实现仅能取指定列表中值的变量,docplex.cp提供了两种简单直接的方式,我给你一步步演示:
方法1:直接通过domain参数定义
integer_var方法本身支持传入domain参数,直接指定变量的可选取值列表,这是最直观的实现方式:
from docplex.cp.model import CpoModel mdl = CpoModel() # 创建只能取1、3、5、6的整数变量 restricted_var = mdl.integer_var(domain=[1, 3, 5, 6], name="restricted_var")
这里的domain参数接受一个整数列表,变量的取值会被严格限制在这个列表内,不需要额外添加约束。
方法2:通过member_of约束限制取值
如果你的变量已经先定义了一个大致范围,或者需要后续动态调整可选值,可以先创建变量,再添加member_of约束来缩小取值范围:
from docplex.cp.model import CpoModel mdl = CpoModel() # 先创建一个范围在1-6之间的整数变量 restricted_var = mdl.integer_var(min=1, max=6, name="restricted_var") # 添加约束:变量必须属于指定的列表 mdl.add(restricted_var.member_of([1, 3, 5, 6]))
这种方式更灵活,比如你可以根据业务逻辑动态修改约束里的列表,或者结合其他条件一起使用。
验证取值(可选)
如果你想确认变量是否符合预期,可以求解模型看看实际结果:
sol = mdl.solve() if sol: print(f"变量的取值为: {sol[restricted_var]}")
运行后你会看到输出的结果只会是1、3、5、6中的一个。
内容的提问来源于stack exchange,提问作者Erik Garcia
相关产品推荐
相关产品推荐

