使用Gekko进行优化时返回"@Error:找不到解决方案"



我正试图完成一个长达一年的电池优化问题(8760小时("ind_ 1";以及";ind_ 2";是长度为8760的列表,包含0s/1。一年中的某些小时可能会获得额外收入,因此这些指标列表用于区分这些小时(在最大化函数中进一步使用(。

m = Gekko(remote=False)
#variables
e_battery = m.Var(lb=0, ub=4000, value=2000) #energy in battery at time t, battery size 4 MWh, initial value is 2MWh
command = m.Var(lb=-1000, ub=1000) #command power -1 to 1 (in MW)
e_price = m.Param(value = price) #price is a list of 8760 values
ind_1 = m.Param(value = ind_1) 
ind_2 = m.Param(value = ind_2)
m.time = np.linspace(0,8759, 8760)
m.Equation(e_battery.dt() == e_battery + command)
m.Maximize((-command)*(e_price + ind_1*ind1_price + ind_2*ind2_price))
m.options.IMODE = 6
m.solve()

当我运行上面的模型时,它运行大约20次迭代,然后返回错误:"@error:Solution Not Found";。此任务的目标是返回8760个值(命令变量(的数组,使返回最大化。你知道这个错误是从哪里来的吗?

看起来其中一个方程不正确:

m.Equation(e_battery.dt() == e_battery + command)

这会导致e_battery呈指数级增长,超过上限。可能应该是:

m.Equation(e_battery.dt() == command)

有一个特定的错误代码,可以深入了解求解器未能找到解决方案的原因。最常见的两种是最大迭代次数和不可行解。如果是"最大迭代次数",则尝试将m.options.MAX_ITER设置为更高的数字(最多1000?(。如果是不可行的解决方案,则查看运行目录m.path中的infeasibilities.txt文件,以查找导致问题的约束。另一件要尝试的事情是,最初使用较小的时间范围来验证它在大约100个时间步长的情况下是否有效。

from gekko import Gekko
import numpy as np
m = Gekko(remote=False)
#variables
n = 100
price=np.ones(n)
e_battery = m.Var(lb=0, ub=4000, value=2000) #energy in battery at time t
# battery size 4 MWh, initial value is 2MWh
command = m.Var(lb=-1000, ub=1000) #command power -1 to 1 (in MW)
e_price = m.Param(value = price) #price is a list of 8760 values
ind_1=1; ind_2=1
ind1_price=1; ind2_price=1
ind_1 = m.Param(value = ind_1) 
ind_2 = m.Param(value = ind_2)
m.time = np.linspace(0,n-1,n)
m.Equation(e_battery.dt() == command)
m.Maximize((-command)*(e_price + ind_1*ind1_price + ind_2*ind2_price))
m.options.IMODE = 6
m.solve()

这提供了一个成功的解决方案:

EXIT: Optimal Solution Found.
The solution was found.
The final value of the objective function is  -6000.00005999999

---------------------------------------------------
Solver         :  IPOPT (v3.12)
Solution time  :  0.05 sec
Objective      :  -6000.00005999999
Successful solution
---------------------------------------------------

最新更新