我使用GEKKO是为了适合的目的。在探索GEKKO的过程中,我发现如果我使用:
model = GEKKO(remote=False)
不是
model = GEKKO()
它工作得快多了:)
但是在这种情况下我不能使用IPOPT求解器?我提供了一个带有选项
的GEKKOmodel.options.SOLVER = 3
然后我在解决方案中得到了消息:
solver 3 not supported
using default solver: APOPT
----------------------------------------------
Model Parameter Estimation with APOPT Solver
----------------------------------------------
在日志的底部写着:
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 0.736799999998766 sec
Objective : 0.148853103506686
Successful solution
---------------------------------------------------
那么在这种模式下使用什么求解器呢?
注:如果我使用
model = GEKKO()
对于相同的数据,我有另一个解决方案和关于使用时间的消息:
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 37.1334000000061 sec
Objective : 0.147929143743533
Successful solution
---------------------------------------------------
我使用model = GEKKO()
得到的解决方案要好得多,但它很耗时。那么这两种情况之间的区别是什么,是否有任何信息可以用于更好的参数调优?
例如,我准备给APOPT同样的时间来找到解决方案,但我不知道如何调整它。
P.P.S.这个函数是非凸的,我知道在可观察的区域有很多局部最小值,所以提供了大量的迭代,例如10000次迭代(我不知道这是不是一个很大的数字-为了我的目的,它需要很多时间)。
本地求解器选项受许可或可执行文件大小的限制。在Linux/MacOS上,包括本地解决方案的IPOPT将库分发大小增加到50 MB以上。IPOPT在Windows上是本地可用的,因为基于库静态链接的方式,它只增加了大约3 MB。下面是来自Readme的附加信息。Gekko的bin文件夹中的md文件。在创建Gekko模型时,当选项remote=False
时使用本地可执行文件。
m = GEKKO(remote=False)
本地可执行文件版本包括:
- Windows(32或64位):apm.exe
- Linux(64位):apm MacOS(64位):apm_mac
- Linux ARM(树莓派):apm_arm(暂时删除,直到新版本可用)
求解器的不正确报告有GitHub问题报告,将在未来的版本中修复。如果您需要使用IPOPT,我建议您切换到Windows版本的本地解决方案,或者使用公共服务器。
如果您想调优APOPT,这里有关于APMonitor文档和APOPT网站中求解器选项的附加信息。