﻿ 基于线性规划的智能炼铁配料系统
 计算机系统应用  2019, Vol. 28 Issue (4): 83-89 PDF

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

1 相关技术 1.1 线性规划

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

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

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

1.2 单纯形法

1.3 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)成分条件约束

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

2)配比约束

3)平衡约束

2.3 单纯形法求解

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

(2) 不等式约束的转换

∑aijxjbi, 加入松弛变量;

∑aijxjbi, 减去剩余变量.

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

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

3.1 炼铁数据的管理

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

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

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

 图 2 读入基准案例

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

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

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

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

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

 图 3 线性规划公式文件

 图 4 烧结配料优化

3.3 炼铁数据的二维展示

 图 5 折线图

 图 6 柱状图

3.4 高炉数模的二维展示

(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 高炉数模的三维动态展示

 图 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