2017年MathorCup数学建模A题流程工业的智能制造解题全过程文档及程序

news2024/9/25 7:15:33

2017年第七届MathorCup高校数学建模挑战赛

A题 流程工业的智能制造

原题再现:

  “中国制造 2025”是我国制造业升级的国家大战略。其技术核心是智能制造,智能化程度相当于“德国工业 4.0”水平。“中国制造 2025”的重点领域既包含重大装备的制造业,也包含新能源、新材料制造的流程工业。
  在流程工业中,钢铁冶金,石油化工等行业是代表性的国民经济支柱性产业。其生产过程的系统优化与智能控制的目标函数包括节能,优质,低耗,绿色环保等多目标要求。为了实现这样的优化目标,生产过程智能控制的关键技术就要从原来的反馈控制进一步升级为预测控制。即通过生产工艺大数据的信息物理系统(Cyber Physical System)建模,通过大数据挖掘,确定生产过程的最佳途径与最佳参数控制范围,预测性地动态调整生产过程控制,获得最佳生产效果。
  以高炉冶炼优质铁水为例,高炉炼铁过程是按加料顺序由高炉顶部加入矿石和焦炭等原燃料,由高炉下部连续鼓入热风、喷入煤粉进行炉温调整的冶炼过程。从原燃料炉顶加入,到冶炼成炉渣和铁水,其冶炼周期 6-8 小时。而高炉每经过2 小时就出渣、出铁一次。并且化验得到此次出铁的铁水与炉渣的化学成分。因此,前后两炉铁水含硅量,即炉温之间是具有相关性的。炼铁过程是一个离散加入,连续冶炼,离散输出的复杂生产过程。
  炼铁过程的机理既包含由热平衡/物料平衡约束的化学反应过程,也包括由三相流体动力学混合的物理运动过程。因此完整的冶炼过程机理模型是一个由代数方程组和偏微分方程组构成的复杂数学模型,模型方程如下:
在这里插入图片描述
  从机理上求解上述混合动力学方程组的最优解是尚未解决的数学难题。因此,通过大数据的数据挖掘技术对其进行过程优化是一条可行的求解途径。
  炼铁过程依时间顺序采集的工艺参数是一个高维的大数据时间序列。影响因素数以百计。其终极生产指标产量、能耗、铁水质量等指标都与冶炼过程的一项控制性中间指标——炉温,即铁水含硅量[Si](铁水含硅质量百分数)密切相关。对 2 小时后或 4 小时后高炉炉温上升或下降的预测,即[Si]时间序列的预测关系着当前高炉各项操作参数的调控方向。因此,[Si]的准确预测控制建模成为冶炼过程优化与预测控制的关键技术。
  为了简化问题,本项目仅提供由铁水含硅量[Si]、含硫量[S]、喷煤量 PML和鼓风量 FL 组成的数据库作为数学建模分析和数据挖掘的基础。序号 N 既是数据序列的序号,其实也是高炉出铁时间的顺序序号。
  本课题数学建模的要求是:
  (1)从给定数据表中[Si]-[S]-FL-PML 依序号排列的 1000 炉生产大数据中,自主选取学习样本和算法,建立[Si]预测动态数学模型,包括一步预测模型和二步预测模型。全面论述你的数学建模思路。
  (2)自主选取验证样本,验证你所建立的数学模型的预测成功率。包括数值预测成功率和炉温升降方向预测成功率。并且讨论其动态预测控制的可行性。
  (3)以质量指标铁水含硫量[S]为例,含硫量低,铁水质量好,可以生产优质钢,制造优质装备。试建立质量指标[S]的优化数学模型,并且讨论按照优化模型计算结果进行[Si]预测控制的预期效果。
  (4)讨论你所建立的复杂流程工业智能控制大数据建模的心得体会。

在这里插入图片描述

整体求解过程概述(摘要)

  在我国制造业升级“中国制造 2025”的国家战略下,为了预测控制高炉炼铁过程,本文建立了神经网络预测模型、混沌时间序列预测模型,并基于遗传算法(GA)改进了神经网络模型,使用粒子群算法(PSO)优化了含硫量[S]。
  针对问题一,首先,本文对附件所给数据进行了数据预处理,剔除了异常值并归一化,得到 932 组有效数据。然后,建立 BP 神经网络预测模型预测了含硅量[Si],并分析了含硅量[Si]、含硫量[S]、鼓风量 FL 和喷煤量 PML 之间的相关性。其次,建立了小波神经网络预测模型和遗传算法(GA)优化的 BP 神经网络预测模型,并比较了三者优劣。接着,选取训练样本数据 922 组,验证样本数据 10 组,发现遗传算法优化的 BP 神经网络预测模型和小波神经网络预测模型预测效果较好,BP 神经网络预测模型较差。最后,本文建立了混沌时间序列预测模型,并对含硅量[Si]进行了混沌局部线性一步预测和二步预测。
  针对问题二,首先,本文选取了 922 组数据作为训练样本,10 组数据作为验证样本,将传统的 BP 神经网络预测模型、小波神经网络模型预测模型、基于遗传算法优化 BP 神经网络预测模型和混沌时间序列预测模型,分别预测后 10炉次含硅量[Si]的结果与实际值进行对比,计算得到:BP 预测成功率为 20%,小波预测为 70%,GA+BP 预测为 60%,混沌预测为 80%。其次,通过不同的模型分别预测了后 10 炉次含硅量[Si]的结果,预测了炉温升降方向,计算得到:BP预测成功率为 40%,小波预测为 100%,GA+BP 预测为 100%,混沌预测为 100%。最后,通过讨论神经网络训练函数的选取、神经网络性能参数的设定与混沌时间
序列预测邻域半径的选取,分析了动态预测控制的可行性。
  针对问题三,首先,本文根据遗传算法(GA)优化 BP 神经网络的预测模型,预测了含硫量[S],并找出了含硫量[S]与含硅量[Si]、鼓风量 FL 和喷煤量 PML之间的关系。然后,本文使用粒子群算法(PSO)优化了含硫量[S],得出当鼓风量归一化后 FL=0.7012 和喷煤量 PML=0.0809 时,含硫量[S]有最小值。最后,本文分析了在含硫量[S]最优条件下,预测控制含硅量[Si]的预期效果,在含硫量[S]取最小值时,预测到此时含硅量[Si]较小,为 0.5712。
  针对问题四,我们结合建模背景、求解模型所得结果与分析结果所得结论,根据复杂流程工业智能控制的意义,浅谈了建模的心得体会。通过大数据挖掘,我们可以确定生产过程的最佳途径与最佳参数范围,获得最佳生产效果。

模型假设:

  (1)假设在混沌局部线性预测中,邻域ε的选取客观准确,主观性较小。
  (2)假设在混沌局部线性预测中,局部特性可以准确代表整体特性。
  (3)假设在神经网络预测中,输入变量作为网络的第一层合理有效。
  (4)假设附件中提供的数据及所使用的数据都真实准确。
  (5)假设铁水含硅量[Si]、含硫量[S]、喷煤量 PML 和鼓风量 FL 组成的数据能代表高炉炼铁过程,体现高炉炼铁特性。

问题分析:

  问题一的分析:在问题一中,题目要求我们从给定数据表中[Si]-[S]-FL-PML依序号排列的 1000 炉生产大数据中,自主选取学习样本和算法,建立[Si]预测动态数学模型,包括一步预测模型和二步预测模型。其中的一步预测模型和二步预测模型指的是预测步长分别取 1 和 2,前后两炉铁水含硅量,即炉温之间是具有相关性的。这里的学习样本不能是全部的 1000 炉生产大数据,因为问题二中需要我们验证所建立的数学模型的预测成功率,所以不能选择全部数据来训练,只能选择一部分数据来学习训练。至于建模的算法,需要结合问题本身来选择。
  问题二的分析:在问题二中,题目要求我们自主选取验证样本,验证我们所建立的数学模型的预测成功率,包括数值预测成功率和炉温升降方向预测成功率。并且讨论其动态预测控制的可行性。我们需要从 1000 炉生产大数据中剩下未学习训练的数据中,选取验证样本,验证包括[Si]含量和炉温升降方向的成功率。难点在于讨论其动态预测控制的可行性,以及如何提高算法的预测成功率。
  问题三的分析:在问题三中,题目要求我们以质量指标铁水含硫量[S]为例,含硫量低,铁水质量好,可以生产优质钢,制造优质装备。试建立质量指标[S]的优化数学模型,并且讨论按照优化模型计算结果进行[Si]预测控制的预期效果。通过大数据挖掘,确定生产过程的最佳途径与最佳参数控制范围,预测性地动态调整生产过程控制,获得最佳生产效果,建立优化模型,讨论对[Si]的预测控制。
  问题四的分析:在问题四中,题目要求我们讨论我们所建立的复杂流程工业智能控制大数据建模的心得体会,这需要结合我们模型的结果和背景来讨论。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:(代码和文档not free)

The actual procedure is shown in the screenshot

 1 def BP(sampleinnorm, sampleoutnorm,hiddenunitnum=3):                       
 2     # 超参数
 3     maxepochs = 60000                                       # 最大迭代次数
 4     learnrate = 0.030                                       # 学习率
 5     errorfinal = 0.65*10**(-3)                              # 最终迭代误差
 6     indim = 3                                               # 输入特征维度3
 7     outdim = 2                                              # 输出特征唯独2
 8     # 隐藏层默认为3个节点,1层
 9     n,m = shape(sampleinnorm)
10     w1 = 0.5*np.random.rand(hiddenunitnum,indim)-0.1        #8*3维
11     b1 = 0.5*np.random.rand(hiddenunitnum,1)-0.1            #8*1维
12     w2 = 0.5*np.random.rand(outdim,hiddenunitnum)-0.1       #2*8维
13     b2 = 0.5*np.random.rand(outdim,1)-0.1                   #2*1维
14 
15     errhistory = []
16 
17     for i in range(maxepochs):
18         # 激活隐藏输出层
19         hiddenout = sigmod((np.dot(w1,sampleinnorm).transpose()+b1.transpose())).transpose()
20         # 计算输出层输出
21         networkout = (np.dot(w2,hiddenout).transpose()+b2.transpose()).transpose()
22         # 计算误差
23         err = sampleoutnorm - networkout
24         # 计算代价函数(cost function)sum对数组里面的所有数据求和,变为一个实数
25         sse = sum(sum(err**2))/m                                
26         errhistory.append(sse)
27         if sse < errorfinal:                                    #迭代误差
28           break
29         # 计算delta
30         delta2 = err
31         delta1 = np.dot(w2.transpose(),delta2)*hiddenout*(1-hiddenout)
32         # 计算偏置
33         dw2 = np.dot(delta2,hiddenout.transpose())
34         db2 = 1 / 20 * np.sum(delta2, axis=1, keepdims=True)
35 
36         dw1 = np.dot(delta1,sampleinnorm.transpose())
37         db1 = 1/20*np.sum(delta1,axis=1,keepdims=True)
38 
39         # 更新权值
40         w2 += learnrate*dw2
41         b2 += learnrate*db2
42         w1 += learnrate*dw1
43         b1 += learnrate*db1
44 
45     return errhistory,b1,b2,w1,w2,maxepochs
import numpy as np
#定义激活函数
def sigmoid(x,deriv=False):
    if deriv == True:
        return x*(1-x)
    return 1/(1+np.exp(-x))
x = np.array([[0,0,0],[0,1,1],[1,0,1],[0,0,1],[0,0,1]])
print(x.shape)
#指定label值
y = np.array([[0],[1],[1],[0],[0]])
print(y.shape)
#指定随机化种子,使得每次随机值一样
np.random.seed(1)
#定义三层的神经网络
w0 = 2*np.random.random((3,4)) - 1
w1 = 2*np.random.random((4,1)) - 1
print(w0)
print(w1)
for j in range(6000):
    l0 = x
    l1 = sigmoid(np.dot(l0,w0))
    l2 = sigmoid(np.dot(l1,w1))
    #真实值-预测值
    l2_error = y - l2
    if j%1000 == 0 :
        print("error"+str(np.mean(np.abs(l2_error))))
    l2_delta = l2_error*sigmoid(l2,deriv=True)
    l1_error = l2_delta.dot(w1.T)
    l1_delta = l1_error*sigmoid(l1,deriv=True)
    #更新w0 w1
    w1 += l1.T.dot(l2_delta)
    w0 += l0.T.dot(l1_delta)

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis小demo讲解(详细demo版)

这篇是mybatis的demo演示版噢&#xff0c;如果要了解理论的可以参考这篇哈mybatis从入门到精通好了&#xff0c;我们开始咯 MyBatis小demo1.简单的mybatis小案例1. 创建项目、准备环境2. mybatis的两种实现方式2.1 映射文件Mapper.xml实现1.简单的mybatis小案例 1. 创建项目、…

ESP8266与手机App通信(STM32)

认识模块 ESP8266是一种低成本的Wi-Fi模块&#xff0c;可用于连接物联网设备&#xff0c;控制器和传感器等。它具有小巧、高度集成和低功耗的特点&#xff0c;因此在物联网应用中被广泛使用。ESP8266模块由Espressif Systems开发&#xff0c;具有单芯片的封装和多种功能&#x…

Linux--磁盘存储管理 分区工具 fdisk 了解

对于磁盘存储&#xff0c;既然要管理&#xff0c;要分区&#xff0c;那必然就少不了要 分区的工具对于分区工具&#xff0c;常用的有三个&#xff0c;fdisk 、gdisk、parted ~&#xff01;&#xff01;本次&#xff0c;先介绍下 fdisk 分区工具 在介绍 fdisk 工具之前&#xff…

【UE4 RTS游戏】05-自定义日期和时间

效果步骤打开项目设置&#xff0c;重新设置玩家状态类为“MyGameState”打开“MyGameState”&#xff0c;点击类设置&#xff0c;选中父类为“GameStateBase”接着创建一些变量&#xff1a;&#xff08;1&#xff09;“TimeUnit”&#xff0c;浮点型&#xff0c;私有&#xff0…

线程同步——管程

管程是允许线程具有互斥、等待&#xff08;堵塞&#xff09;某个条件为false的能力的同步结构。具有通知其他线程他们特定条件已经满足的机制。管程为线程提供了可以暂时放弃独占访问&#xff0c;以便在重新获得独占访问并恢复任务之前等待满足某些条件。 管程有互斥锁以及特定…

趣味三角——第15章——傅里叶定理

第15章 傅里叶定理(Fourier’s Theorem) Fourier, not being noble, could not enter the artillery, although he was a second Newton. (傅立叶出生并不高贵&#xff0c;因此按当时的惯例进不了炮兵部队&#xff0c;虽然他是第二个牛顿。) —Franois Jean Dominique Arag…

Mini Pupper在ROS中的仿真

Mini Pupper在ROS中的仿真 课程概述 在这个课程中&#xff0c;你将会学习Mini Pupper结合Rivz和Gazebo的实例应用。你将使用Rviz可视化机器人模型&#xff0c;并在Gazebo仿真环境中实现Mini Pupper的键盘移动控制&#xff0c;然后带着Mini Pupper在你搭建的虚拟世界中散步。 关…

dorcker与vlu靶场搭建

dorcker与vlu靶场搭建 dorcker安装 以kali linux 为例 安装必要的一些系统工具 apt update apt -y install apt-transport-https ca-certificates curl software-properties-common 添加Docker PGP key curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg …

【JavaSE】数组的定义与使用详解

目录 1.数组的基本概念 1.1数组的好处 1.2什么是数组 1.3数组的定义及初始化 1.3.1数组的创建 1.3.2数组的初始化 1.4数组的使用 1.4.1访问数组中的元素 1.4.2遍历数组 2.数组的类型 2.1认识JVM的内存分布 2.2基本类型变量与引用类型变量 2.3认识null 3.数组的应…

(蓝桥真题)分果果(动态规划)

题目链接&#xff1a;P8746 [蓝桥杯 2021 省 A] 分果果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例1输入&#xff1a; 5 2 6 1 2 7 9 样例1输出&#xff1a; 0 样例2输入&#xff1a; 5 5 6 1 2 7 9 样例2输出&#xff1a; 2 分析&#xff1a;这道题的状态表…

第十二章 opengl之模型加载(Assimp)

OpenGLAssimp模型加载库构建Assimp网格网格渲染Assimp 我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。我们要的是将这些模型(Model)导入(Import)到程序当中。模型通常都由3D艺术家在Blender、3DS Max或者Maya这样的工具中精心制…

备份时间缩短为原来 1/4,西安交大云数据中心的软件定义存储实践

XEDP 统一数据平台为西安交通大学云平台业务提供可靠的备份空间和强大的容灾能力&#xff0c;同时确保数据安全。西安交通大学&#xff08;简称“西安交大”&#xff09;是我国最早兴办、享誉海内外的著名高等学府&#xff0c;是教育部直属重点大学。学校现有兴庆、雁塔、曲江和…

strace 用法介绍

strace 是什么 strace 是一个可用于诊断和调试的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互&#xff0c;比如系统调用、信号传递、进程状态变更等。 strace 作为一种动态跟踪工具&#xff0c;能够帮助我们高效地定位进程和服务故障。它像是一个侦探&…

企业电子招投标采购系统源码之系统的首页设计

​​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

ThreadLocal解析

ThreadLocal是一个存储线程本地变量的对象&#xff0c;在ThreadLocal中存储的对象在其他线程中是不可见的&#xff0c;本文介绍ThreadLocal的原理。 1、threadLocal使用 有如下代码&#xff1a; Slf4j public class TestThreadLocal {public static void main(String[] args…

干货!设备管理包括哪些内容?

本文将为您介绍&#xff1a;1、设备管理的内容有哪些2、好用的设备管理软件&#xff1b; 设备管理在企业管理中非常重要&#xff1a;设备是企业安全生产的前提&#xff0c;没有安全生产&#xff0c;一切工作都可能是无用功&#xff1b; 而好的设备管理可以极大地提高生产效率…

【数据库】MySQL数据库约束(六大约束)

目录 1.数据库约束 1.1约束类型 1.2 非空约束&#xff08;NOT NULL &#xff09; 1.3 唯一约束&#xff08;UNIQUE&#xff09; 1.4默认值约束&#xff08;DEFAULT &#xff09; 1.5主键约束&#xff08;PRIMARY KEY&#xff09; 1.6外键约束&#xff08;FOREIGN KEY &…

安全漏洞修复帖

对于项目漏洞都是一堆又不重要又很重要的事情一、修复HTTP 响应头缺失NginxTomcat响应头&#xff1a;值二、会话 Cookie 中缺少 secure 属性三、Html form 表单没有 CSRF 防护Security的示例Shiro的示例四、Host 头攻击NginxTomcatApache五、开启 options 方法一、修复HTTP 响应…

【设计模式】适配器模式和桥接模式

适配器模式 适配器模式 : 就是将一个类的接口变成客户端所期望的另一种接口&#xff0c;使得原本因为接口不匹配而无法一起工作的接口可以正常工作。属于结构型模式 比方说我有一个A牌子的奶瓶&#xff0c;然后买了个B牌子的奶嘴&#xff0c;不能匹配怎么办? 再买一个转换器…

Python3-输入和输出

Python3 输入和输出 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法&#xff0c;标准输出文件可以用 sys.stdout 引用。 如果你希望输出的形式更加多样&#xff0c;可以使用 str.format() 函数来格式化输出值。…