我在前段时间做了一个试点项目:使用数据挖掘技术改进工艺参数从而提升铅粉机产量;现将项目中的主要过程进行复盘。

一、客户: 客户是一家生产汽车启停电池的公司

二、工艺:铅酸蓄电池第一阶段是生产铅粉。生产过程简单来说,是先将铅锭切成铅粒,再将铅粒投入滚筒中,滚筒保持一定的转速使得铅粒之间摩擦放热,铅粒表面氧化形成结晶体,脱落后即形成铅粉。

三、主要生产设备:铅粒制造及储存系统、铅粉制造及储存系统、铅粉输送及储存系统

四、工艺参数:主机功率、铅粒仓重量、进口风压、滚筒重量、出粉口温度、布袋温度、布袋袋压差、绝对过滤器压差、系统风压、环境温度、环境湿度

五、数据采集:采集PLC数据存入数据库,每分钟一条,共收集了三个月的数据

六、工艺原理学习,为了了解铅粉生产的原理细节和问题,先在现场跟工人师傅观察、提问;然后买了两本书查阅相关资料。

七、建模思路:

1、先收集一个月的工艺参数数据建模(产量作为标签,其他变量(主机功率、铅粒仓重量、进口风压、滚筒重量、出粉口温度、布袋温度、布袋袋压差、绝对过滤器压差、系统风压、环境温度、环境湿度)作为影响变量),然后将“进口风压”、“滚筒重量”作为求解量输出(遗传算法);工人根据模型输出值进行操作。

2、设备中并没有直接的产量数据,因此该数据需要计算求得,比如:一分钟的产量=上一分钟滚筒重量-下一分钟滚筒重量;滚筒重量减少是因为铅变成了铅粉然后被输送至料仓中。

3、特征工程:步骤四提到的参数都是与产量相关的,而且参数很少,没有必要做降维之类的特征工程

4、工艺特性-时滞:铅粉生产是存在时滞性的(这也是流程工业的特点),现场工人也不知道这个值准确是多少,因此在后续的建模中,这个因素会不断验证直到找到最佳的值(最后不断测试发现设为30分钟的话模型效果比较好)

5、数据、清洗:从数据库导出成CSV格式,在表格中直接删掉空值、异常值

6、关于工艺质量:客户提了一个需求,要在符合质量的前提下提高产量,因此还要建立一个质量模型;铅粉质量特性主要是“氧化度”,该值会影响电池的性能

7、算法思路:1、先建立影响变量与产量的模型,数据是时序性的,这类问题建模用循环神经网络比较合适,RNN、LSTM、GRU都试一遍 2、找到工艺参数最优值,优化算法用遗传算法,评价函数即神经网络模型预测值(优化[进口风压、滚筒重量]使得产量最大)

下面贴出Python建模代码:

一、使用Keras直接建模循环神经网络模型;前面还有很多预处理的代码,篇幅所限就不贴出了。

from keras.models import Sequential
from keras.layers import Dense ,LSTM,Dropout
from keras.optimizers import SGDmodel = Sequential()
model.add(LSTM(5,activation='relu',return_sequences=True), input_shape=(40, 10))
model.add(Dropout(0.01))
model.add(LSTM(5,return_sequences=True))
model.add(LSTM(5,return_sequences=True))
model.add(LSTM(5))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.fit(trainset_scalex,trainset_scaley,epochs=50,batch_size=64,verbose=1)

经过上百次实验后,发现一些规律:

1、GRU模型精确度比较高,且收敛速度快

2、优化器用adma效果最好

3、正则化dropout不稳定,有时精确度高,有时偏离比较多

4、3层或4层网络比较合适,超过4层的模型表现不好

5、cell值在3-5之间比较合适

6、激活函数用relu,模型效果和速度都最好;我以后的项目中只会用relu或其变体,个人猜测在深度学习领域,sigmoid作为激活函数可能会慢慢被边缘化,relu会成为主流(也许现在已经成为了主流)

关于调参:本次项目中最麻烦的其实是两个工作,一个是数据清洗,一个是调参优化;调参过程很复杂且耗时,查了很多资料,神经网络调参都没有比较直接到位的解决方案。 这也是以后要多注意的方向。

二、使用第三方开源遗传算法库(据说是某位阿里的大佬开发的)

遗传算法求 [进口风压]  [滚筒重量],目标函数是神经网络模型(产量最大)

import numpy as np
import sys
from sko.GA import GA
import time
import datetime
from sko.tools import set_run_mode
import pickle
from keras.models import load_model
import pandas as pd
import json as jsimport os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'y="[[87.2648,48.1824,6016,133.984,133.648,107.258,15.752,31.9629,341.914,318,525],[87.2227,47.184,6020,132.344,132.086,107.211,15.5957,31.7969,335.664,318,526],[87.1945,43.0821,6007,131.406,131.328,107.414,14.1895,31.4258,328.594,318,526],[87.1523,48.1906,6005,133.484,133.258,107.266,16.2793,31.9336,341.602,318,527],[87.6656,42.1265,6030,132.383,132.156,107.375,14.6582,31.8164,331.953,318,526],[87.8133,40.5205,5989,133.273,133.016,107.195,16.1816,32.0996,340.078,317,528],[87.8836,41.905,6027,133.969,133.773,107.258,15.8301,32.1289,339.258,318,528],[87.7992,41.0334,6019,132.914,132.672,107.195,16.1523,31.7871,334.258,318,527],[87.9398,40.4968,6032,132.938,132.641,107.188,15.498,31.7676,333.359,318,527],[87.7852,39.8991,6028,132.188,131.719,107.133,14.7754,31.5234,326.914,318,527],[87.6094,39.1766,5997,131.391,130.625,107.133,14.4141,31.6992,325.508,318,527],[87.7922,40.8723,6030,134.398,133.914,106.82,15.8105,32.041,338.906,318,527],[87.9328,41.2216,6033,133.984,133.508,106.984,16.0352,31.8164,336.836,318,528],[87.8203,40.5352,5993,133.078,132.82,106.953,16.5918,31.582,335.586,318,529],[87.6516,40.4907,6008,133.359,132.922,107.023,14.6191,32.0215,331.836,318,527],[87.7711,41.8055,6016,133.469,133.148,106.938,15.7715,32.0605,336.523,317,529],[87.743,41.651,6027,133.984,133.836,107,15.9473,32.1094,340.625,318,529],[87.8484,39.9414,6045,132.516,132.523,107.188,15.625,31.5234,329.336,318,531],[87.9117,41.3693,6017,133.203,133.148,107.125,15.0488,31.9434,333.164,318,528],[87.6867,39.8677,6024,131.484,131.328,107.414,14.7656,31.7188,327.969,318,528],[87.8695,41.3021,6040,133.844,133.742,107.188,15.625,32.2363,337.773,318,527],[87.7922,39.7916,6029,132.75,132.57,107.523,15.1074,31.5527,328.008,318,528],[87.7008,40.4896,6010,131.633,131.273,107.383,14.7266,31.7773,329.57,318,528],[87.7781,41.11,6034,133.766,133.438,107.219,15.3906,32.2754,336.016,318,528],[87.7711,41.9102,6009,133.711,133.422,107.289,16.2988,32.0996,339.766,318,527],[87.7711,39.5726,6012,131.289,130.523,107.453,14.3359,31.2695,322.539,318,528],[87.6727,41.3325,6006,134.359,133.781,107.281,16.3184,32.1777,339.141,318,529],[87.8766,39.9349,6021,131.773,131.305,107.203,16.9434,31.2598,332.695,318,531],[87.8133,41.179,6005,133.336,133.047,106.953,15.4102,32.0996,335.156,318,529],[87.6797,40.2437,6001,132.914,132.57,107.094,15.2148,32.4121,333.789,319,529]]"def dtcs():y1 = js.loads(y)#dataset = pd.read_csv("eihgt.csv",index_col='num')y1=np.array(y1)data=y1x1=y1[29,1]x2=y1[29,3]#加载sc文件,用于反归一化scalerfilex ='c:\\sc0906ax.sav'scalerx = pickle.load(open(scalerfilex, 'rb'))scalerx.clip = Falsescalerfiley ='c:\\sc0906ay.sav'scalery = pickle.load(open(scalerfiley, 'rb'))scalery.clip = False#加载预测模型modelcl = load_model("c:\\modelchanliang13-0906a.h5")#定义costly函数def generate_costly_function(task_type='io_costly'):# generate a high cost function to test all the modes# cost_type can be 'io_costly' or 'cpu_costly'if task_type == 'io_costly':def costly_function():time.sleep(0.1)return 1else:def costly_function():n = 10000step1 = [np.log(i + 1) for i in range(n)]step2 = [np.power(i, 1.1) for i in range(n)]step3 = sum(step1) + sum(step2)return step3return costly_function#定义tasktype函数for task_type in ('io_costly', 'cpu_costly'):costly_function = generate_costly_function(task_type='cpu_costly')#向量化的目标函数mode = 'vectorization'def vtarget(p):costly_function()p=np.array(p) #先将入参转成数组d=np.tile(data,(p.shape[0],1))#入参是10个数据的数组,整体复制次数为成GA传进来的种群数for i in range(0,(p.shape[0])):d[i*30+14:i*30+29,1]=p[(i),0]for j in range(0,(p.shape[0])):d[j*30+14:j*30+29,3]=p[(j),1]p1= scalerx.transform(d)p2cl=p1.reshape(-1,30,11) #按照LSTM中模型的shape转换predict_t1 = modelcl.predict(p2cl)predict_data=scalery.inverse_transform(predict_t1)v=np.abs((predict_data[:,0]-500)) #预测值和目标值绝对值return v#设置加速模式为向量化set_run_mode(vtarget,'vectorization')#运行GA模型start_time = datetime.datetime.now()ga = GA(func=vtarget, n_dim=2, size_pop=150, max_iter=100,lb=[x1-3,x2-2], ub=[x1+3,x2+2], precision=1e-3)best_x, best_y = ga.run()best=best_x.tolist()print([best[0],best[1]])return [best[0],best[1]]

该库使用向量模式时计算速度非常快,  mode = 'vectorization'

实现过程其实比较清晰,先建一个循环神经网络模型,再用遗传算法调用神经网络来评价染色体好坏。

三、应用

通过java开发前端界面,调用Python模型,让用户直观看到推荐工艺参数结果

该项目技术实现过程简单如上所述,下一篇会介绍该项目的结果、经验教训。

工业大数据在铅粉机的应用(一)相关推荐

  1. 赛后总结:第四届工业大数据竞赛注塑成型

    赛后总结:第四届工业大数据竞赛注塑成型 原文首发于我的公众号 前言 以第四届工业大数据竞赛虚拟量测任务为例,介绍大家的思路.自己代码乱写,导致不知道最后要复现的是哪个,加上工作上各种人员优化,就没有进 ...

  2. 工业大数据的应用与实践

    工业大数据的应用与实践 袁爱进1,岳滨楠2,闫鑫2,黄健2 1. 三一集团有限公司,上海 201299 2. 上海华兴数字科技有限公司,上海 201299 摘要:随着物联网和信息物理系统时代的来临,更 ...

  3. 工业大数据实施需解决哪些问题

    拥有大数据不是目的,探索大数据的价值是关键.工业大数据由企业信息数据.设备物联网数据和外部互联网数据组成,具有很大的价值.例如,通过分析用户使用数据来改进产品,通过分析现场测量数据来提高工件加工水平, ...

  4. 【工业互联网】郭朝晖:工业互联网平台背景下的工业大数据与智能制造

    4月11日,工业互联网平台宣讲团第二季第三讲继续开讲,由走向智能研究院工业大数据首席专家.清华大学访问学者郭朝晖为大家分享"工业互联网平台背景下的工业大数据与智能制造"." ...

  5. 助力工业物联网,工业大数据项目介绍及环境构建【一、二】

    文章目录 工业大数据项目介绍及环境构建 01:专栏目标 02:项目背景 03:项目需求 04:业务流程 05:技术选型 06:Docker的介绍 07:Docker的网络 08:Docker的使用 0 ...

  6. 【工业大数据】工业大数据应用场景分析;工业大数据,从何做起

    工业大数据也是一个全新的概念,从字面上理解,工业大数据是指在工业领域信息化应用中所产生的大数据.随着信息化与工业化的深度融合,信息技术渗透到了工业企业产业链的各个环节,条形码.二维码.RFID.工业传 ...

  7. 【AI-CPS】【大数据】NeuSeer平台助力工业大数据服务商

    昨天,小编为大家分享了中装集团钻探设备部经理张文举的演讲<基于NeuSeer构建地质钻探云服务平台>(https://www.toutiao.com/i650738432883661261 ...

  8. 【工业大数据】工业大数据:构建制造型企业新型能力

    2015年5月8日,国务院公布<中国制造2025>,这是中国版的"工业4.0"规划.该规划提到"加快推动新一代信息技术与制造技术融合发展,把智能制造作为两化深 ...

  9. 北京大学工业工程系主任侍乐媛:工业大数据支撑企业智能决策

    5月5日,"2017中国工业大数据大会·钱塘峰会"在杭州国际博览中心举办.本届峰会以"数据驱动创新 融合引领变革"为主题,围绕工业大数据展开分享与交流.北京大学 ...

最新文章

  1. 【Centos】利用Vultr服务器和namesilo布网
  2. 车 局部路径规划与避障
  3. 华为机器狗 VS 波士顿狗,谁更胜一筹?
  4. python基础教程第3章——字符串
  5. CSS命名规范(建议版)(转)
  6. PHP笔记-文件上传例子
  7. Python机器学习:梯度下降法004实现线性回归中的梯度下降法
  8. php中的递归查找文件夹,PHP递归遍历文件夹
  9. java bcd码_java中BCD编码
  10. pdf 深入理解kotlin协程_协程初探
  11. Linux 网络编程 常用socket函数详解 常用的函数讲解
  12. 不吼不叫:该如何平静地和孩子合作?
  13. android bitmap 去锯齿,bitmap缩放时抗锯齿
  14. 计算机网络:家庭无线网组建方案
  15. python爬取笔趣阁小说
  16. 上海市高等学校信息技术水平考试试卷及参考答案
  17. 纯web端实现二维码识别
  18. 20170105资金净流入排行榜
  19. 大话Ceph--RBD那点事儿
  20. 18.Oracle10g服务器管理恢复--RMAN备用数据库(练习31.32)

热门文章

  1. 基于欧几里德距离的推荐功能实现思路(向量空间)
  2. 多个Word文档,多张图片转PDF方式实现
  3. [长文干货]MicroPython移植到野火STM32F429开发板
  4. 绝对定位 容器里面的div水平居中
  5. 原创课程:WordPress快速建站培训课程
  6. php使用phpqrcode生成二维码追加文字
  7. Mac 如何连接远程服务器
  8. 国产CPU迷局 龙芯该如何参与市场竞争
  9. 新型钓鱼攻击竟然开始利用摩斯密码来隐藏URL
  10. 2021年网络安全设备漏洞集合