我正在开发一个项目,要求我使用python lib进行编码 . 叫做pyomo .
我需要将索引变量的值设置为索引表达式 .
因此总共有2个模型和1个创建实例的脚本 .
第一种模式:
m.i = [1,2,3] # i=1,2,3
m.j = [1,2,3] # j=1,2,3
m.index = Set(within=m.i*m.j) # m.index = [i]*[j] (pyomo set)
m.a = Var(m.index) # m.a[i,j]
m.Exp = Expression(m.index) # pyomo expression with [i,j] index
m.Const = Constraint(m.index, rule=const_rule)
def const_rule(m, index):
return m.a[index] == m.Exp[index]
第二种模式:
m.index = ... # same index with first model's m.index
m.y = Var(m.index) # lets assume it has values or I can put with init command
run.py脚本:
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)
不久:
我需要一个更好的方法来实现这个for循环 . 或者更有效的方法(循环很慢......)
关心Okan
Ps:所有的变量,集合,表达式和约束都是pyomo对象 .
1 回答
m.Exp是包含Pyomo变量的表达式还是用作常量(即可变参数)?
假设它是一个表达式,并且您希望根据for循环中的表达式添加约束,则以下内容应该起作用:
如果m.Exp是一个常数值,那么我会用一个可变的Param替换它
然后将您的for循环更改为:
我认为没有办法避免for循环