“ SumExpression”对象不可迭代

时间:2019-07-01 21:42:01

标签: python-3.x pyomo

我正在尝试在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)

1 个答案:

答案 0 :(得分:1)

  1. 如果我了解您要执行的操作,则您尝试根据nt中某些变量的值来创建一个集合(R_2_j)。 这不是一个有效的公式,所有集合和参数值都必须独立于变量(但可以取决于其他参数!)。

  2. 我认为您在某些情况下尝试使用隐式乘积,例如model.q[j]R_2_j(model, j, -1)。 如果您要获取的是产品,则需要明确编写:

    model.q[j] * R_2_j(model, j, -1)
    

    (请注意*

    同一行中至少还有另一种情况。