我已经努力解决了这个问题,这在GAMS文件中是一个简单的解决方案,但我不能用PYOMO来做。
我的问题是,我希望将生产限制作为日常生产的限制,作为某一代人的约束。
生成变化,每小时设定8760次,每天这一代的总和应低于一定限度。
在GAMS中,我可以使用以下代码轻松解决它;
set t hours in a year /1*8760/ ;
set d day /1*365/;
parameter day(t) ;
day(t)$(ord(t) <= 24)=1;
day(t)$(ord(t)>24 and mod(ord(t),24) ne 0)=round(ord(t)/24-mod(ord(t),24)/24)+1;
day(t)$(ord(t)>24 and mod(ord(t),24) eq 0)= ord(t)/24;
hydro_day(d)..sum(t$(day(t)=ord(d)),hydro_el(t))=l=6*spec('Hydro', 'cap');
在Pyomo中,我尝试过如下但现在不起作用
def dcap_rule(model) :
dailyLimit = {}
for k in range(365) :
dailyLimit[k] = sum(model.discharge[i] for i in sequence((24*(k-1)+1), 24*k))
return dailyLimit[k]<= model.capa['pumped']*5
model.dcap_limit = Constraint( rule=dcap_rule)
此代码仅适用于第一天(1-24小时),然后在第一天之后,似乎没有约束。
你能帮我解决这个问题吗?
提前致谢
答案 0 :(得分:1)
您正在声明标量约束,因此只生成一个约束。您想要更改代码以生成索引约束:
def dcap_rule(model, k):
return sum(model.discharge[i] for i in sequence((24*(k-1)+1), 24*k)) \
<= model.capa['pumped']*5
model.dcap_limit = Constraint(range(365), rule=dcap_rule)