我试图模拟一个带有充电和放电约束的电池调度模型。BESS通过太阳能光伏系统充电。当我当前运行模型时,有一些时间段BESS同时充电和放电。如何添加标志,以便在充电时>;,放电=0,反之亦然
def market_constraintx0(model, t):
return (model.Charge[t] <= df.loc[t,'PVGeneration']*stripeff)
model.market_rulex0 = Constraint(model.T, rule=market_constraintx0)
def market_constraintx1(model, t):
return (model.Charge[t] + model.RegDown[t] <= model.ChargeMax)
model.market_rulex1 = Constraint(model.T, rule=market_constraintx1)
def market_constraintx2(model, t):
return ( model.Discharge[t] + model.RegUp[t] <= model.DischargeMax)
model.market_rulex2 = Constraint(model.T, rule=market_constraintx2)
def charge_soc(model, t):
return model.RegUp[t] + model.Discharge[t] <= model.SoC[t] * stripeff ###Battery discharge and regup capacity is limited by SOC
model.charge_soc = Constraint(model.T, rule=charge_soc)
def discharge_soc(model, t):
return model.RegDown[t] + model.Charge[t] <= (model.SoCmax - model.SoC[t])/stripeff ### Battery can be charged by the amount of capacity left to charge.
model.discharge_soc = Constraint(model.T, rule=discharge_soc)
约束
有时被称为互补条件。它也可以写成:
(我假设x和y是非负变量)。有不同的方法可以解决这个问题:
您可能需要查看pyomo.mpec。有关更多信息,请参见link
如果您想坚持使用(混合整数)线性公式,还可以查找指示符约束,这通常在in this question中讨论。一些解算器,如CPLEX和Gurobi,似乎对指示符约束有特定的约束类型,但我不熟悉如何在Pyomo中使用这些约束
通常,您可以通过使用“大M”公式获得类似的功能。在您的情况下,类似于:
正如我在相关问题中所讨论的,选择
model.M
的正确值对于保持模型公式的“严密性”非常重要,在您的情况下,您可能会将其直接与BES的额定功率联系起来相关问题 更多 >
编程相关推荐