我一直在try 学习如何使用Gekko,目前正在try 根据输入/输出价格建立最佳电池充电/放电模型(灵感来自here和here).
下面是我的代码.
from gekko import Gekko
import numpy as np
m = Gekko()
electricity_price_in = np.random.uniform(low=0.1, high=1, size=50)
electrictiy_price_out = np.random.uniform(low=0.3, high=3, size=50)
E_battery = m.Var(lb=0, ub=366.2, value=0) #energy in battery at time t, battery size 366 MWh
Pc = m.Var(lb=0, ub=50) #charge power, 50 MW max
Pd = m.Var(lb=0, ub=36.6) #discharge power, max 36 MW
E_price_in = m.Param(electricity_price_in)
E_price_out = m.Param(electrictiy_price_out)
m.time = np.linspace(0,49, 50)
Revenue = m.Intermediate(Pd*E_price_out)
Cost = m.Intermediate(Pc*E_price_in)
m.Equation(E_battery.dt() == Pc-Pd)
m.Equation(E_battery >= 0)
m.Maximize(Revenue - Cost)
m.options.IMODE = 6
m.solve()
这似乎工作正常.但是,如果包含以下代码,我会得到非常不同的结果:
isCharging = m.if3(-Pc,1,0)
isDischarging = m.if3(-Pd,1,0)
我正在做的是创建两个变量.由于它们不是约束方程,也不包含在目标函数中,我原本希望包含这些不会对我的结果产生任何更改,但是我的代码给出了非常不同的结果(所有变量都变成了一个零列表).
为什么添加这两个变量会改变我的结果?