Kik*_*all 5 iteration implicit gekko
关于Gekko的代数/隐式循环处理,我有一个特定的问题。
我将在化学工程领域提供示例,因为这是我找到该项目及其其他库的方式。
例如,在进行多组分化学平衡计算时,不可能明确地计算出方程式,因为一种物质的浓度可能存在于许多不同的方程式中。
过去我一直在使用其他付费软件,它会根据系统的可解决性自动提出解决程序(通过分析依赖关系并创建自动代数循环)。
我的问题是:
Gekko是否会自动执行此操作?
这有点棘手,因为有时需要添加撕裂变量并从一个好的起始值开始迭代。
我知道此消息可能有点抽象,但是我正在尝试确定要用于工作的软件,这是我碰巧发现的务实瓶颈。
在此先感谢您的宝贵见解。
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。
初始化总体策略
此流程图显示了我们用于初始化难题(例如带有回收的流程图)的总体策略。
有时,这确实意味着打破循环以获得初始化的解决方案。其他时候,上面详述的初始化策略效果很好,不需要重新排列模型。使用同时解决方案策略的优点是自由度交换,例如可以固定下游变量并计算上游变量以满足该值。