【问题标题】:Index is not valid for indexed component. Parameter with double indexing in pyomo索引对索引组件无效。 pyomo中具有双索引的参数
【发布时间】:2021-12-22 01:25:03
【问题描述】:

我正在尝试通过以下方式创建具有双索引的参数Wind_DA

import pandas as pd
import pyomo.environ as pe
import pyomo.opt as po

#DATA
T=3;
W=1;

time = ['t{0}'.format(t+1) for t in range(T)]
wind=['W{0}'.format(w+1) for w in range(W)]

Wind_DA={}
Wind_DA['w1', 't1']=200
Wind_DA['w1', 't2']=200
Wind_DA['w1', 't3']=200

#MODEL
seq=pe.ConcreteModel()

### SETS
seq.W = pe.Set(initialize = wind)
seq.T =pe.Set(initialize = time)

### PARAMETERS

seq.Wind_DA = pe.Param(seq.W, seq.T, initialize = Wind_DA)

我收到以下错误:

KeyError:“索引 '('w1', 't1')' 对索引组件 'Wind_DA' 无效”。

但是,当我在控制台上输入Wind_DA[('w1', 't1')] 时,我得到了200,这意味着这本词典具有该索引。可能是什么问题呢?提前谢谢!

【问题讨论】:

    标签: python pyomo


    【解决方案1】:

    只是打字错误。

    使用wind=['W{0}'.format(w+1) for w in range(W)]创建风阵时 您使用的是大写 W,但在创建参数 Wind_DA = {}... 时,您使用的是较低的 W

    只需将wind=['W{0}'.format(w+1) for w in range(W)] 更改为小写w 即可正常工作。 wind=['w{0}'.format(w+1) for w in range(W)]

    import pandas as pd
    import pyomo.environ as pe
    import pyomo.opt as po
    
    #DATA
    T=3
    W=1
    
    time = ['t{0}'.format(t+1) for t in range(T)]
    wind=['w{0}'.format(w+1) for w in range(W)]
    
    Wind_DA={}
    Wind_DA['w1', 't1']=200
    Wind_DA['w1', 't2']=200
    Wind_DA['w1', 't3']=200
    
    #MODEL
    seq=pe.ConcreteModel()
    
    ### SETS
    seq.W = pe.Set(initialize = wind)
    seq.T =pe.Set(initialize = time)
    
    ### PARAMETERS
    seq.Wind_DA = pe.Param(seq.W, seq.T, initialize = Wind_DA)
    

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 2018-12-31
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多