Pyomo:努力使约束发挥作用

问题描述 投票:0回答:1

我正在尝试为电动汽车的调度建模,以最大程度地减少电费。当然,EV只能在每次插入充电站时进行充电(即在车辆行驶时无法充电)。基本上,它是一块固定电池,可以断开并重新连接。

我之前已经设法对固定的电池调度进行建模,并且可以按预期工作,但是我很难设置用于连接和断开电池的约束。

在某些时间段内插入了我正在使用的车辆的数据集,并且我正在使用像availDict = dict(enumerate(df[avail]))这样的字典,该字典在一天的不同时间包含值1 = plugged0 = not plugged。例如,假设在不开车时堵车,那么从早上7点到早上9点就不堵车,从早上9点到下午6点就堵车,因为开车不堵车,从早上6点到晚上8点就堵车了。车辆正在行驶,并且由于车辆未行驶而从晚上8点至早上7点被堵住。

此刻,我试图将约束建模为这样的布尔值:

model.avail_bool = en.Var(model.Time, within=en.Boolean, initialize=1)

model.not_avail_bool = en.Var(model.Time, within=en.Boolean)

我当时考虑使用BigM来强制模型限制车辆充电,但是我很难设置它。

[为进一步解释,这是我尝试在论文中找到的方程式:

SOCmin(t) <= SOC(t) <= SOCmax(t)

if avail = 0 (not plugged)

SOCmin(t) = SOCmax(t) = 0

if avail = 1 (plugged) but idle

SOCmin(t) = 0 and SOCmax(t) = SOC

if avail = 1 (plugged) and needed by time (t)

SOCmin(t) = SOCmax(t) = SOC

我希望我能正确解释我的问题,希望您能够理解我的意思。

如果有其他建议,或者您需要更多信息,请告诉我,以便我尽快提供。

python constraints pyomo
1个回答
0
投票

嗨,DVRJ,欢迎来到stackoverflow,>

这更多是关于问题的数学表达方式的问题,而不是Python / Pyomo问题,但我想我可以提供帮助。

首先,术语'avail_bool'和'not_avail_bool'不必是变量,因为您不确定它们的任何内容。相反,它们可以是参数,这些参数基本上指示EV是否能够在model.Time的特定时间步内进行充电/放电。

因此,我将定义单个布尔参数avail_bool,当插入EV时该参数等于1,否则插入0。为此,您可以通过已经拥有的availDict词典读取值。

然后,如果我们将计费变量称为Qch,则需要两个约束条件:

Qch <= BigM * avail_bool
Qch >= 0

这意味着当avail_bool为0时,Qch项将为0,这意味着无法为EV电池充电。 avail_bool为1时,Qch将采用优化问题所决定的值。

对于电池的放电变量,您也将需要类似的术语。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.