首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docplex:在克隆模型中使用变量

Docplex:在克隆模型中使用变量
EN

Stack Overflow用户
提问于 2021-07-19 13:01:47
回答 1查看 184关注 0票数 0

我不明白如何修改docplex中的克隆模型。

代码语言:javascript
复制
from docplex.mp.model import Model

mdl_1 = Model('Model 1')

x = mdl_1.integer_var(0, 10, 'x')
mdl_1.add_constraint( x <= 10)

mdl_1.maximize(x)
mdl_1.solve()

#now clone
mdl_2 = mdl_1.clone(new_name='Model 2')

mdl_2.add_constraint( x <= 9) # throws (x <= 9) is not in model 'Model 2'

这个错误是有意义的,因为x是为Model 1创建的,但是我如何获得“克隆x”来修改模型2?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 08:44:59

变量属于一个模型。您可以通过变量的名称(假设它是唯一的)或索引来检索它。

答案1:使用变量名称

代码语言:javascript
复制
x_2 = mdl_2.get_var_by_name('x')
mdl_2.add_constraint( x_2 <= 9) # throws (x <= 9) is not in model 'Model 2'
print(mdl_2.lp_string)

答案2:使用变量索引

代码语言:javascript
复制
x_2 = mdl_2.get_var_by_index(x.index)
mdl_2.add_constraint( x_2 <= 9) # throws (x <= 9) is not in model 'Model 2'
print(mdl_2.lp_string)

然而,上述两种解决方案增加了一个额外的限制,最好是编辑lhs。这是通过通过索引检索约束的克隆来完成的:

答案3:使用约束索引,编辑rhs

代码语言:javascript
复制
c_2 = mdl_2.get_constraint_by_index(c1.index)
c_2.rhs = 9  # modify the rhs of the cloned constraint , in place
print(mdl_2.lp_string)

在最后一种方法中,克隆模型只有一个约束,而不是两个约束。

产出:

代码语言:javascript
复制
\Problem name: Model 2

Maximize
 obj: x
Subject To
 ct_x_10: x <= 9

Bounds
       x <= 10

Generals
 x
End
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68440939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档