【发布时间】:2022-01-21 18:27:52
【问题描述】:
因此,我目前正在尝试优化家庭的能源成本。优化基于我试图最小化的成本因子函数。
model = ConcreteModel()
model.t = RangeSet(0, 8759)
def costs(model, t):
return sum(model.cost_factor[t] * model.elec_grid[t] for t in model.t)
model.costs = Objective(rule = costs, sense = minimize)
由于光伏生产过剩是我试图通过使用这些功能来否定的事情:
model.elec_consumption = Param(model.t, initialize = df['Consumption'])
model.pv = Param(model.t, initialize = df['PV'])
model.excess_pv = Var(model.t, within = NonNegativeReals, initialize = 0)
model.demand = Var(model.t, initialize = 0, within = NonNegativeReals)
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)
def lastdeckung(model, t):
return (model.pv[t] - model.excess_pv[t]) + model.elec_grid[t] == model.demand[t]
model.lastdeckung = Constraint(model.t, rule = lastdeckung)
问题是当成本因子为负时,优化器将 model.excess_pv 设置得非常高,因此他可以提高 model.elec_grid 变量以最小化成本因子。 这显然不是本意,但到目前为止我还没有找到更好的方法来计算多余的 pv。从技术上讲,一个简单的解决方法是只拥有一个持续积极的成本因素,但遗憾的是这不是一个选择。
如果有人知道如何解决这个问题,我将不胜感激。
基础是我想最大限度地利用光伏电力以降低成本。在某些情况下,系统中会出现 mooch pv,因此为了使优化仍然有效,我需要摆脱多余的部分。
return model.demand[t] == model.elec_consumption[t]
model.demand_rule = Constraint(model.t, rule = demand_rule)
这就是需求。从技术上讲,还有更多功能,但与解决问题无关。主要问题是由于成本因素有时为负,此功能不起作用
model.excess_pv[t] >= model.pv[t] - model.demand[t]
Excess_pv 和 model.demand 是变量,而 model.pv 是参数。
因此,就我的问题搜索而言,我需要更改我的生产过剩函数,使其使用来自 pv - excess_pv 的值,如果值 > 0 并且值应该是
【问题讨论】:
-
我不明白为什么光伏生产过剩是优化器的约束,而不仅仅是成本因素。为了清楚起见,您能写出您要解决的线性规划问题吗?
-
那是因为我不想通过将光伏过剩生产注入电网来获得额外收入。这些函数的存在是为了防止在产生过多光伏能量时优化崩溃。
-
您能否添加一个最小可重现的示例?我有一个想法要解决,但需要先检查一下。问题是您的生产过剩是
Var并且是上限无限的。当减法为 NonNegative 时,您需要将Var更改为正好是pv[t]和demand[t]的减法。对于负值,它只是零。我认为您可以使用pyomo.Expression.Piecewise来实现这一目标。 -
我之前尝试过这种方法,只是说变量应该在 NonNegative 之内,但这只是让我没有最初的可行解决方案。我将阅读 pyomo 中的分段函数并尝试一下。
标签: python linear-programming pyomo