5

我有一个关于 Gekko 处理代数/隐式循环的具体问题。

我将给出化学工程领域的例子,因为这就是我找到该项目及其其他库的方式。

例如,当涉及到多组分化学平衡计算时,不可能明确地计算出方程式,因为一种物质的浓度可能存在于许多不同的方程式中。

我过去一直在使用其他付费软件,它会根据系统的可解性自动提出解决程序(通过分析依赖性和创建自动代数循环)。

我的问题是:

Gekko 会自动执行此操作吗?

这有点棘手,因为有时需要添加撕裂变量并从一个好的起始值进行迭代。

我知道这条信息可能有点抽象,但我正在尝试决定使用哪个软件来完成我的工作,这是我碰巧发现的一个实用瓶颈。

提前感谢您的宝贵见解。

4

1 回答 1

1

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

初始化的总体策略

此流程图显示了我们用于初始化难题的总体策略,例如带有回收的流程图。

初始化流程图

有时它确实意味着打破循环以获得初始化的解决方案。其他时候,上面详述的初始化策略运行良好,不需要重新排列模型。使用同步解决方案策略的优点是自由度交换,例如可以固定下游变量并计算上游变量以满足该值。

于 2019-10-30T15:04:02.493 回答