我正在尝试完成长达一年的电池优化问题(8760 小时)。 “ind_1”和“ind_2”是长度为8760的列表,包含0/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:未找到解决方案”。此任务的目标是返回一个包含 8760 个值的数组(命令变量),从而最大化返回值。有什么想法这个错误来自哪里吗?
看起来其中一个方程不正确:
m.Equation(e_battery.dt() == e_battery + command)
这会导致 e_battery 呈指数增长,超过上限。大概应该是:
m.Equation(e_battery.dt() == command)
有一个特定的错误代码可以让您深入了解求解器未能找到解决方案的原因。最常见的两个是最大迭代次数和不可行解。如果是最大迭代次数,则尝试设置m.options.MAX_ITER
到更高的数字(最多 1000?)。如果它是不可行的解决方案,那么看看infeasibilities.txt
运行目录下的文件m.path
找到导致问题的约束。另一件要尝试的事情是最初使用较小的时间范围来验证它是否适用于大约 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
---------------------------------------------------
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)