【问题标题】:KeyError: "Index '(None, 0)' is not valid for indexed component 'sigma'"KeyError: \"Index \'(None, 0)\' is not valid for indexed component \'sigma\'\"
【发布时间】:2023-02-23 01:52:21
【问题描述】:

我正在与 pyomo 合作,我对它真的很陌生。我一直在尝试解决一个小问题,但我不断收到此错误,尽管我遵循了在这里发现的大量更正和建议,但仍然无法正常工作,有人知道此错误的含义吗:KeyError: "Index '(None, 0)' 对索引组件 'sigma' 无效”?西格玛是我的变量。我检查了看起来像我的可用问题,但没有解决任何问题

我将把代码和错误放在下面, 谢谢

波纹管是我当前的代码:

from pyomo.environ import *
import numpy as np
model = ConcreteModel()

def flatten(l):
    return [item for sublist in l for item in sublist]

matrix = numpy.array(matrixnw)

liste=flatten(myd.values())

def W_init(model, i, j):
    return matrix [i,j]
def W_init1D(model, i):
    return liste [i]

model.i = Set(initialize=range(0,3), doc='paths')
model.j = Set(initialize=range(0,15), doc='subflows')

model.capa = Param(model.i,  initialize=W_init1D)
model.routing = Param(model.i, model.j,  initialize=W_init)

model.sigma = Var(model.i, model.j, within= NonNegativeReals)


def limite(model, i):
    return sum(model.sigma[i,j]*model.routing[i,j]  for j in model.j) <= model.capa[i]
model.limite = Constraint(model.i, rule=limite)

错误图片:

我期待模型接受约束,因为我对目标函数使用相同的编写方式(定义一个函数然后在目标函数中调用它)并且它没有显示任何错误

【问题讨论】:

    标签: indexing model pyomo concrete


    【解决方案1】:

    首先,一般来说,剪切和粘贴实际代码是标准的,而不是图像。理想情况下,您的“错误”应该可以由可以通过将您的代码剪切/粘贴到他们的 IDE 并运行它来帮助您的人重现。

    那说...

    您正在使用我所谓的“规则-函数组合”来进行约束,但是在调用函数时您没有提供索引 I。

    尝试这个:

    model.limite = Constraint(model.i, rule=limite)
    

    【讨论】:

    • 感谢您的回复,对于发布请求的标准,我是新来的,所以帮助很大。至于你的提议,我试过了,但我得到了另一个错误,这里是:ValueError: Constraint 'limite[0]' does not have a proper value.发现“真”需要元组或关系表达式。示例:sum(model.costs) == model.income (0, model.price[item], 50)
    • 确实没有足够的信息来帮助解决这个问题,但如果我不得不猜测,你在routing[i,j] 中有一个零,所以当你在表达式中乘以零时,就没有变量了。
    猜你喜欢
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    • 2018-05-24
    • 2023-03-16
    相关资源
    最近更新 更多