Algebraic/implicit Gekko 循环处理
Algebraic/implicit loops handling by Gekko
我有一个关于 Gekko 处理代数/隐式循环的具体问题。
我将给出化学工程领域的示例,因为这是我找到该项目及其其他库的方式。
例如,当涉及到多组分化学平衡计算时,不可能明确地计算出方程,因为一种物质的浓度可能存在于许多不同的方程中。
我过去一直在使用其他付费软件,它会根据系统的可解性(通过分析依赖关系和创建自动代数环)自动提出解决方案。
我的问题是:
Gekko 会自动执行此操作吗?
这有点棘手,因为有时需要添加撕裂变量并从一个好的起始值开始迭代。
我知道这条消息可能有点抽象,但我正在努力决定我的工作使用哪个软件,这是我碰巧发现的实用瓶颈。
提前感谢您的宝贵见解。
Python Gekko 使用同步求解策略,以便所有单元一起求解,而不是按顺序求解。因此,撕裂变量不是必需的,但循环的大流程问题可能难以收敛到可行的解决方案。以下是 Python Gekko 中的三种方法,以协助高效解决方案和初始化。
方法一:中间变量
中间变量有助于降低模型的复杂性。在许多模型中,临时变量的数量超过常规变量。这种模型缩减通常有助于求解器通过减小问题大小来找到解决方案。中间变量在 Python Gekko 中用 m.Intermediates()
声明。中间变量可以在整个模型的一个部分或多个声明中定义。中间变量按顺序从上到下解析。为避免意外覆盖,中间变量可以定义一次。对于中间变量,声明的顺序很关键。如果在定义之前使用中间体,则会出现错误报告存在未初始化的值。这是 additional information on Intermediates 的示例问题。
方法二:下块三角分解
对于难以初始化的大问题,有一种模式可以通过选项 m.options.COLDSTART=2
激活。此模式执行下块三角分解以自动识别独立块,然后独立地按顺序求解。
初始化的分解方法在 PhD dissertation (chapter 2) of Mostafa Safdarnejad 或 Safdarnejad, S.M., Hedengren, J.D., Lewis, N.R., Haseltine 中讨论, E., 动态系统、计算机和化学工程优化的初始化策略, 2015, Vol. 78,第 39-50 页,DOI:10.1016/j.compchemeng.2015.04.016.
方法三:自动模型缩减
模型缩减需要更多的预处理时间,但有助于显着减少求解器时间。 m.options.REDUCE
上有 additional documentation。
初始化的总体策略
我们用于初始化难题的总体策略,例如带有循环的流程图,在此流程图中显示。
有时它确实意味着打破循环以获得初始化解决方案。其他时候,上面详述的初始化策略效果很好,不需要重新安排模型。使用同步解决方案策略的优点是自由度交换,例如可以固定下游变量并计算上游变量以满足该值。
我有一个关于 Gekko 处理代数/隐式循环的具体问题。
我将给出化学工程领域的示例,因为这是我找到该项目及其其他库的方式。
例如,当涉及到多组分化学平衡计算时,不可能明确地计算出方程,因为一种物质的浓度可能存在于许多不同的方程中。
我过去一直在使用其他付费软件,它会根据系统的可解性(通过分析依赖关系和创建自动代数环)自动提出解决方案。
我的问题是:
Gekko 会自动执行此操作吗?
这有点棘手,因为有时需要添加撕裂变量并从一个好的起始值开始迭代。
我知道这条消息可能有点抽象,但我正在努力决定我的工作使用哪个软件,这是我碰巧发现的实用瓶颈。
提前感谢您的宝贵见解。
Python Gekko 使用同步求解策略,以便所有单元一起求解,而不是按顺序求解。因此,撕裂变量不是必需的,但循环的大流程问题可能难以收敛到可行的解决方案。以下是 Python Gekko 中的三种方法,以协助高效解决方案和初始化。
方法一:中间变量
中间变量有助于降低模型的复杂性。在许多模型中,临时变量的数量超过常规变量。这种模型缩减通常有助于求解器通过减小问题大小来找到解决方案。中间变量在 Python Gekko 中用 m.Intermediates()
声明。中间变量可以在整个模型的一个部分或多个声明中定义。中间变量按顺序从上到下解析。为避免意外覆盖,中间变量可以定义一次。对于中间变量,声明的顺序很关键。如果在定义之前使用中间体,则会出现错误报告存在未初始化的值。这是 additional information on Intermediates 的示例问题。
方法二:下块三角分解
对于难以初始化的大问题,有一种模式可以通过选项 m.options.COLDSTART=2
激活。此模式执行下块三角分解以自动识别独立块,然后独立地按顺序求解。
初始化的分解方法在 PhD dissertation (chapter 2) of Mostafa Safdarnejad 或 Safdarnejad, S.M., Hedengren, J.D., Lewis, N.R., Haseltine 中讨论, E., 动态系统、计算机和化学工程优化的初始化策略, 2015, Vol. 78,第 39-50 页,DOI:10.1016/j.compchemeng.2015.04.016.
方法三:自动模型缩减
模型缩减需要更多的预处理时间,但有助于显着减少求解器时间。 m.options.REDUCE
上有 additional documentation。
初始化的总体策略
我们用于初始化难题的总体策略,例如带有循环的流程图,在此流程图中显示。
有时它确实意味着打破循环以获得初始化解决方案。其他时候,上面详述的初始化策略效果很好,不需要重新安排模型。使用同步解决方案策略的优点是自由度交换,例如可以固定下游变量并计算上游变量以满足该值。