'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 video,并且在他的约束下,他似乎已将块索引为 j,或 model.block_variables[j].x[i] for j in model.J 当我开始尝试此操作时,我收到错误 { {1}} 我确实注意到我们构建块的方式存在一些差异,但我不太明白这将如何导致此错误。

如果能提供任何帮助,我们将不胜感激。非常感谢您抽出时间阅读。

xu414816349 回答:'generator' 对象没有属性 'is_expression_type'

你的“问题线”的这一部分是问题...

(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 表达式。

本文链接:https://www.f2er.com/14504.html

大家都在问