首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蓄电池容量的线性优化

蓄电池容量的线性优化
EN

Stack Overflow用户
提问于 2021-12-04 17:25:00
回答 1查看 220关注 0票数 1

目前,我正试图优化使用pyomo的电池存储。我以为一切都正常,但由于某种原因,仓库总是在一开始就卸货。这应该是不可能的,因为一开始仓库是空的.

代码语言:javascript
复制
def discharge_capacity_rule(model, t):
    return model.discharge[t] <= in_out_leistung
model.discharge_capacity_rule = Constraint(model.t, rule = discharge_capacity_rule)
def charge_capacity_rule(model, t):
    return model.charge[t] <= in_out_leistung
model.charge_capacity_rule = Constraint(model.t, rule = charge_capacity_rule)

def max_capacity_rule(model, t):
    return model.soe[t] <= battery_capacity
model.max_capacity_rule = Constraint(model.t, rule = max_capacity_rule)

def soe_start_rule(model, t):
    return model.soe[0] == soe_start 
model.soe_start_rule = Constraint(rule = soe_start_rule)
def soe_end_rule(model, t):
    return model.soe[n] == model.soe[0]
model.soe_end_rule = Constraint(rule = soe_end_rule)

def soe_rule(model, t):
    if t == 0:
        return model.soe[t] == soe_start
    else:
        return model.soe[t] == model.soe[t-1] + (model.charge[t] * in_out_efficiency) - (model.discharge[t] / in_out_efficiency)
model.soe_rule = Constraint(model.t, rule = soe_rule)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-04 20:32:42

这是贝斯优化中的一个常见问题。你只是为了功率而约束model.discharge[t] (也就是说,任何放电都不能超过BESS的名义功率输出),但是对于超出可用能量的放电并没有明确的限制。model.soe计算是避免超出可用存储能量的一种常见方法,但在初始时间步骤中,您只是避免计算BESS的电荷状态并使用return model.soe[t] == soe_start设置初始值,因此,在这一时间步骤中,放电不受model.soe_rule约束,因为下面的约束适用于所有的时间步骤,但适用于初始的一步。

代码语言:javascript
复制
model.soe[t] == model.soe[t-1] + (model.charge[t] * in_out_efficiency) - (model.discharge[t] / in_out_efficiency)

您可以尝试一些方法:

  1. Constraint放电到可用存储能量:

您可以限制model.discharge[t]小于或等于任何time.step的可用存储能量。这相当于SOE计算,因为model.soe不能小于零,但是这个but在初始时间步骤中也适用。约束是这样的:

def discharge_leq_soe(model,t):model.discharget <= model.soet model.discharge_leq_soe =model.discharget

  1. Fix初始电荷:

正如您评论的那样,您只需说在初始时间步骤中,在不允许的情况下释放,这将在初始时间步骤中将model.discharge设置为零:

pyo.Constraint(expr=model.dischargemodel.t.first()==0) = model.initial_discharge_fixed

  1. Not固定初始soe:

你也不能修正初始的电荷状态,但是要计算它。在本文中,model.chargemodel.discharge是不固定的,model.soe[0]是根据结果计算出来的。这可以为您提供一些关于改进de BESS调度所需的初始SOE的一些见解。在这种方法中,只需将soe_rule更改为:

def soe_rule( ==,t):如果t == 0:返回model.soet == (model.charget * in_out_efficiency) - (model.discharget / in_out_efficiency) - (model.discharget / in_out_efficiency)其他:返回model.soet ==model.model 1+ (model.charget * in_out_efficiency) -(model.discharget/in_out_efficiency) model.soe_rule =约束(model.t,rule = soe_rule )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70227889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档