Я строю модель энергетического планирования в Pyomo, и у меня возникают проблемы с построением некоторых ограничений энергосистемы.
def grid2grid_rule(m, ts):
return m.power['grid','grid', ts] == 0
m.const_grid2grid = Constraint(ts_i, grid2grid_rule)
def import_rule(m, ts):
return m.gridImport[ts] == sum(m.power['grid',derIn,ts] for derIn in elIn)
m.const_import = Constraint(ts_i, rule = import_rule)
def export_rule(m, ts):
return m.gridExport[ts] == sum(m.power[derOut,'grid',ts] for derOut in elOut)
m.const_export = Constraint(ts_i, export_rule)
Определение мощности:
m.power = Var(elOut, elIn, ts_i, within = NonNegativeReals)
Объяснение кода: m.power - это переменная решения с 3-мя индексами: источник электроэнергии (elOut), «использование» электроэнергии ( elIn) и индекс текущего временного шага ts_i. elOut и elIn - это массивы numpy со строками, а ts_i - массив numpy с целыми числами от 0 до количества временных шагов.
Первое ограничение просто говорит, что на любом временном шаге электричество не может течь из сетка к сетке. Ограничение импорта говорит о том, что импорт в сеть на каждом временном шаге представляет собой сумму по всем потокам электроэнергии от сети к потребителям электроэнергии. Ограничение экспорта гласит, что экспорт сети на каждом временном шаге представляет собой сумму всех потоков мощности от «дающих» электроэнергии в сеть.
Теперь моя проблема в том, что когда я комментирую grid2grid и ограничение экспорта, он работает и набор ограничений построен, как ожидалось. Однако, например, когда я раскомментирую правило экспорта, которое почти идентично правилу импорта, я получаю эту ошибку:
m = build_model('Input_Questionaire.xlsx', 'DER_excel', yeardivision = "repr_day")
ERROR: Constructing component 'const_export_index_1' from data=None failed:
TypeError: Problem inserting gridExport[1] == power[pv_ground,grid,1] +
power[wind_s,grid,1] + power[battery,grid,1] + power[grid,grid,1] into set
const_export_index_1
Traceback (most recent call last):
File "C:\Users\Axel\Anaconda3\lib\site-packages\pyomo\core\base\sets.py", line 824, in add
if tmp in self:
File "C:\Users\Axel\Anaconda3\lib\site-packages\pyomo\core\base\sets.py", line 998, in __contains__
return self._set_contains(element)
File "C:\Users\Axel\Anaconda3\lib\site-packages\pyomo\core\base\sets.py", line 1302, in _set_contains
return element in self.value
TypeError: unhashable type: 'EqualityExpression'
Сопровождается этой ошибкой:
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
...
...
...
File "C:\Users\Axel\Anaconda3\lib\site-packages\pyomo\core\base\sets.py", line 833, in add
raise TypeError("Problem inserting "+str(tmp)+" into set "+self.name)
TypeError: Problem inserting gridExport[1] == power[pv_ground,grid,1] + power[wind_s,grid,1] + power[battery,grid,1] + power[grid,grid,1] into set const_export_index_1
Я делаю не знаю, как это исправить, тем более что в двух ограничениях принципиально нет разницы ... Большое спасибо за вашу помощь!
Axel