我正在尝试为电动汽车的调度建模,以最大程度地减少电费。当然,EV只能在每次插入充电站时进行充电(即在车辆行驶时无法充电)。基本上,它是一块固定电池,可以断开并重新连接。
我之前已经设法对固定的电池调度进行建模,并且可以按预期工作,但是我很难设置用于连接和断开电池的约束。
在某些时间段内插入了我正在使用的车辆的数据集,并且我正在使用像availDict = dict(enumerate(df[avail]))
这样的字典,该字典在一天的不同时间包含值1 = plugged
和0 = 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
我希望我能正确解释我的问题,希望您能够理解我的意思。
如果有其他建议,或者您需要更多信息,请告诉我,以便我尽快提供。
嗨,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
将采用优化问题所决定的值。
对于电池的放电变量,您也将需要类似的术语。
希望这有帮助!