gpt4 book ai didi

Pyomo 无法在构造之前迭代抽象 Set

转载 作者:行者123 更新时间:2023-12-04 01:16:05 25 4
gpt4 key购买 nike

我在 Pyomo 中构建了一个抽象模型,效果很好。
但是,当我尝试使用字典来实例化抽象模型时,出现以下错误“错误:为目标值生成表达式时规则失败:
RuntimeError:无法在抽象集“I”之前迭代
构造(初始化)。”
具体来说,问题如下:

    from pyomo.environ import *

model = AbstractModel()
model.D = Set()
model.I = Set()
model.w = Param(model.D)
model.S_0 = Param(model.D)
model.x = Var(real_model.I, model.D)

def sum_cubic(m):
return sum(w[j]*(m.x[i][j]-m.S_0[j])**3 for i in model.I for j in model.D)

model.value = Objective(rule = sum_cubic, sense = maximize)
model.pprint()
上面的代码运行得很好。但是当我在它后面添加以下代码时会出现错误,其中名称和 S_0 是预定义的字典:
    data = {None:{
'D':{None: names},
'I':{None: list(range(1,4))},
'w':[0.3,0.3,0.4],
'S_0':S_0,
}
}
real_model = model.create_instance(data)
错误:为目标值生成表达式时规则失败:
RuntimeError:无法在抽象集“I”之前迭代
构造(初始化)。
错误:从 data=None 构建组件“value”失败:
RuntimeError:无法在抽象集“I”之前迭代
构造(初始化)。
有人可以帮我吗?谢谢。

最佳答案

你有几件事情让你在这里...

  • 你在混m.model.在您的函数中,您应该使用 m.因为那是函数签名的自引用参数
  • 您正在索引 m.x不正确。它应该是元组索引的(见我的)
  • 您的数据字典没有为参数设置正确。 (见我的)

  • 祝你好运!
    from pyomo.environ import *

    model = AbstractModel()
    model.D = Set()
    model.I = Set()
    model.w = Param(model.D)
    model.S_0 = Param(model.D)
    model.x = Var(model.I, model.D)

    def sum_cubic(m):
    return sum(m.w[j]*(m.x[i, j]-m.S_0[j])**3 for i in m.I for j in m.D)

    model.value = Objective(rule = sum_cubic, sense = maximize)
    model.pprint()

    names=['a', 'b', 'c']
    data = { None:{
    'D': {None: names},
    'I': {None: [1, 2, 3]},
    'w': {'a': 0.4, 'b': 0.3, 'c': 0.2},
    'S_0': {'a': 1.0, 'b': 2.0, 'c': 3.0} }
    }

    real_model = model.create_instance(data)

    关于Pyomo 无法在构造之前迭代抽象 Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63337872/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com