如何在GEKKO中使用自己的求解方法?

How to use your own solving method in GEKKO?

我想用我自己的遗传算法 (GA) 来解决混合整数问题:

https://mintoc.de/index.php/Batch_reactor

我可以将我的求解方法合并到 GEKKO 中吗?

类似...

m = GEKKO()
.
.
.

m.options.SOLVER = 'my_GA'

GEKKO 目前仅支持基于梯度的内置求解器。如果您打算使用遗传算法 (Chapter 6 for GA overview),则可以使用 GEKKO 运行 函数评估 returns 和 objective 在不同试验条件下的值。您需要在每个新一代 GA 的循环中放置一个 m.solve() 命令。在 GEKKO 中,您还需要使用 m.options.TIME_SHIFT=0 来不更新初始条件。这将允许在您更改设计变量(例如来自 MintOC 的 T(t))时重复评估以找到最佳 objective 函数值(例如来自 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 随软件的 public 版本分发。 public 版本中未包含其他解算器,需要商业许可。 IPOPT 通常最适用于具有大量自由度的问题或在没有很好的初始猜测的情况下开始的问题。 BPOPT 已被发现是系统生物学应用的最佳选择。当从先前的解决方案热启动或自由度数(变量数 - 方程数)小于 2000 时,APOPT 通常是最好的。APOPT 也是处理混合整数问题的唯一求解器。使用选项 0 比较所有可用的求解器。