计算机系统应用  2019, Vol. 28 Issue (4): 83-89   PDF    
基于线性规划的智能炼铁配料系统
张学锋, 濮程, 汤亚玲     
安徽工业大学 计算机科学与技术学院, 马鞍山 243002
摘要:以钢铁企业炼铁生产参数为研究资料, 实现高炉炼铁配料优化、炼铁数据和三维模型的多元化展示. 本文主要研究在Qt平台下设计研发了跨平台的智能炼铁配料系统, 采用线性规划的方法建立炼铁配料的数学模型, 利用单纯形法求解达到成本最优, 以及利用FFmpeg库实现高炉数模动画的播放和OpenGL实现高炉三维模型的动态展示. 本文首先介绍了系统利用到的一些相关技术, 其次对系统的数据提取、更新、优化算法的设计进行了分析, 最后对配料优化、数据的二维展示、三维模型的动态展示的实现和测试进行了介绍.
关键词: 线性规划    高炉炼铁    炼铁优化    跨平台    FFmpeg    OpenGL    
Intelligent Ironmaking Batching System Based on Linear Programming
ZHANG Xue-Feng, PU Cheng, TANG Ya-Ling     
School of Computer Science and Technology, Anhui University of Technology, Ma’anshan 243002, China
Foundation item: Natural Science Research Program of Higher Educations of Anhui Province (KJ2017ZD05)
Abstract: This study takes ironmaking production parameters of iron and steel enterprises as research materials and realizes diversified display of blast furnace ironmaking burdening optimization, ironmaking data, and 3D model. This work mainly studies the cross-platform intelligent ironmaking burdening system designed and developed under Qt platform, adopts linear programming methods to build a mathematical model of ironmaking burdening, solves the simplex algorithm to achieve cost optimization, makes use of FFmpeg library to realize playing of mathematical model animation of blast furnace, and takes advantage of OpenGL to realize dynamic display of 3D model of blast furnace. This article firstly introduces some relevant techniques used in the system; then analyzes data extraction, updating, and optimization algorithm designs of the system; and finally introduces realization and tests of burdening optimization, 2D data display, and dynamic display of 3D model.
Key words: linear programming     blast furnace ironmaking     ironmaking optimization     cross-platform     FFmpeg     OpenGL    

引言

近些年来钢铁企业的生存压力空间加大, 环保问题、成本问题都压到了铁前, 在这种情况下, 各钢铁厂都在寻找所谓降成本的灵丹妙药. 铁前所有的工作最终要表现在生铁成本上, 因为所有原料、燃料影响成本占到90%, 原燃料有劣次之分, 如何选择, 也就是经常说的性价比问题, 这是系统降成本的思路[1]. 因此, 如何选择炼铁的配料对于现代钢铁企业非常重要, 方便高效的配料计算方式对于降低炼铁成本具有重要意义.

我国钢企的高炉配料计算方式主要有3种, 分别是手工计算、Excel计算和高炉配料应用软件计算, 它们主要通过正向计算和验证调整来实现. 其原理就是通过高炉配料计算预定条件下的理论出铁量和理论炉渣量, 将它们与设定目标对比, 满足误差允许要求则为可行配比, 否则再对配比进行调整, 直至配比可行[2]. 由以上原理可已看出, 其存在计算频繁、效率低、结果差的问题, 但是通过线性规划理论优化后的高炉配料系统相对而言有一下优势: 效率高、上手快、界面规范化、可以根据不同的需求选择不同的优化方向[2]. 例如, 张瑞军[3]等采用线性规划法建立模型, 并利用Matlab完成模型求解; 新余钢铁集团有限公司[4]采用线性规划法建立模型, 并采用LINGO工具求解模型; 河钢集团承钢公司[5]采用了IData技术进行数据库数据、求解设置参数直接与Excel连接的方法, 通过Excel求解线性规划问题. 文献[35]都采用的线性规划的方法建立了模型, 但是对于线性规划模型的求解均是采用数学求解工具求得结果, 这样会进一步提高对于优化炼铁软件工作环境的要求, 不利于工程人员使用.

本文设计并实现了一个基于线性规划的跨平台(Windows和Linux)智能炼铁配料系统, 采用单纯形法求得最低成本的配料方案, 并可将配料方案进行二维展示(表格)、炼铁数据进行二维展示(表格、折线图、柱状图)、炼铁模型进行二维(图片、动画)和三维展示(三维模型). 本系统节省了工程人员计算炼铁配料的时间, 降低了炼铁配料的成本, 多元化的辅助功能很大程度上提高了工程人员的工作效率, 为指导生产提供理论依据.

1 相关技术 1.1 线性规划

线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支, 它是辅助人们进行科学管理的一种数学方法. 线性规划是求一个线性函数在满足一组线性等式或不等式方程条件极值的统称, 它一般由三部分组成:

(1) 由决策变量(如本文中的铁矿粉)构成的反映决策目标(使配矿成本最低)的线性目标函数;

(2) 一组包含决策变量的线性等式或不等式构成的约束方程(烧结矿成分范围);

(3) 限制决策变量取值范围的非负约束[6].

1.2 单纯形法

一般线性规划问题中当线性方程组的变量数大于方程个数, 这时会有不定数量的解, 而单纯形法是求解线性规划问题的通用方法. 单纯形法就是秉承“保证每一次迭代比前一次更优”的基本思想: 先找出一个基本可行解, 对它进行鉴别, 看是否是最优解; 若不是, 则按照一定法则转换到另一改进后更优的基本可行解, 再鉴别;若仍不是, 则再转换, 按此重复进行. 因基本可行解的个数有限, 故经有限次转换必能得出问题的最优解[7].

1.3 Assimp库

一个非常流行的模型导入库是Assimp, 它是Open Asset Import Library(开放的资产导入库)的缩写. Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式), 它会将所有的模型数据加载至Assimp的通用数据结构中. 当Assimp加载完模型之后, 我们就能够从Assimp的数据结构中提取我们所需的所有数据了. 由于Assimp的数据结构保持不变, 不论导入的是什么种类的文件格式, 它都能够将我们从这些不同的文件格式中抽象出来, 用同一种方式访问我们需要的数据.

1.4 FFmpeg库

FFMPEG是一个集成了各种编解码器的库, 可以说是一个全能型的工具, 从视频采集、视频编码到视频传输(包括RTP、RTCP、RTMP、RTSP等等协议)都可以直接使用FFmpeg来完成, 更重要的一点FFmpeg是跨平台的, Windows、Linux、Android、IOS这些主流系统都支持.

2 智能炼铁配料系统分析与设计

智能炼铁配料系统具体工作流程为读入炼铁基准案例, 输入各种原料用量的约束条件, 通过线性规划建立标准型公式, 再通过单纯形法求得成本最优解.

2.1 炼铁案例设计

智能炼铁配料系统将各种矿石数据库数据、副料数据库数据、烧结配矿参数、高炉配料和操作参数、匀矿配比、副料配比全部集成在一个自定义格式的文本文件中, 用自定义格式的文本文件作为炼铁优化的基本案例, 通过读入基准案例即可获得工程人员所需要的所有数据. 炼铁基准案例包含十三张表格, 数据文件由以下几个部分组成:

(1) 表头: 表头一般会以图1形式给出.

图 1 表头格式

(2) GUI页面标签: 以“#>”开头, 在建立页面时, 根据其内容确定页面的标题. 典型的页面标签行如下所示: “#>烧结矿粉数据库”.

(3) 关键字: options关键字不写入GUI页面, 用来分隔数据类型, 但在写文件时, 该关键字需要写入.

(4) 注释行: 以“#”开头, 且“#”后面不带“>”号, 注释行内容不写入GUI页面, 但在写文件时, 应该写回.

(5) 数据库表头行: 紧跟数据标签行后的第一个非说明行, 数据库表头行以逗号分隔, 例如: “类别, 代码, 单价, 平均粒度, H2O, 全铁, 二氧化硅, 氧化钙, 三氧化二铝, 氧化镁, 二氧化钛, 氧化锰, 五氧化二磷, 氧化亚铁”.

(6) 数据库数据区: 每行数据段的不同数据以逗号分隔, 数据可以为空, 其对应的GUI表格应写入符合“-”, 在写回文件时, 应写入表格中的“-”而不是空字符.

(7) 操作参数区: 操作参数区紧跟在关键字options后面. 操作参数的数据格式为数据名=数据内容. 在将数据写入GUI页面时, 以=为分隔, =左边数据写入第一列. 数据内容可以是单个数据, 也可以是多个数据, 用逗号分隔.

2.2 线性规划模型建立

建立烧结矿优化配料模型的步骤为:

(1) 确定决策变量. 以第i种原料的配量作为决策变量xi, $ i=1, 2, \cdots n $ , n为原料的种类数量.

(2) 确定目标函数. 以烧结矿成本最低为目标, 构成的目标函数为: minz=∑ci×xi, $ i=1, 2, \cdots n$ . 其中, ci为第i中原料的价格, xi为第i种原料的配量, n为原料的种类数量[8].

(3) 确定约束条件. 根据必要的烧结工艺性能要求、烧结矿质量要求及原料资源量等建立约束条件如下:

1)成分条件约束

根据烧结矿成分的限制范围上下限建立约束方程, 烧结矿配料中溶剂的碱度要大于1.8, 若其碱度低于1.8则会阻碍铁酸钙系形成固结相, 从而影响到烧结矿的质量. 烧结矿需要较高的铁品位, TFe的比例需要大于等于60%, SiO2小于等于4.5%[9]. 根据现场生产需要, 确定了烧结矿主要控制的化学成分有: TFe、SiO2、CaO、Al2O3、MgO、TiO2、P2O5. 构成的公式为:

$ {a_{i1}}{x_1} + {a_{i2}}{x_2} + \cdots + {a_{in}}{x_n} \le ( = , \ge ){b_i},\;\;i = 1,2, \cdots, n. $

2)配比约束

由于现实状况下矿粉资源的限制, 某些超过实际矿粉配比需求的计算结果是无用的, 因此加入矿石配比约束, 更加符合实际情况, 使得配矿结果更准确.

3)平衡约束

由于各种原料在炼铁过程中存在损失的情况, 不同的原料烧损情况不一, 但各种原料在烧结后的烧成比之和应等于1. 构成公式为: 1= ∑(1–烧损ixi, $ i=1, 2, \cdots, n$ . 其中烧损i为不同原料烧损比, xi为第i种原料的配量.

2.3 单纯形法求解

线性规划建立的模型为非标准型公式, 首先需要将非标准型公式转换成为标准型公式, 转换标准如下:

(1) 目标函数极小化转换为极大化. min z= –max (–z), 一个数的极小化等价于其相反数的极大化.

(2) 不等式约束的转换

∑aijxjbi, 加入松弛变量;

∑aijxjbi, 减去剩余变量.

(3) 非正变量: 即xk≤0, 则令x'k=-xk;

自由变量: 即xk无约束, 则令xk=x'kx"k.

引入松弛变量, 用单纯形法求解. 单纯形法是一个迭代过程, 它是从线性规划问题的一个基本可行解转移到另一个基本可行解而目标函数值不增加的过程(对于求最小值问题), 如果存在最优解, 此过程将持续到求得最优解为止[10].

3 智能炼铁配料系统实现与测试

基于Qt5.9, 使用Mingw编译器编译实现Windows和Linux双平台的智能炼铁配料系统, 实现了成本最低、多重约束条件的多目标优化配料和多元化展示炼铁结果的功能. 当用户读入炼铁过程分析案例后, 根据展示在界面上的各种配料的数据库数据, 方便的选择需要选取的配料, 再根据实际需要设定约束条件, 即可根据设定求得成本最低的配料方案, 可以为工程人员提供理论参考.

3.1 炼铁数据的管理

为了简化操作流程, 方便操作人员快速上手, 本系统自定义了炼铁所需数据的基准案例, 具体定义的基准案例格式在炼铁案例设计中已经介绍过, 这里就不再赘述. 对于炼铁数据的管理主要有以下几个部分:

(1) 读入数据. 对于炼铁数据的读入就是基于基准案例设计的格式将每一种配料和需要修改的部分数据解析为需要的数据格式, 通过QTableView类的函数以表格的形式展示在GUI上, 这样可以做到一次性将需要选择的配料和需要修改的操作表格展示给用户.

(2) 更新数据. 对于炼铁数据中数据库的更新则是将CSV格式的各种配料数据提取到系统中, 再对获得的数据格式进行转换, 进而替换掉展示在GUI上对应配料的表格数据, 最后对当前操作的基准案例文件进行保存操作则可以实现对当前炼铁案例的更新.

(3) 操作数据. 对于炼铁数据在表格上的插入、删除、基本计算、复制、粘贴等操作, 通过Qt特有的信号与槽机制实现表格数据的刷新. 对于操作数据的撤销和恢复, 通过重写QUndoCommand中的undo和redo函数实现.

读入炼铁数据后的效果如图2所示, 当前炼铁基准案列共有十三张表.

图 2 读入基准案例

3.2 炼铁方案优化的实现与测试

炼铁配料的优化主要是根据用户选定的矿种和配料以及对于烧结矿化学成分和工艺条件的约束, 以成本最低为导向输出配料方案. 实现的基本流程如下:

(1) 获取所需数据. 用户读入炼铁案例后, 在匀矿配比和副料配比页面选择需要的所有原料, 并在烧结配料优化页面设置约束条件的上下限, 最后将选择的原料的数据和所有约束条件的数据储存为QStandard ItemModel类型数据.

(2) 建立线性规划的标准型公式. 根据线性规划建模的方法将获取的数据进行转换, 进而将建立好的公式以图3格式输出到文本文件中, 具体的转换方法在线性规划模型建立和单纯形法求解中已介绍过. 文件中第一行包含了自变量和约束变量的个数, 第二行为目标函数自变量前的系数, 接下来的所有行包含了对应约束的自变量前的系数和约束<=号右边的数值.

(3) 获得最低成本配料方案. 读取线性规划公式文件中的数据, 将数据以矩阵的形式存储, 按照单纯形法求解的方法变换矩阵, 进而获得最低成本配料方案.

(4) 验证单纯形法正确性. 根据建立的数学模型文件中的数据, 将其采用Lingo语言输入到Lingo软件中, 通过Lingo软件求得线性规划的结果. 将智能炼铁配料系统求得的结果和Lingo软件求得的结果进行对比后证明对于该数学模型的计算无误.

烧结配料优化页面如图4所示, 其中左上方为优化配料结果, 左下方为烧结矿化学成分的约束, 右侧为选择的矿种和配料.

图 3 线性规划公式文件

图 4 烧结配料优化

3.3 炼铁数据的二维展示

智能炼铁配料系统可以根据提供的炼铁数据按照一定的函数关系绘制精美的折线图和柱状图, 炼铁数据的格式为CSV格式. 绘制曲线需要用到一个用Qt开发的开源的第三方工具QCustomPlot, 将QCustomPlot移植到开发的系统中, 调用QCustomPlot相关的类就可以绘制出精美的曲线. 用户可以根据需要设定x轴和y轴的数据源以及对图形样式进行设置, 绘制图线的效果如图5图6所示.

图 5 折线图

图 6 柱状图

3.4 高炉数模的二维展示

智能炼铁配料系统可以对高炉数模的结果进行二维图片的展示和动画的播放, 动画播放效果如图7所示. 传统的多媒体文件解码方式有any chat, gstreamer, FFmpeg, ffdshow, vfw和directshow等, 由于FFmpeg的功能强大和编解码速度较高, 目前得到了普遍的应用[11]. 除此之外, 因为系统需要能够在Windows和Linux双平台下运行, 所以采用了在Linux下开发可用来采集和转换数字音视频并将其转换为流畅的FFmpeg. 高炉数模动画的播放需要在系统中加入Windows环境和Linux环境下编译出来的FFmepg库, 利用FFmpeg解码和Qt显示的基本流程可以分为如下几步:

(1) 注册所支持的所有文件(容器)格式及其对应的CODEC. 函数av_register_all( )将获得的FFmpeg支持的编码器、解码器以及混合器的相关信息以链式结构存放在内存中.

(2) 打开视频文件. 函数avformat_open_input()通过解析多媒体文件或流的头信息及其他的辅助数据, 能够获取足够多的关于文件、流和CODEC的信息, 并将这些信息填充到AVFormatContext结构体中.

(3) 从文件中提取视频流信息. 首先利用函数av_find_stream_info( )将文件中的流信息提取出来, 再循环判断提取出的流信息, 找到类型为MEDIA_TYPE_VIDEO的视频流, 进而通过avcodec_find_decoder( )函数查找视频流相对应的解码器.

(4) 获取图像. 根据视频流信息中的codec_id找到相应的解码器, 通过函数avcodec_open2()函数打开解码器, 利用函数av_frame_alloc( )为解码帧分配内存, 并通过av_read_frame()函数从流数据中一帧一帧的提取数据, 进而通过函数avcodec_decode_video2()对视频帧进行解码, 这样就获得了YUV420格式的图像数据.

(5) 显示图像. 对于图像的显示需要利用Qt的控件来实现, 首先需要将解码之后的YUV数据转换成RGB32格式的数据, 同时将转换后的RGB32数据存入QImage对象中, 在主线程中通过Qpainter直接绘制.

(6) 解码完成, 释放解码器, 关闭视频文件.

3.5 高炉数模的三维动态展示

智能炼铁配料系统可以加载STL、OBJ等多种常见格式的三维模型, 并可对加载后的模型进行放大、缩小、还原、移动、旋转等操作. OpenGL即开放性图形库, 是一个三维的计算机图形和模型库. OpenGL适用于多种硬件平台及操作系统, 用户用这个图形库不仅能方便的制作出有极高质量的静止三维彩色图像, 还能创建出高质量的动画效果[12]. 由于在Qt5.5以上的版本已经集成了OpenGL, 本系统直接利用Qt封装好的OpengGL库. 由于不同种类的文件格式有很多, 它们之间通常并没有一个通用的结构, 因此需要利用一个非常流行的模型导入库Assimp. Assimp能够导入很多种不同的模型文件格式, 它会将所有的模型数据加载至Assimp的通用数据结构中, 进而将这些数据转换为OpenGL能够理解的格式. 利用Assimp解析模型文件和OpenGL展示的基本流程分为以下几步:

图 7 高炉流动动画

(1) 创建OpenGL窗口. 虚函数initializeGL()中自定义初始化视口的大小、背景、平滑、深度缓存等参数.

(2) 构造并且编译着色器. 着色器是使用一种叫GLSL的类C语言写成的. GLSL是为图形计算量身定制的, 它包含一些针对向量和矩阵操作的有用特性. 本系统编写了一个顶点着色器和一个片段着色器, 用来对模型文件网格进行渲染. 顶点着色器主要功能为对场景中的物体进行矩阵变换, 将物体的位置信息转换为屏幕位置; 片段着色器主要功能为计算每个片段的颜色值, 对每个片段进行着色.

(3) 提取模型文件网格. 网格代表的是单个可绘制的实体, 一个模型文件包含一个或多个网格. 首先声明一个importer对象, 调用它的ReadFile()函数获得assimp中的数据结构—scene对象. scene对象中的节点符合递归结构, 每个节点包含一个网格集合的索引, 每个索引指向一个场景中特定的网格位置. 递归遍历场景节点, 检查每个节点的网格索引以获取相应的网格并将网格对象存储起来.

(4) 将assimp提取的网格对象转换为自己定义的网格对象. 访问提取出来的网格对象的相关属性, 包括所有的顶点数据、网格索引和相关的材质数据, 将这些数据储存在三个vector中, 并将其构建一个自定义的网格对象.

(5) 三维模型移动、旋转、放大和缩小的实现. OpenGL本身没有摄像机的概念, 本系统通过把场景中的所有物体往相反方向移动的方式模拟出摄像机, 产生一种物体在移动的感觉, 而不是场景在移动. 首先初始化一个摄像机对象, 即定义一个摄像机位置, 一个目标位置和一个表示世界空间中的上向量的向量. 接着利用GLM (OpenGL Mathematics)库创建一个LookAt矩阵, 将该矩阵当作观察矩阵. 对物体进行移动, 构造模型矩阵变换摄像机位置向量; 对物体的旋转, 通过鼠标移动获得偏航角和俯仰角, 再计算出真正的方向向量, 进而变换目标位置向量; 对物体的缩放, 根据滚轮获得参数, 调用glm::perspective函数去将透视投影矩阵上传到GPU, 达到放缩视野的目的.

(6) 绘制模型到窗口. 遍历存储的自定义的网格对象, 通过函数glBindVertexArray绑定VAO (Vertex Array Object), 再利用函数glDrawArrays绘制当前网格, 最后函数glBindVertexArray解除绑定.

图 8 高炉模型加载

4 结束语

现在国内炼铁行业同质化竞争现象越来越严重, 低炼铁成本变得尤为重要. 基于宝钢中央研究院的需求合作研发的智能炼铁配料系统, 其具备跨平台, 操作简单, 降低炼铁成本, 多元化的辅助功能等特点, 可以满足工程人员对于炼铁优化系统的需求, 为实际生产提供理论依据和技术支持.

参考文献
[1]
李刚. 浅谈现阶段钢铁企业的铁前降成本. 2017年低成本炼铁技术研讨会论文集. 绍兴, 2017. 75.
[2]
徐明晗. 高炉炼铁成份配料优化与系统开发[硕士学位论文]. 北京: 北京化工大学, 2015.
[3]
张瑞军, 黄彦. 基于专家系统的多角色烧结配矿决策支持系统. 计算机工程, 2011, 37(19): 233-235, 238. DOI:10.3778/j.issn.1002-8331.2011.19.065
[4]
罗震宇. 基于最低成本的烧结矿配比计算. 冶金自动化, 2017, 41(1): 34-36.
[5]
王家军, 张晓冬, 朱进, 等. 采用线性规划法的烧结原料配料优化. 河北冶金, 2017(2): 35-37.
[6]
车蓉, 毛小浩, 王海峰. 烧结矿配料优化计算模型的设计. 贵州工业大学学报(自然科学版), 2006, 35(2): 10-13, 17.
[7]
熊义杰, 曹龙. 运筹学教程. 北京: 机械工业出版社, 2015.
[8]
王炜, 陈畏林, 贾斌, 等. 基于线性规划和神经网络的优化烧结配料系统开发. 烧结球团, 2006, 31(1): 27-30. DOI:10.3969/j.issn.1000-8764.2006.01.007
[9]
张建. 浅析高炉炼铁的合理配矿. 企业导报, 2012(23): 273.
[10]
何建坤. 实用线性规划及计算机程序. 北京: 清华大学出版社, 1985.
[11]
滕志军, 徐艳伟. 基于Qt的跨平台多媒体播放器的设计与实现. 东北师大学报(自然科学版), 2015, 47(4): 59-63.
[12]
王金峰, 姚国清. 三维模型文件中的OBJ格式在OpenGL中的输入与处理. 电脑知识与技术, 2011, 7(10): 2393-2396, 2399. DOI:10.3969/j.issn.1009-3044.2011.10.067