问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于NSGA-II的双减压塔多目标优化设计与仿真【附代码】

创作时间:
作者:
@小白创作中心

基于NSGA-II的双减压塔多目标优化设计与仿真【附代码】

引用
CSDN
1.
https://blog.csdn.net/checkpaper/article/details/144974656

基于NSGA-II算法的双减压塔多目标优化设计与仿真,通过集成PRO/II、Excel和Matlab软件,实现工艺参数的自动优化计算。该方法在某炼厂6Mt/a双减压塔原油蒸馏装置的应用中,取得了显著的经济效益和节能效果。

一、双减压原油蒸馏工艺剖析与优化需求

工艺特点及优势

双减压原油蒸馏流程作为原油蒸馏领域的新兴工艺,具有独特的架构变革。它重新分配了蒸馏功能,将常压塔的部分柴油蒸馏以及深减压塔的部分轻蜡蒸馏功能整合至浅减压塔。这种功能转移带来显著的经济效益,在老厂扩能改造场景下优势尽显。对于许多年代久远、设备老化但又亟待提升产能的炼油厂而言,无需大规模更换原有常压和减压设备,仅需添置浅减压炉与浅减压塔,极大降低了前期投资成本。以某服役超三十年的老炼厂为例,采用双减压工艺改造后,设备更新资金投入相较新建同等规模单减压流程装置减少约40%,且改造周期大幅缩短,能快速恢复生产,抢占市场先机。

操作弹性大是其另一突出亮点,意味着面对原油品质波动、市场产品需求变化时,装置能灵活调整运行参数,维持稳定高效生产。不同产地原油性质各异,其馏分组成、含硫量、黏度等指标差距明显,双减压工艺可依据原油实际情况,便捷地调控各塔温度、压力、流量等参数,确保各类原油都能得到充分合理的蒸馏分离,产出符合标准的油品。

操作复杂性与优化必要性

相较于传统单减压流程,双减压工艺的操作复杂度呈指数级上升。各塔之间的热量集成、物料平衡协调难度陡增,多股物流在不同塔器、换热器间穿梭,稍有不慎就会打破平衡,影响产品质量与收率。例如,浅减压塔的进料量既受常压塔出料制约,又要兼顾深减压塔的负荷分配,若协调不当,可能导致某一馏分在塔内过度或不足蒸馏,出现柴油馏分混入重质油或轻质蜡油收率过低等问题。

而且众多操作参数相互耦合,改变一个参数往往引发连锁反应。如调整浅减压炉出口温度,不仅影响浅减压塔内的气液平衡,还会波及后续产品的馏程分布,进而影响整个装置的能耗、产品分布与经济效益。因此,开展优化研究迫在眉睫,通过精准调控操作参数,化解复杂操作难题,挖掘工艺最大潜能。

二、集成式优化系统构建

跨软件功能整合

鉴于PRO/II在原油蒸馏流程模拟领域的深厚积淀,将其作为基础模拟工具。然而,PRO/II内置算法在应对复杂优化问题时稍显乏力,为此借助Excellink插件与COM服务器功能,搭建起PRO/II与Excel、Matlab之间的桥梁。在ExcelVBA环境中精心编写接口程序,实现三方软件协同作业。Excel凭借强大的数据处理与可视化能力,将PRO/II输出的海量模拟数据整理成直观易懂的报表、图表,为操作人员提供清晰的过程洞察。例如,以折线图展示不同工况下各塔温度随时间的变化趋势,助力快速判断工艺稳定性。

Matlab则凭借丰富的算法库赋能优化进程,其内置的优化工具箱涵盖多种前沿算法,如线性规划、非线性规划求解器,为解决复杂的多目标优化难题提供坚实支撑。通过接口程序,PRO/II的模拟数据无缝流入Matlab,经其复杂算法深度剖析,反向输出优化后的操作参数,形成完整的“模拟-优化-反馈”闭环。

自动优化计算实现

依托编写的接口程序,VBA按预设逻辑精准读取PRO/II的模拟计算结果,这些结果涵盖各塔物流组成、温度、压力、热负荷等关键信息,宛如工艺运行的“体检报告”。随后,数据被高效传输至Matlab环境,触发自动优化计算流程。以追求轻油收率最大且能耗最小的双目标优化为例,Matlab调用NSGA-II算法,针对输入的模拟数据构建多变量优化模型。该算法基于种群进化思想,模拟生物自然选择过程,在庞大的参数解空间中搜寻Pareto最优操作参数解集。

每一代种群个体代表一组操作参数组合,算法依据适应度函数(由轻油收率和能耗构建)评估个体优劣,通过交叉、变异等遗传操作迭代进化,逐步逼近全局最优。历经数十轮甚至上百轮迭代后,筛选出一组组在轻油收率与能耗之间权衡最佳的参数组合,为实际操作提供多样化的优质选择。

三、优化过程难点攻克与实际应用成效

水力学与产品质量限制应对

在自动模拟计算推进过程中,操作范围界定模糊极易引发棘手问题,致使计算结果与水力学限制、产品质量要求相悖。水力学方面,塔内气液流速需控制在合理区间,流速过快易引发液泛,导致分离效率骤降;流速过慢则影响传热传质,拖慢蒸馏进程。产品质量上,各馏分产品必须满足严格的质量指标,如柴油的十六烷值、汽油的辛烷值、馏程范围等。

为化解此困境,在接口程序中巧妙嵌入一组智能搜索判断规则。这些规则仿若敏锐的“质检员”,实时监控模拟计算进程。一旦检测到某一操作参数组合引发塔内压降异常、产品馏程偏离标准等违规情况,立即终止当前模拟计算,跳转至下一个参数组合尝试,避免无效计算资源浪费。如此循环往复,直至找到既满足工艺约束又趋近优化目标的参数解集,确保模拟计算结果切实可行。

炼厂实例应用与效益分析

将构建的优化方法应用于某炼厂6Mt/a双减压塔原油蒸馏装置,开启精细化效益挖掘之旅。通过深入的灵敏度分析,精准锚定三组双目标函数各自对应的决策变量个数,分别为6、7和10。以轻油收率最大和能耗最小这一关键目标组合为例,明确常压炉出口温度、浅减压炉出口温度、常压塔底注汽量、常二线产量、常三线产量、浅减压塔减三线恩氏蒸馏95%点馏出温度等6个核心变量。

基于优化后的操作参数调整装置运行,成效斐然。常压炉和浅减压炉能耗显著降低,降幅高达8.2%,意味着每年可节省大量燃料成本,减少二氧化碳等温室气体排放。同时,轻油收率提升带动产品销售收益增长,实现平均效益提升2507元/时,折合约2105万元/年。这不仅为该炼厂注入强劲经济效益,更验证了优化方法在复杂工业场景下的实用性与普适性,为行业同类装置优化改造提供了可借鉴的成功范例。

VBA代码:PRO/II与Excel、Matlab接口程序片段

Sub RunPROIIAndOptimize()
    Dim proIIApp As Object
    Dim workbook As Workbook
    Dim worksheet As Worksheet
    Dim resultRange As Range
    Dim matlabApp As Object
    Dim inputData As Variant
    Dim outputData As Variant
    
    '启动 PRO/II 应用程序
    Set proIIApp = CreateObject("PROII.Application")
    proIIApp.Visible = False '可设置为 False 以便后台运行
    
    '打开 PRO/II 模拟文件
    proIIApp.Open "C:\Path\To\Your\PROII\Simulation\File.pri"
    
    '运行 PRO/II 模拟
    proIIApp.RunSimulation
    
    '获取模拟结果数据范围,假设结果存放在特定工作表中
    Set workbook = ThisWorkbook
    Set worksheet = workbook.Worksheets("PROII_Results")
    Set resultRange = worksheet.Range("A1:Z100") '根据实际结果范围调整
    
    '读取模拟结果到数组
    inputData = resultRange.Value
    
    '启动 Matlab 应用程序
    Set matlabApp = CreateObject("Matlab.Application")
    matlabApp.Visible = False '可设置为 False 以便后台运行
    
    '将模拟数据传递给 Matlab 并调用优化函数(假设已在 Matlab 中定义)
    matlabApp.PutWorkspaceData "inputData", "base", inputData
    matlabApp.Execute "optimizePROIIResults; % 假设这是 Matlab 中的优化函数名"
    
    '获取优化后的结果数据
    outputData = matlabApp.GetWorkspaceData("outputData", "base")
    
    '将优化结果写回 Excel 工作表,假设存放在另一工作表
    Dim outputSheet As Worksheet
    Set outputSheet = workbook.Worksheets("Optimized_Results")
    outputSheet.Range("A1").Resize(UBound(outputData, 1), UBound(outputData, 2)).Value = outputData
    
    '关闭 PRO/II 和 Matlab 应用程序
    proIIApp.Quit
    matlabApp.Quit
    
    Set proIIApp = Nothing
    Set matlabApp = Nothing
    Set workbook = Nothing
    Set worksheet = Nothing
    Set resultRange = Nothing
    Set outputSheet = Nothing
End Sub

Matlab代码:优化函数示例(简化示意,实际需完整NSGA-II等算法实现)

function optimizePROIIResults()
    % 从 Matlab 工作区获取 PRO/II 模拟数据
    inputData = evalin('base', 'inputData'); 
    
    % 根据数据结构提取关键变量,如温度、流量等
    T1 = inputData(:, 1); % 假设第一列是常压炉出口温度
    T2 = inputData(:, 2); % 浅减压炉出口温度
    % 依次类推提取其他变量
    
    % 定义优化目标函数,如轻油收率最大且能耗最小
    fitnessFunction = @(x) [-lightOilYield(x), energyConsumption(x)]; % 负号用于求最大值转化为最小值问题
    
    % 定义变量边界,根据工艺实际范围设定
    lb = [minT1, minT2,...]; % 各变量下限
    ub = [maxT1, maxT2,...]; % 各变量上限
    
    % 调用优化算法,这里假设使用简化的遗传算法示例(实际用 NSGA-II)
    options = gaoptimset('PopulationSize', 50, 'Generations', 100); % 设置算法参数
    [xOptimal, fOptimal] = ga(fitnessFunction, length(lb), [], [], [], [], lb, ub, [], options);
    
    % 将优化结果存回工作区,以便 VBA 读取
    outputData = [xOptimal; fOptimal];
    assignin('base', 'outputData', outputData); 
end  

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号