gpt4 book ai didi

python - Pyomo:最小化向量中的最大值

转载 作者:行者123 更新时间:2023-12-01 00:58:21 24 4
gpt4 key购买 nike

我正在优化电池存储与太阳能光伏相结合的行为,以产生尽可能高的收入流。我现在想再增加一种收入来源:调峰(或需求费用减少)

我的方法如下:

  • 除了每千瓦时的价格之外,工业客户还需要为其在一个时期内 (i=1:end) 从电网获取的最大电量 (kW) 付费,即所谓的需求费用
  • 该最大量可以通过向量 P_Grid = P_GridLoad(电网自消耗的能量)+ P_GridBatt(用于给电池充电的能量)来计算
  • 存在一个价格向量,它表示所有时间点的每千瓦价格
  • 我现在想要生成一个向量 P_GridMax,该向量在所有时间点都为零,但 P_Grid 出现最大值的那一刻(则它等于 max(P_Grid))。
  • 因此,向量 P_GridMax 由零和一个非零元素(不能更多!)组成
  • 这样做后,我现在可以将此向量与价格向量相乘,对所有时间点求和并收到计费的需求费用
  • 通过将此向量纳入模型的目标中,我可以最大限度地减少这些费用

现在,有人看到如何制定这样的约束(P_GridMax)的解决方案吗?我已经更新了目标函数并定义了 P_Grid。任何其他方法也将受到欢迎。

这是我的模型的相关部分,其中 P_xxx = 潮流向量,C_xxx = 价格向量,...

m.P_Grid = Var(m.i_TIME, within = NonNegativeReals)
m.P_GridMax = Var(m.i_TIME, within = NonNegativeReals)


# Minimize electricity bill
def Total_cost(m):
return ... + sum(m.P_GridMax[i] * m.C_PowerCosts[i] for i in m.i_TIME) - ...
m.Cost = Objective(rule=Total_cost)


## Peak Shaving constraints
def Grid_Def(m,i):
return m.P_Grid[i] = m.P_GridLoad[i] + m.P_GridBatt[i]
m.Bound_Grid = Constraint(m.i_TIME,rule=Grid_Def)

def Peak_Rule(m,i):
????
????
????
????
m.Bound_Peak = Constraint(m.i_TIME,rule=Peak_Rule)

提前非常感谢您!请注意,我对 python/pyomo 编码的经验很少,我非常感谢您提供广泛的解释:)

最好,马蒂亚斯

最佳答案

另一个想法是,您实际上不需要随时间索引 P_GridMax 变量。

如果您正在处理需求成本,它们往往会在一段时间内固定下来,或者在您的情况下,它们似乎在整个问题范围内固定(因为您只寻找一个最大值)。

在这种情况下,您只需要做:

m.P_GridMax = pyo.Var(domain=pyo.NonNegativeReals)

def Peak_Rule(m, i):
return m.P_GridMax >= m.P_Grid[i]

m.Bound_Peak = pyo.Constraint(m.i_TIME,rule=Peak_Rule)

如果您确实打算按元素相乘向量,您也可以创建一个表示索引乘积的新变量,并应用相同的原理来提取最大值。

关于python - Pyomo:最小化向量中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56043200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com