我正在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)Power的定义:
m.power = Var(elOut, elIn, ts_i, within = NonNegativeReals)解释代码: m.power是一个有3个索引的决策变量:电源( elOut ),用电量( elIn )和当前时间步索引ts_i。elOut和elIn是带有字符串的numpy数组,ts_i是一个从0到多少个时间步的numpy数组。
第一个约束条件只是说,在任何时间步,电力都不能从电网流向电网。进口约束规定,每个时间步的电网进口是从电网到电力接受者的所有电力流量的总和。出口约束规定,每个时间步的电网出口是从电力“供给者”到电网的所有功率流的总和。
现在,我的问题是,当我注释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
发布于 2020-06-17 23:52:51
呃..。我刚看到了。这是一个简单的问题。:)
您省略了约束结构中的"rule=“部分,因此它是作为一个集合或某种奇怪的东西传入函数的。
不管怎么说。更改:
m.const_export = Constraint(ts_i, export_rule)至:
m.const_export = Constraint(ts_i, rule=export_rule)您的grid2grid也是如此
https://stackoverflow.com/questions/62432333
复制相似问题