繁体   English   中英

获取 GEKKO 优化问题初始值的最佳方法是什么?

[英]What is the best approach to obtain initial values for a GEKKO optimisation problem?

我有一个动态控制问题,其中包含大约 35 个自变量、许多中间变量和一些方程式,主要是通过将某些因变量(代表 stream 流量)限制为正值来实施合理的质量平衡。

最初,变量是使用m.Var()构造函数声明的,但我随后将它们升级为 MV 和 CV 变量,以利用这些类添加的调整属性(如COSTDCOST等)的灵活性。

我注意到当一组变量被配置为MV时,IPOPT (3.12) 没有产生解决方案(错误报告: EXIT: Converged to a point of local infeasibility. Problem may be infeasible ),但是当一个变量被实例化为Var返回一个成功的解决方案。 我将变量重新实例化为MV并系统地删除约束以尝试查明约束方程。 我发现我为自变量提供的一组初始条件构成了不可行性(它导致 stream 的值为 -0.02,对其具有正约束)。 虽然RTOL可能可以用来解决这种情况的问题,但我认为这不是正确的通用方法。 我试过COLDSTART=2但不知道如何解释生成的presolve.txt文件。

首先,是否有一些标准功能可以帮助解决这种情况,或者是否应该确保最初的猜测代表一个可行的解决方案。

其次,为什么只有当变量被声明为MV而不是装饰较少的Var时,才能产生成功的解决方案?

m.Var()为优化器创建了额外的自由度,而m.Param()创建了一个由用户确定的数量。 m.Var()类型可以升级为m.SV()作为 state 变量或m.CV()作为受控变量。 m.Param()类型升级为m.FV()用于固定值或m.MV()用于操纵变量。 如果为这些类型打开STATUS参数,那么它们也会变成自由度。 有关FVMVSVCV类型的更多信息,请参阅 APMonitor 文档Gekko 文档 由于额外的自由度,该问题可能变得可行。 尝试将m.MV()设置为m.SV()以保留m.Var()声明的自由度。

初始解决方案通常最容易从稳态模拟中获得。 本文中还有其他详细信息:

初始化策略

这是我通常使用的流程图:

流程图

论文中还有关于COLDSTART选项如何工作的更多详细信息。 如果求解器报告成功求解,则不应存在约束违规。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM