APP下载

粮仓建筑气密性预测软件的开发

2020-01-14郭治洪童沪琨张梦歌刘震华李建平陈光中

工程建设与设计 2020年1期
关键词:气密性粮仓向量

郭治洪,童沪琨,张梦歌,刘震华,李建平,陈光中

(1.河南工业大学信息科学与工程学院,郑州450001;2.河南工业大学土木建筑学院,郑州450001)

1 引言

粮仓建筑的气密性对于储粮安全具有重要意义,在以往的粮仓建筑设计中,缺乏针对粮仓设计方案与粮仓气密性的关系进行量化分析的工具,粮仓设计人员在进行粮仓建筑气密性设计时需要可供参考的依据[1]。本研究试图建立粮仓设计特征变量与粮仓气密性的回归模型,开发出可以根据影响粮仓气密性的相关因素对粮仓气密性进行提前预估的软件,方便粮仓设计人员依照粮仓气密性预测结果改进设计方案,提高储粮的安全性,减少粮食产后损失。

建立粮仓建筑设计方案特征变量与粮仓气密性指标的回归模型需要一定数量的已建成粮仓的气密性数据,由于受到人力和财力限制,已建成粮仓的气密性数据为小样本数据。在文献[1]中,支持向量机和bootstrap 方法相结合,将影响粮仓气密性的特征变量值进行归一化和Onehot 编码,建立回归模型进行气密性区间预测,测试表明,粮仓气密性的区间预测取得了较好的效果。该软件的计算方法是:一方面,采用支持向量机建立粮仓气密性回归模型,利用该回归模型对粮仓气密性指标进行点预测;另一方面,将粮仓气密性回归模型与bootstrap 方法相结合,实现对粮仓气密性指标的区间预测,区间预测采用了文献[1]提出的方法。

由台湾大学林智仁先生开发的LIBSVM 支持向量机工具箱[2]被广泛应用于工业、农业、交通、电力、医学等多学科研究分析预测过程中[3~6]。为方便设计人员预测粮仓设计方案的气密性,本研究使用LIBSVM 工具箱,并采取C++ GUI 框架Qt与MATLAB 混合编程相结合的方式开发了应用软件EAGDS 1.0,混合编程可以把MATLAB 强大的计算能力和Qt 优秀的软件界面设计性能结合起来[7,8]。本研究的软件界面设计美观实用,简约大方,操作方便。该软件使用多线程加速技术[9]防止卡顿,能够让使用者获得良好的体验。为了确保数据安全,该软件加入正则表达式功能对用户输入进行限制[10],使用异常警告来提示突发情况,帮助使用者分析和解决问题。软件使用界面如图1 所示。

图1 EAGDS 1.0 软件界面图

2 计算原理

2.1 数据预处理

数据集合表现为矩阵形式,矩阵每一行为一条数据,每一列与一个变量相对应。粮仓设计特征变量包括数值变量和种类变量,数值变量的变量值可以比较大小和排序,如墙厚、建筑面积等;种类变量的变量值不可比较大小和排序,如仓型、屋盖类型等。

在数据预处理阶段,对数值变量数据进行归一化,归一化计算公式如下:

式中,xij表示矩阵中第i行第j列的数据;x′i表示归一化后的数据表示第j列的最小值;makx(xk)j表示第j列的最大值。

用公式(1),将数值变量值映射到区间[0,1]。

对于种类变量,采取Onehot 编码[11],例如,有3 个种类,则第1 类编码为(1,0,0),第2 类编码为(0,1,0),第3 类编码为(0,0,1)。

2.2 支持向量机

支持向量机是一种基于统计学的机器学习算法,能够有效地处理小样本数据,可以避免局部最小值,具有较好的泛化能力[12,13]。支持向量机可以完成分类、回归和分布估计等任务。本研究采用LIBSVM 工具箱建立粮仓设计特征变量与气密性的回归模型,气密性指标为500Pa 压力半衰期[14]。

2.3 boot st r ap 方法

bootstrap 方法由美国统计学家Efron 系统地提出[15]。bootstrap 应用了有放回抽样技术,可以用于机器学习模型的区间预测[16,17]。本研究采用支持向量机回归模型结合bootstrap 方法对粮仓气密性进行区间预测。

3 软件开发

3.1 Qt 和MATLAB混合编程

在Qt 和MATLAB 混合编程前,应该根据MATLAB 版本选择合适的C++编译器和Qt 版本,在本研究中,采用较新的MATLAB 2016b 版本,该版本支持与VS2015(对应Qt 版本5.9.3)进行混合编程,在安装相关软件后应该对MATLAB 进行设置。操作方法是在MATLAB 命令窗口输入mbuild-setup 配置MATLAB 编译器,选择C++编译模式进行开发。

MATLAB 可以导出dll 动态链接库与Qt 进行调用,利用MATLAB 完成算法运算,Qt 的界面显示和交互数据输入输出,从而满足研究使用[18]。

由于Qt 是基于C++的开源库,C++是面向对象(OOP)的开发语言,在软件开发过程中应该以面向对象方式进行开发,配合Qt 的信号与槽函数机制使用。因此,要将之前的MATLAB 流程化代码改成模块化代码,在本研究中,笔者将计算部分拆分成4 个模块:(1)使用已有模型进行点预测模式;(2)重新训练模型进行点预测模式;(3)使用已有模型进行区间预测模式;(4)重新训练模型进行区间预测模式。这4 个模块分别对应软件流程图的4 条路线(见图2)。

图2 EAGDS 1.0 软件流程图

在Qt 与MATLAB 编程中,MATLAB 导出含有头文件动态运行库,需要将该头文件加入到Qt 的项目工程中,同时通过#include <calc.h>头文件的方式进行调用(calc 这里只是实例名称,实际研究可能不同),MATLAB 调用传递参数由mxArray 进行声明,声明时要有该变量的种类和数值范围,如含有多个实数(mxREAL)浮点矩阵类(mxDOUBLE_CLASS)。

3.2 Qt 信号槽机制介绍

信号槽是Qt 的核心机制,信号就是发生某种动作的条件,槽函数是满足条件要执行运算的函数[19,20]。例如,在Qt 中按下界面的按钮就发送一个信号,信号发出后由槽函数接收并且进行响应,槽函数可以是计算任务、网络操作、消息事件的发出。在本研究中,笔者使用了大量信号槽机制来确保软件的正常工作。

3.3 LI BSVM库的配置

LIBSVM 库下载后解压,改变MATLAB 工作目录并进入库的根目录,运行make 命令进行编译,将编译好的库添加到MATLAB 搜索路径中。

3.4 动态链接库建立

在MATLAB 中,输入deploytool 命令打开开发工具对话框,选择第三个库编译器(Library Compiler),打开动态链接库生成器,选择C++动态链接库后,加入MATLAB 计算源码文件*.m,等待软件链接库的打包。

打包之后会产生一个头文件.h,一个编译用静态符号库.lib,动态链接库.dll,编辑Qt 的项目文件,添加头文件和动态链接库文件,并且同时添加MATLAB 的基础库文件(见图3)。

3.5 软件功能的开发

对于本研究中软件不同的预测类型、支持向量机训练模型方式的选择,会产生不同的计算结果,表1 展示了预测类型,支持向量机训练模型方式及计算结果的评价指标。

在本软件中,笔者使用QButtonGroup 作为功能模式的选择菜单,使用QLineEdit 作为用户的抽样数据输入控制,使用QTextBrower 作为计算结果的输出。在不同功能模式按钮下,笔者使用了多个槽函数控制预测结果的显示模式[21];同时为了限制用户输入,笔者在用户输入框使用正则表达式确保输入符合取值范围,保证用户结果的准确;为了能够提示异常情况的发生,笔者利用MATLAB 对数据进行了判断处理,设置信号变量传递Qt 程序用以判断响应,提示使用者注意[22];软件还加入了数据文件自检的功能,当文件不存在时会告知用户软件受到损坏将无法使用。

图3 Qt 工程项目配置MATLAB链接库

表1 软件功能表

3.6 多线程的使用

本研究开发的第一代软件实现了软件的主要功能,但在测试使用中发现软件在计算时主界面会卡死并出现崩溃的情况,使用者无法在界面得到软件计算提示,重新得到响应需等待计算过程结束,严重影响了使用者的体验。这是由于主界面和计算功能共同使用一个线程,使用多线程可以避免这类情况。

在本研究开发第二代软件中,笔者使用计算线程和界面主线程分开的方式分别完成不同的功能。在计算线程中完成MATLAB 计算接口的调用,使用自定义信号变量和槽函数告知计算功能的完成和异常情况的发生,该计算线程的定义如图4 所示,界面主线程只负责执行与用户交互动作的功能。经过实验和测试,使用多线程编程起到了很好的效果。

图4 计算线程的定义

4 结语

本研究开发的粮仓气密性预测软件EAGDS 1.0 使用了支持向量机和bootstrap 对粮仓气密性数据进行建模分析,可以对新建粮仓气密性进行预测,以便设计人员改进设计,提高储存粮食的质量,保证储存粮食的安全,减少不必要的损失。本研究根据相关的算法开发出计算预测软件,该软件界面友好,简洁易用,使得研究结果具有较好的实用性和推广应用价值。

猜你喜欢

气密性粮仓向量
好粮仓就是硬底气
向量的分解
车门气密性对风噪的影响分析
撂荒地变粮仓 有机种植出效益
关于布袋除尘器气密性试验新方法的研讨
聚焦“向量与三角”创新题
某排气系统球铰气密性仿真分析
粮仓
检查气密性方法有多种
树懒的粮仓