如何让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
相关产品推荐
相关产品推荐

