线性优化中的光伏生产过剩

PV overproduction in a linear optimization

我目前正在尝试优化电池存储。 对于光伏电力生产过剩的情况,我试图提出一个生产过剩的约束条件。

我第一次尝试了这个版本,但它不起作用:

def pv_overproduction(model, t):
    if model.demand[t] <= model.pv[t]:
        return model.excess_pv[t] == model.pv[t] - model.demand[t]
    else:
        model.excess_pv[t] == 0
model.pv_overproduction = Constraint(model.t, rule = pv_overproduction)

据我所知,这个不起作用,因为我不能在 if 语句中使用变量。但是我没有办法解决这个问题。

这是负载覆盖功能,为了减少光伏电力输入:

def load_coverage(model, t):
    return (model.pv[t] - model.excess_pv[t]) + model.elec_grid[t] + model.discharge[t] == model.demand[t]
model.load_coverage = Constraint(model.t, rule = load_coverage)

这是我的第二次尝试,遗憾的是也没有成功。

def pv_overproduction(model, t):
    return model.excess_pv[t] == model.pv[t] - model.demand[t]
model.pv_overproduction = Constraint(model.t, rule = pv_overproduction)

我的第二次尝试成功了,因为 model.excess_pv[t] 大多数时候都是负数,这通常是有道理的。但我也不需要负值,因为这显然意味着没有生产过剩...

如能解决上述问题,我们将不胜感激。

我认为您的第一次尝试非常接近。如果正确使用不等式约束,则不需要 if 语句...

捕获超额的约束:

excess >= supply - demand

只捕获非负数的多余部分:

excess >= 0   (or alternatively set the domain to non-negative reals, which is equivalent)

假设你的问题是最小化

,在你的 objective 中加入一个小的(或大的)惩罚
obj = ... + penalty * excess

插入几个测试值以确保您相信它! :)