我想使用自己的遗传算法(GA)解决混合整数问题:
https://mintoc.de/index.php/Batch_reactor
我可以将我的求解方法纳入GEKKO吗?
类似...
m = GEKKO()
.
.
.
m.options.SOLVER = 'my_GA'
答案 0 :(得分:1)
GEKKO当前仅支持基于梯度的内置求解器。如果您设置使用遗传算法(Chapter 6 for GA overview),则可以使用GEKKO运行功能评估,以在不同的试验条件下返回目标值。您需要在每代新一代GA中将m.solve()
命令放入循环内。在GEKKO中,您还需要使用m.options.TIME_SHIFT=0
来不更新初始条件。这样,当您更改设计变量(例如MintOC中的T(t))以找到最佳目标函数值(例如MintOC中的x2(tf))时,就可以进行重复评估。
m = GEKKO()
# define model
x2 = m.Var()
T = m.Param()
.
.
.
m.options.TIME_SHIFT=0
m.options.IMODE = 4 # or 7
# GA loop
for i in range(generations):
T.value = [values from GA]
m.solve()
obj = x2.value[-1] # objective
# additional GA steps to decide new T values
Here is some additional information from the documentation:SOLVER选择要使用的求解器来查找解决方案。有免费的求解器:1:APOPT,2:BPOPT,3:IPOPT随软件的公共版本一起分发。公开版本未包含其他求解器,需要商业许可。 IPOPT通常最适合自由度较高的问题,或者在没有良好初始猜测的情况下启动。已经发现BPOPT是最适合系统生物学应用的。从先前的解决方案开始热启动或自由度(变量数-方程数)小于2000时,APOPT通常是最好的。APOPT也是唯一处理混合整数问题的求解器。使用选项0比较所有可用的求解器。