(POMOMO)我想在pyomo约束中设置限制日常生产的约束

时间:2017-12-15 08:39:08

标签: pyomo

我已经努力解决了这个问题,这在GAMS文件中是一个简单的解决方案,但我不能用PYOMO来做。

我的问题是,我希望将生产限制作为日常生产的限制,作为某一代人的约束。

生成变化,每小时设定8760次,每天这一代的总和应低于一定限度。

在GAMS中,我可以使用以下代码轻松解决它;

set t hours in a year /1*8760/ ;   
set d day /1*365/;

我将参数day(t)用于分割一年中的小时数

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;

与集合和参数日(t)我可以将以下等式作为约束

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小时),然后在第一天之后,似乎没有约束。

你能帮我解决这个问题吗?

提前致谢

1 个答案:

答案 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)