我正在尝试在pyomo中优化问题...我在行(model.nt [j] = model.ntm1 [j] + ....)上得到'SumExpression'对象不是可迭代错误如下面的代码R_2_j()所示,R_1_j()函数的输出取决于决策变量...如果我将model.nt作为参数显示,因为涉及的决策变量不是我的真实域,所以我现在将model.nt设为一个集合 而且我也不能这样做““ model.ntm1 [j] + model.q [j] * R_2_j(model,j,-1)”喜欢相乘并添加函数和模型...如果是的话,我该怎么办这样做...而且因为model.nt涉及决策变量,所以我应该将model.nt保留为集合,参数或变量
model.q = Param(model.l,
initialize={2: 0.235,
4: 0.235,
6: 0.235,
8: 0.235},
doc='q')
model.nt = Set(model.l)
model.ntm1 = Param(model.l,
initialize={2: 0,
4: 0,
6: 0,
8: 0},
doc='queuesmm1')
for j in model.l:
model.nt[j] = model.ntm1[j] + model.q[j]*R_2_j(model, j, -1) + model.q[j]*(R_1_j(model,j, 0) + G_e_j(model,j, 0)) - model.s[j]*G_e_j(model,j, 0)
答案 0 :(得分:1)
如果我了解您要执行的操作,则您尝试根据nt
中某些变量的值来创建一个集合(R_2_j
)。
这不是一个有效的公式,所有集合和参数值都必须独立于变量(但可以取决于其他参数!)。
我认为您在某些情况下尝试使用隐式乘积,例如model.q[j]R_2_j(model, j, -1)
。
如果您要获取的是产品,则需要明确编写:
model.q[j] * R_2_j(model, j, -1)
(请注意*
)
同一行中至少还有另一种情况。