![](/img/trans.png)
[英]AttributeError: 'list' object has no attribute 'is_expression_type', What does this mean in pyomo?
[英]'generator' object has no attribute '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
表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.