原油运输路径规划关键技术及系统开发

2023-09-18 10:19朱宏震于明帅尹朝辉
科技创新与应用 2023年26期
关键词:调合剪枝顶点

朱宏震,于明帅,陈 浩,尹朝辉,梁 辰

(华东理工大学 信息科学与工程学院,上海 200237)

石油作为一个国家最重要的战略性资源,对国家的经济建设,以及政治军事安全起着至关重要的作用[1]。对于炼油企业,原油作业过程是石油供应链的重要组成环节,包括原油采购、原油分配、原油运输、原油储存和原油调合等多个环节。其中,原油运输涉及原油在码头罐区和厂内罐区之间的管道输送过程,是原油作业过程中至关重要的一个环节。合理的原油运输方案是炼厂上下游装置连续平稳运行的前提,也是炼厂效益提升的重要保证。

1 原油运输现状

原油运输的主要任务是将原油按照调合方案有序地输送至调合区,此外,还会执行诸如倒灌、压罐等内部转移原油的任务。在实际生产过程中,当原油调合区的操作人员设计好原油调合方案后,会将方案提交至负责原油运输的调度人员进行实现;调度人员会游览相关设备(如罐区、泵房等)的工艺流程图,人工地寻找一条符合要求的原油运输路径,由此可见,当前,原油在罐区的移动路径规划高度依赖于调度人员的人工经验[2]。然而,依靠人工进行路径规划的方式不仅费时费力,而且还存在问题。

1.1 缺乏系统性的规划方法

基于人工经验的原油移动路径规划方法不够系统化和规范化,缺乏标准的规划方法和指导原则,导致规划结果良莠不齐,无法保证稳定性[2]。

1.2 调度计划的精度不高

目前原油调度计划中的路径规划缺乏对生产实际情况的精准预测和响应,无法及时调整和优化路径,而人工规划难以兼顾路径长短和功耗等目标,导致调度计划的精度不高,效率低下[3]。

1.3 没有充分考虑多种约束条件

目前原油移动路径规划往往只考虑到单一的约束条件,如管道容量,而没有充分考虑到其他约束条件,如设备状况、安全性等,规划方案常常没有可执行性[4]。

综上所述,当前基于人工经验的原油移动路径规划存在多种问题和挑战,需要借助新的优化方法和技术进行解决和优化。鉴此,本文建立了原油运输管道数字化模型,提出了一种基于深度优先搜索(Depth-firstsearch,DFS)的原油运输路径规划方法,并开发了原油运输路径规划可视化系统,实现了原油运输路径的智能化规划,对炼油企业提高生产效率、降低生产成本、保障作业安全等具有重要意义[5]。

2 原油运输路径规划系统设计与实现

该系统需要实现的功能包括:根据原油运输任务(例如,A 罐以某种流量输送原油至B 调合区),自动给出一系列符合要求的原油运输路径,这个原油运输路径需要具体到阀门、管道、泵等实体,确保能够明确指导现场调度人员的操作。该系统的设计具体包括3 部分研究内容。

一是为原油运输的管道进行数字化建模。

二是设计一种搜索符合要求路径的路径搜索算法。

三是为了满足实际应用需要,系统应具有可视化功能。

原油运输路径规划系统主要功能如图1 所示。

根据上述研究内容,首先,需将原油运输工艺流程图转换为一种计算机可以识别的数据格式,建立基于原油罐区之间管道运输的数字化模型;其次,针对数字化模型设计原油运输路径搜索算法;最后,开发原油运输路径规划可视化系统,实现最优运输路径的实时显示。

2.1 数字化建模

由于计算机无法直接识别工艺流程图或者设备实体,所以需要将其转换为一种计算机可以识别的数据格式。本文使用JSON(一种轻量级的数据交换格式)作为数据载体,其格式可以认为是可以无限互相嵌套的字典和列表。其具体结构分为3 个大类:顶点、边、实体。

其中,顶点和边是图的组成部分,是搜索路径的基础。然而,图论和炼油工业对原油管道和实际设备的抽象方法有所差异,例如在图2 中有4 条卸油线,这4 条卸油线在工艺流程图中与多条管线有交点,这与图论中边(即连接2 个顶点的线)的定义不同。

图2 原油运输结构图

为了解决这个问题,本文采取的方案是按照搜索的需要定义顶点和边,然后通过其属性father关联到实体设备上。该操作解决了数据解耦的问题,这是因为顶点和边是相对不会扩展属性的部分,处理这一部分的代码可以相对稳定,而实体部分根据实际需求,需要经常对属性进行扩展。其具体结构如图3—图5所示。

图3 顶点结构

图4 边结构

图5 实体结构

2.1.1 顶点vertexs

1)name:名称,是自定义的名称,仅作为程序标号。

2)father:父类,该点实体的名称,比如一个油罐、泵等,可以为None(这通常意味着该顶点仅是一个交点,并没有实际实体,本文用“C+数字”表示)。

2.1.2 边edges——连接2 个顶点的边

1)name:名称,是自定义的名称,仅作为程序标号。

2)nodes:[A,B] 中A、B 为路径的2 点,为节点的name。

3)direction:路径的方向,由于部分管道只允许原油单项流过,所以图必须是一个有向图。

0:双向。

1:A->B。

2:B->A。

2.1.3 实体substances——实际设备中的单元

1)name:实体的名称,根据工艺流程图命名。

2)class:具体类别,油罐、泵、阀门和管道等,可以根据实际情况灵活扩充,也可以根据实际需求创建,例如子管道等并不存在于工艺流程图的类别,可作为中介实现某些作用。

3)parameters:一个字典,根据该实体类别决定其中的参数,例如管道上的泵、泵的扬程和流量等。

2.2 路径搜索算法

算法部分,本文采用深度优先搜索(Depth-firstsearch,DFS)算法和剪枝操作。DFS 属于图算法的一种,也是对一个连通图进行遍历的算法。其思想是从一个顶点开始,沿着一条路线一直走到底,如果发现不能到达目标,即返回到走不通节点的上一个节点,然后尝试从另一条路开始走到底,每个节点只可以访问一次。DFS 可以遍历图存储结构,确保不会产生遗漏;剪枝则是停止针对不合条件的路径进行搜索,以减少程序运行时间。

2.2.1 读取数据

统筹推进,振兴乡村。在做好项目区建设的同时,增加发展要素,努力推进乡村振兴样板区、绿色产业集聚区、生态文明示范区、美好生活共享区建设。

Python 可以很方便地读取JSON 文件为字典和列表的嵌套。如图6 所示。

图6 读取JSON 文件

2.2.2 生成图

图的表示方式有2 种:邻接矩阵和邻接表[6],前者适合存储边密度高的图,后者适合存储边较少的图。考虑到原油管道的特性,连接是比较稀疏的,所以选择使用邻接表。邻接表结构如图7 所示。

图7 邻接表结构

2.2.3 搜索算法

本次任务的搜索可以抽象为搜索2 个顶点之间的所有符合条件的路径,并将该路径进行存储。为此,本文选择的算法是DFS,并通过剪枝提前删除不符合限制条件的路径,减少搜索量。搜索的进程可以看作是从树根出发,遍历一棵倒置树(搜索树)的过程。由于本次搜索路径不仅要存储顶点,还要存储边,这为之后的代码增加了一定的复杂度,因此,将递归形式转换为循环形式,以增加内存的使用效率。使用collections 模块中的deque()生成栈,将顶点和边一同推入,所以每次出栈次数都为2 次(除了首个顶点)。在遍历全部顶点时,加入剪枝操作,使用break 退出本次搜索,从而继续进行下一次搜索。所谓剪枝,就是通过某些判断,避免一些不必要的遍历过程,形象地说,就是剪去搜索树中的某些枝条[7]。本文所采用的剪枝主要是可行性剪枝,即停止搜索已不符合条件的路径,从而继续选择别的路径。限制条件包括:①不包含环路;②经过的最大油罐数量;③经过的最大泵数量。

其中,不包含环路这一点最为重要,若不加上则会导致死循环,后2 个限制条件可以大量降低搜索路径数量,避免一些明显不合理的路径,如图8 所示。加上对路径经过的油泵和油罐数量限制后,路径数量大大减少。最后将路径用字符串表示,存入Paths 列表中。

图8 2 种路径数量结果

这样,获得了所有符合条件的路径,然后使用min(Paths,key=len)函数,将len 函数传递给key 参数,最后根据路径中每个单元运输耗时,计算总耗时,选取总耗时最短的路径,即所求最优路径。

2.2.4 保存数据

使用update 语句将DFS 搜索得到的最优结果保存到相应的数据库中。

2.3 可视化系统搭建

设计具有可视化功能的原油运输路径规划系统,使调度人员能够直观地搜索路径。该系统主要包括以下功能。

一是为了符合工厂实际需求,必须是桌面端或者Web 端。

二是能图形化地显示管道结构图,并在上面显示搜索到的路径。

三是可以直接输入原油运输任务,然后在管道结构图上显示搜索到的路径。

本文采用Web 端系统,并采用Node.js 环境、Express 框架、Ajax 等相关技术进行可视化系统实现[8]。

2.3.1 界面设计

为使调度人员操作方便,原油任务起点与终点采用下拉列表的格式,通过标签,设置其类型为submit 为操作人员添加提交数据和获取结果的按钮,同时使用CSS 效果对其进行美化操作。效果如图9—图11 所示。

图9 起点列表图

图10 终点列表

图11 操作按钮

考虑到原油运输管道的复杂性,调度人员会经常对界面进行缩放,为了在这个过程中不使图形失真,本系统采用矢量图而非位图进行设计。通过标签,以2 点坐标,绘制一条直线,并以此为基础构建整个原油运输的管道。同时,为了方便在图中显示搜索到的路径,给每段路径加上class 属性。然后用同样的方法,设计出相关实体油罐、泵、操作区的图标。将图标和运输管道相连接,并为每条管道添加上名称,保存为HTML 文件,具体效果如图12 所示。

图12 原油运输管道

2.3.2 数据交互

Express 是基于内置HTTP 模块进一步封装的模块,能够极大提高开发效率。通过Express,可快速创建一个Web 网站的服务器,调用app.listen()方法在8080 端口启动服务器。再通过express.static()方法创建一个静态资源服务器,将上文设计完成的HTML 文件对外开放访问。

编写GET 接口使服务器从客户端获取到调度人员发来的起点与终点数据,同时把起点与终点2 个数据存入MySQL 数据库的表格;编写POST 接口将服务器从数据库相关表格中获得的搜索结果发送给客户端。在服务器中加入bodyparser.urlencoded()来解析application/x-www-form-urlencoded 格式的表单数据,加入bodyparser.json()来解析并返回JSON 格式的数据。在数据传输过程中,由于浏览器只允许和同一域名服务器通信[9],会出现不支持跨域请求的问题,因此,在本系统开发中导入cors 中间件来解决跨域的问题。

在前端,对数据提交和搜索结果按钮绑定点击事件,使用jQuery 中的Ajax 方法进行异步传输、发送、接收数据。为了使搜索得到的结果显示在Web 页面中,在获取数据按钮请求成功地回调函数中使用text()将res.data.path 中数据渲染到前端页面上。同时根据res.data.path 中路径的信息遍历原油运输管道,依据每个管道的class 属性使用setAttribute()方法把对应的路径颜色改变。本文设计了一个刷新函数,使已经改变颜色的路径恢复成原始颜色,通过在搜索路径按钮中调用该函数,使之自动刷新。这样,调度人员在进行多次作业时,不需要手动刷新,操作更加便捷。

2.3.3 Node.js 调用Python 脚本

在客户端发送来数据之后,需要调用执行Python脚本来进行搜索,本系统使用Node.js 提供子进程实现脚本的自动运行。具体使用child_process 子进程执行Python 程序,并将其放在POST 接口函数中,这样每调用一次接口,就执行一次,实现了路径的自动搜索。

3 系统测试和分析

在本章中,基于所开发的原油运输路径规划系统进行测试和分析。

首先,测试从T51 罐向原油调合区A 进行路径搜索,结果如图13 所示。由结果可知,文本结果与上文Python 运行得到的结果一致,结合原油管道,突出显示的正是文本中所给出的路径,故结果正确且为最优路径。为避免测试结果的偶然性,再进行一组测试,由T53 罐向#A 调合区B 进行路径搜索,结果如图14 所示,经过验证,发现结果正确且为最优路径。

图13 第一次测试结果

图14 第二次测试结果

4 结束语

本文针对炼油企业原油作业过程中原油运输路径智能化规划的实际需求,聚焦原油运输路径规划关键技术及系统开发。首先,本文采用JSON 作为数据载体,其具体结构由顶点、边、实体3 部分组成,实现了原油运输管道的数字化建模。其次,提出了一种基于DFS的原油运输路径规划方法,并引入剪枝策略,实现了对原油运输最优路径的高效搜索。最后,基于Node.js 环境、Express 框架、Ajax 等相关技术实现了基于Web 端的原油运输路径规划可视化系统开发,经测试,本系统能够准确地找到罐到原油调合区的最短路径,极大地提升了调度人员的工作效率。

猜你喜欢
调合剪枝顶点
某炼厂柴油调合工艺设计
人到晚年宜“剪枝”
过非等腰锐角三角形顶点和垂心的圆的性质及应用(下)
DOA调合沥青的制备及其在防水卷材中的应用研究
基于YOLOv4-Tiny模型剪枝算法
关于顶点染色的一个猜想
剪枝
一种面向不平衡数据分类的组合剪枝方法
基于辛烷值调合效应模型的在线更新方法及其应用
油品高效调合器在汽油调合中的工业应用