Pyomo: инициализировать переменную двумя индексами - PullRequest
0 голосов
/ 09 июля 2020

Я ищу способ инициализировать переменную в pyomo с двумя индексами. Моя первая идея заключалась в использовании вложенного словаря, который имеет первый индекс на верхнем уровне словаря и второй индекс на нижнем уровне словаря.

Используя этот подход, я получаю следующую ошибку:

ОШИБКА: создание компонента 'p_norm_generator' из data = None не удалось: KeyError: «Индекс 'PV' недействителен для индексированного компонента 'p_norm_generator'»

Есть ли у кого-нибудь идеи, как правильно реализовать инициализация?

Код выглядит следующим образом:

#Electricity generation
p_nom_dict['PV'] = p_nom_pv_dict
p_nom_dict['Onshore'] = p_nom_wind_onshore_dict

generators = ['PV', 'Onshore']
model.GENERATOR = generators
model.p_norm_generator = Param(model.GENERATOR, model.TIME, initialize=p_nom_dict)

1 Ответ

0 голосов
/ 09 июля 2020

Источник данных для вещей с несколькими индексами должен быть проиндексирован кортежами с соответствующими индексами в них. Итак, в приведенном выше случае ваш исходный словарь должен иметь кортежи (model.GENERATOR, model.TIME) в качестве ключей.

Вот игрушечный пример:

from pyomo.environ import *

sources = ['sun', 'wind', 'voodoo']
time_periods = list(range(4))

data = {    ('sun', 2):     24,
            ('wind', 3):    60,
            ('voodoo', 1):  12}

m = ConcreteModel()
# sets
m.sources = Set(initialize=sources)
m.time = Set(initialize=time_periods)

# param
m.energy = Param(m.sources, m.time, initialize=data)

# check it....
m.pprint()

дает:

3 Set Declarations
    energy_index : Dim=0, Dimen=2, Size=12, Domain=None, Ordered=False, Bounds=None
        Virtual
    sources : Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=None
        ['sun', 'voodoo', 'wind']
    time : Dim=0, Dimen=1, Size=4, Domain=None, Ordered=False, Bounds=(0, 3)
        [0, 1, 2, 3]

1 Param Declarations
    energy : Size=3, Index=energy_index, Domain=Any, Default=None, Mutable=False
        Key           : Value
           ('sun', 2) :    24
        ('voodoo', 1) :    12
          ('wind', 3) :    60

4 Declarations: sources time energy_index energy*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...