Python Gekko 使用同时求解策略,以便所有单元一起求解而不是顺序求解。因此,不需要撕裂变量,但与循环有关的大型流程问题可能难以收敛到可行的解决方案。以下是 Python Gekko 中用于帮助高效解决方案和初始化的三种方法。
方法一:中间变量
中间变量有助于降低模型的复杂性。在许多模型中,临时变量的数量超过了常规变量。这种模型缩减通常有助于求解器通过减小问题大小来找到解决方案。中间变量m.Intermediates()
在 Python Gekko 中声明为 。中间变量可以在一个部分中定义,也可以在整个模型中的多个声明中定义。中间变量从上到下依次解析。为避免无意覆盖,中间变量可以定义一次。在中间变量的情况下,声明的顺序很关键。如果在定义之前使用了中间值,则会报错,指出存在未初始化的值。以下是有关带有示例问题的中间体的附加信息。
方法二:下块三角分解
对于初始化有问题的大问题,有一种模式可以通过选项激活m.options.COLDSTART=2
。此模式执行较低的块三角分解,以自动识别独立块,然后独立并按顺序求解。
这种初始化分解方法在 Mostafa Safdarnejad 的博士论文(第 2 章)或 Safdarnejad, SM, Hedengren, JD, Lewis, NR, Haseltine, E., Initialization Strategies for Optimization of Dynamic Systems, Computers and Chemical Engineering 中进行了讨论, 2015, 卷。78,第 39-50 页,DOI:10.1016/j.compchemeng.2015.04.016。
方法 3:自动模型缩减
模型简化需要更多的预处理时间,但有助于显着减少求解器时间。关于. _ _m.options.REDUCE
初始化的总体策略
此流程图显示了我们用于初始化难题的总体策略,例如带有回收的流程图。
有时它确实意味着打破循环以获得初始化的解决方案。其他时候,上面详述的初始化策略运行良好,不需要重新排列模型。使用同步解决方案策略的优点是自由度交换,例如可以固定下游变量并计算上游变量以满足该值。