'generator'对象没有属性'is_expression_type'



我正在使用pyomo来建模问题,并且在使用块中的数据构建约束时遇到一些困难。我已经把代码块准备好了,完全调试好了。当我作为约束的一部分去访问它的一些数据时,我收到一个错误,说'generator' object has no attribute 'is_expression_type'

我设置的块是:

def block_variables(block, j):
demand_data = data['demand_data']
supply_data = data['supply_data']
I = block.model().I
J = block.model().J
G = block.model().G
model.quantity_demanded = pe.Param(J, initialize = demand_data["quantity_demanded"])
block.shipping_cost = pe.Param(J, initialize = demand_data["shipping_cost"])
block.max_supply = pe.Param(I, initialize = supply_data['max_supply'])
block.x = pe.Var(I, domain = pe.NonNegativeIntegers)
block.per_unit_costs = pe.Param(I, initialize = supply_data["per_unit_cost"])
block.fixed_costs = pe.Param(I, initialize = supply_data["fixed_cost"])
block.variable_costs = sum(block.per_unit_costs[i][g] * block.x[i] for g in G for i in I)

所讨论的行如下:

def constraint_maximum_supply(model, i):
return sum(model.block_variables.x[i]) 
<= (model.block_variables[i].max_supply[j] * model.decision[i] for j in model.J)
model.constraint_maximum_supply = pe.Constraint(model.I, rule = constraint_maximum_supply)

我看过UT Austin INFORMS关于这个主题的视频几次,并且在他的约束下,他似乎已经通过j或model.block_variables[j].x[i] for j in model.J索引了块。当我开始尝试这个时,我收到了错误"Cannot treat the scalar component 'block_variables' as an indexed component.",我注意到我们构建块的方式存在一些差异,但我不太明白这将如何导致此错误。

如能提供任何帮助,我将不胜感激。也非常感谢您花时间来阅读。

你的"问题行">

(model.block_variables[i].max_supply[j] * model.decision[i] for j in model.J)

你在这个周围有一个括号,它变成了一个生成器,里面有for循环,但是你在这个前面没有sum。这是你想要的吗?像这样

... sum(model.block_variables[i].max_supply[j] * model.decision[i] for j in model.J)

pyomo告诉你"生成器"不能被解释为合法的pyomo表达式。

相关内容

最新更新