You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GEKKO化工流程混合器对象完成求解?

GEKKO化工流股混合计算问题解决

问题描述

使用GEKKO化工库定义了丙烯、丙烷、丁烷、戊烷四种组分,以及两个摩尔流量和组分占比不同的流股,混合后计算出口流股的总摩尔流量与摩尔分数时,结果始终是初始值[[0.25], [0.25], [0.25], [0.25]],未得到正确计算值。

问题原因

代码中使用f.connect()关联混合器入口与流股的方式错误,f.connect()用于变量间的连接,而混合器的inlet属性需要直接绑定流股对象,而非通过变量连接。

修正后的代码

from gekko import GEKKO, chemical
import numpy as np

m = GEKKO()    # 实例化GEKKO对象
f = chemical.Flowsheet(m, stream_level=0)  # 实例化流程对象
c = chemical.Properties(m)
c.compound('propylene')    # 定义组分1:丙烯
c.compound('propane')      # 定义组分2:丙烷
c.compound('butane')       # 定义组分3:丁烷
c.compound('pentane')      # 定义组分4:戊烷

s1 = f.stream(fixed=True)    # 定义流股1(固定参数)
s1.x = np.array([0.5, 0.3, 0.1, 0.1])     # 流股1的摩尔分数
s1.ndot = 10                 # 流股1的摩尔流量

s2 = f.stream(fixed=True)    
s2.x = np.array([0.3, 0.3, 0.2, 0.2])     # 流股2的摩尔分数
s2.ndot = 20                 # 流股2的摩尔流量

outlet = f.stream(fixed=False) # 定义待求解的出口流股

mx = f.mixer(ni=2)        # 创建双入口混合器
mx.inlet[0] = s1  # 直接绑定流股1到混合器入口1
mx.inlet[1] = s2  # 直接绑定流股2到混合器入口2

mx.outlet = outlet  # 关联混合器出口到出口流股
m.options.SOLVER = 1
m.solve()

print('混合后总摩尔流量:', outlet.ndot.value[0])
print('混合后流股摩尔分数:', [x[0] for x in outlet.x])

正确计算结果

运行修正代码后,将得到:

  • 总摩尔流量:30
  • 摩尔分数:[0.36666667, 0.3, 0.16666667, 0.16666667]

内容的提问来源于stack exchange,提问作者JacquesStrydom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:05:28