Изменение ссылки на индекс для Set в Pyomo

Есть ли способ изменить индексирование Set с 1 на 0 в Pyomo? Очень сложно сохранить все прямо, когда вы имеете дело с несколькими объектами, где на Pyomo ссылается 1, а на все остальное из Python ссылается 0.

Причина в том, чтобы сгенерировать процедуру подгонки модели для нескольких схемных устройств. Вместо того, чтобы воссоздавать всю модель снова и снова, я хочу один раз определить ее с помощью AbstractModel. Затем я могу просто перезагрузить данные и разрешить их для каждого устройства.

В моей целевой функции я определяю промежуточные значения, используя понимание списка. После того, как эти промежуточные значения сгенерированы, на них теперь ссылаются 0. Пример того, что я делаю, приведен ниже. Как видите, мне нужно, чтобы некоторые параметры были объявлены с помощью [i], а другие - с помощью [i-1]. Когда функции становятся большими, становится сложно и сбивать с толку. Было бы намного больше смысла, если бы все было просто 0, чтобы это соответствовало стандартному коду Python. Я надеялся, что есть какой-то простой вариант или параметр, чтобы объявить, ссылается ли Set на 0 или 1.

y11intre = [1 / m.Ra[1] + 1 / m.Rb[1] for i in m.n] y11intim = [m.w[i] * (m.Ca[1] + m.Cb[1]) for i in m.n] y12intre = ... ... z11intre = [-y22intim[i-1] * ... for i in m.n] ... z11re = [m.Rae[1] + z11intre[i-1] for i in m.n] z11im = [m.w[i] * m.Lae[1] + z11intim[i-1] for i in m.n]


person Matt Braunstein    schedule 25.08.2019    source источник


Ответы (1)


Вы можете указать начальную и конечную точку для RangeSet, чтобы получить желаемые значения:

m.r = RangeSet(0,5) # [0,1,2,3,4,5]
m.s = RangeSet(0,4) # [0,1,2,3,4] 
person Bethany Nicholson    schedule 26.08.2019
comment
Спасибо за предложения. Этот подход действительно работает, если вы имеете дело с ConcreteModel. Но я пытаюсь создать AbstractModel, где длина этого набора не всегда может быть одинаковым значением. Мне нужно перебрать этот набор, чтобы сгенерировать мою целевую функцию. Когда я это делаю, я получаю сообщение об ошибке генерации AbstractModel. - person Matt Braunstein; 28.08.2019
comment
Не могли бы вы добавить более подробную информацию к вашему вопросу с помощью кода, который у вас не работает, и сообщения об ошибке, которое вы видите? Есть ли причина, по которой вы решили использовать AbstractModel вместо ConcreteModel? - person Bethany Nicholson; 28.08.2019