将索引变量的值设置为索引表达式 - pyomo

时间:2017-06-19 22:08:05

标签: python for-loop runtime pyomo

我正在开发一个项目,要求我使用python lib进行编码。叫做pyomo。

我需要将索引变量的值设置为索引表达式。

因此总共有2个模型和1个创建实例的脚本。

第一个模型:

instance1 = create_first_model()
instance2 = create_second model()

solve(instance2)

for k in instance1.index:                                    
    instance1.Exp[k].expr = instance2.y[k].value

solve(instance1)

第二种模式:

b

run.py脚本:

BufferedImage

不久:

我需要一个更好的方法来实现这个for循环。或者更有效的方法(循环很慢......)

此致 圆盘豆

Ps:所有的变量,集合,表达式和约束都是pyomo对象。

1 个答案:

答案 0 :(得分:0)

是m.Exp包含Pyomo变量的表达式还是用作常量(即可变参数)?

假设它是一个表达式,并且您希望根据for循环中的表达式添加约束,则以下内容应该有效:

def _linking_con(m, k):
    return m.Exp[k] == value(instance2.y[k])
instance1.linking_con = Constraint(instance1.index, rule=_linking_con)

如果m.Exp是一个常数值,那么我会用一个可变的Param替换它

m.Exp = Param(m.index, mutable=True)

然后将你的for循环更改为:

for k in instance1.index:
    instance1.Exp[k] = value(instance2.y[k])

我认为没有办法避免for-loop