如何解决cplex中的多个模型-python
我想实现 epsilon 约束方法,在这里我需要有多个具有相似变量和几乎相同约束的模型。我想知道如何定义可以在所有模型中使用的变量(或约束)。例如,请假设我想向两个模型(“mdl1”和“mdl2”)添加一个二进制变量“x”和“con1”。我已将这个问题编码如下,但它不起作用。你能帮我吗?
from docplex.mp.model import Model
# Model names
mdl1 = Model("OBJ1")
mdl2 = Model("OBJ2")
# set_idx1 is defined here.
# Variables
x = mdl1.binary_var_dict(set_idx1,name="x")
x = mdl2.binary_var_dict(set_idx1,name="x")
此外,我应该如何定义约束以防止重复工作?谢谢!
解决方法
在Optimization easy with python
让我分享一下例子clone a linear model
struct x {
vector<int> D;
x() : D(100) {}
};
给出
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300,'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve(log_output=False,)
mdlclone=mdl.clone()
mdlequal=mdl;
# set upper bound for nbbus40 to 0
nbbus40.ub=0
mdlclone.solve(log_output=False,)
mdlequal.solve(log_output=False,)
print("clone")
for v in mdlclone.iter_integer_vars():
print(v," = ",v.solution_value)
print("= operator")
for v in mdlequal.iter_integer_vars():
print(v,v.solution_value)
,
关于在不同模型中使用建模人工制品:这是不可能的,每个人工制品都属于一个父模型。为什么要这样做?
关于第二个问题,为了避免编写复杂约束时的代码重复(你是对的),我建议编写一个函数,它(至少)将模型作为参数,加上其他输入参数。
一个非常简单的例子:
def new_ct_sum1(mdl,x,y):
# returns a constraint stating x+y ==1
# assumes x,y are in model mdl,otherwise an error is raised.
return mdl.add(x + y == 1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。