繁体   English   中英

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

[英]'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM