Lazy loaded image
【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现
字数 2350阅读时长 6 分钟
2026-1-2
2026-1-4
type
status
date
slug
summary
tags
category
icon
password
更新时间:2024-4-6
【2024[泰迪杯](https://so.csdn.net/so/search?q=%E6%B3%B0%E8%BF%AA%E6%9D%AF&spm=1001.2101.3001.7020)】A 题:生产线的故障自动识别与人员配置 Python代码实现

数学建模助手使用

<https://chatgpt-plus.top/g/g-fwQfcaTKA-shu-xue-jian-mo-bi-sai-bian-cheng-zhu- shou>

1 问题

一、问题背景
随着新兴信息技术的大规模应用,工业生产线的[智能化控制](https://so.csdn.net/so/search?q=%E6%99%BA%E8%83%BD%E5%8C%96%E6%8E%A7%E5%88%B6&spm=1001.2101.3001.7020)技术日益成熟。自动生产线
可以自动完成物品传送、物料填装、产品包装和质量检测等过程,极大地提高了生产效率和产品质量,减少了生产成本。自动生产线融入故障智能报警技术,能避免因故障带来的生产中断和经济损失;同时合理的人员配置,能够减少资源浪费、提高生产效率。
二、解决问题
问题 1: 根据附件 1 中的数据,分析生产线中各装置故障的数据特征,构建故障报警模型,实现故障的自动即时报警。
问题 2: 应用问题 1 所建立的模型,对附件 2 中的数据进行分析判断,实现生产线中各装置故障的自动即时报警,给出故障报警的日期、开始时间与持续时长,将结果存放到result2.xlsx 中(格式见表
表 1 result2.xlsx 的格式
故障编号| 1001| 2001| …| 6002| | | | | |
序号| 日期| 开始时间| 持续时长/秒| 日期| 开始时间| 持续时长/秒| …| 日期| 开始时间| 持续时长/秒
…| …| …| …| …| …| …| …| …| …| …
问题 3 : 根据附件 3 中的数据,分析产品的产量、合格率与生产线、操作人员等因素的关系。
问题 4: 根据实际情况,现需要扩大生产规模,将生产线每天的运行时间从 8 小时增加到 24 小时不间断生产。针对问题 3 的 10 条生产线,结合问题 3 的分析结果,考虑生产线与操作人员的搭配,制定最佳的操作人员排班方案,将结果存放到 result4-1.xlsx 和result4-2.xlsx 中(格式见表
要求排班满足如下条件:
(1) 各操作人员做五休二,尽量连休 2 天;
(2) 各操作人员每班连续工作 8 小时;
(3) 班次时间:早班(8:00-16:00)、中班(16:00-24:00)、晚班(0:00-8:00);
(4) 各工龄操作人员的人数比例与问题 3 中的比例相同;各操作人员的班次安排尽量均衡。

2 问题分析

2.1 问题一

(1)分析故障数据特征,包括故障发生的时间分布、故障发生的频率、故障类型的分布等。
(2)构建故障报警模型,是多标签的分类问题,或者是针对每个故障编码建模,就是一个分类问题。分类算法包括决策树、随机森林、支持向量机、逻辑回归和神经网络等。也可以建立成一个时间序列问题,注意数据集给的日期和时间,格式不是标准的datetime格式,是1、2、3、4这样的格式。需要转换为datetime再去建模。

2.2 问题二

(1)故障识别
  • 如果建立成一个分类问题,针对每个生产线、每个故障编码的序列,分别训练一个分类模型。
  • 如果建立时间序列回归问题,可以采用ARIMA、LSTM等构建模型进行故障预测。
题目要求以附件一的数据作为训练集,预测附件2,然后生成result2.xlsx文件。但是目前还没有提供附件二的数据,就可以以附件一为训练集和测试集。跑通baseline模型。
(2)故障时长计算
  • 单次故障,不连续,持续时间为1
  • 连续两次故障,持续时间为2
  • 连续多次故障,持续时间为,开始时刻和结束时刻之间的时间差加1。
(3)每条生产线中各装置的每月统计数据
注意需要计算每个生产线的每个月统计数据,则需要使用分组操作来分析每条生产线中各装置的每月统计数据(故障次数、最长持续时长和最短持续时长)。
(4)输出结果
将每种类型的故障分析结果,横向排列,纵向是按故障发生的顺序排列,整理为dataframe格式,输出到result2.xlsx中。

2.3 问题三

(1) 产量分析
使用时间序列分析方法(如ARIMA模型)来预测产量随时间的变化趋势。
回归分析来探索产量与其他因素(如生产线编号、推送状态、装置故障等)的关系。
(2)合格率分析
逻辑回归分析来探索合格率与其他因素之间的关系;
使用决策树或随机森林等分类算法,寻找影响合格率的关键因素
(3) 故障分析
关联规则挖掘算法查找故障与其他因素(如操作人员、生产线编号)之间的关联性。

2.4 问题四

(1)在问题三的基础上,计算出每个生产线的生产效率和合格率,找出与操作人员、班次等因素的关系;
(2)根据生产效率和合格率的关系,制定最佳的操作人员排班方案;制定最佳的操作人员排班方案涉及到多个因素,包括但不限于:工作时间要求、人员能力匹配、轮班规则、休息时间安排、法定假期等。
(3)根据实际数据进行生产效率和合格率的计算,然后根据操作人员的工作时间和班次对其进行排班。这可能涉及到安排不同技能水平的操作人员,以确保生产线能够在高效率和高合格率下运行。实时调整排班计划,随着生产线的运行,实时监控生产效率和合格率的变化,及时调整操作人员的排班计划以适应变化的生产需求。结合其他因素进行综合考虑,如在排班计划中、操作人员的休息时间、加班安排、交接班等,以确保生产线的持续稳定运行。

3 Python代码实现

3.1 问题一

import pandas as pd import matplotlib.pyplot as plt import warnings import seaborn as sns warnings.filterwarnings('ignore') plt.rcParams['font.sans-serif'] = 'SimSun' # 换成自己环境下的中文字体,比如'SimHei'
df = pd.read_csv('A题-示例数据/附件1/M101.csv')

查看数据前几行

print(df.head())

故障数据分析

fault_columns = [col for col in df.columns if '故障' in col] fault_counts = df[fault_columns].sum() print(fault_counts)

可视化故障数据

plt.figure(figsize=(10, 6)) colors = sns.color_palette("hls", len(fault_counts))
fault_counts.plot(kind='bar', color=colors) plt.title('Device Fault Counts') plt.xlabel('Device') plt.ylabel('Fault Count') plt.savefig('img/1.png',dpi=100) plt.show()
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生产线编号分析

line_counts = df['生产线编号'].value_counts() print(line_counts)

可视化生产线编号分布

plt.figure(figsize=(10, 6)) colors = sns.color_palette("hls", len(line_counts)) line_counts.plot(kind='bar',color = colors) plt.title('Production Line Distribution') plt.xlabel('Production Line Number') plt.ylabel('Count') plt.tight_layout() plt.savefig('img/2.png',dpi=100) plt.show()
在这里插入图片描述
在这里插入图片描述
import matplotlib.pyplot as plt import warnings import seaborn as sns warnings.filterwarnings('ignore')
df = pd.read_csv('A题-示例数据/附件1/M101.csv')

物料推送气缸状态分析

push_counts = df['物料推送气缸推送状态'].value_counts() pull_counts = df['物料推送气缸收回状态'].value_counts() push_pull_counts = pd.DataFrame({'Push': push_counts, 'Pull': pull_counts}) print(push_pull_counts)
plt.figure(figsize=(10, 6))

可视化物料推送气缸状态

colors = sns.color_palette("hls", len(push_pull_counts))
push_pull_counts.plot(kind='bar', stacked=True,color = colors) plt.title('Material Push Cylinder State') plt.xlabel('State') plt.ylabel('Count') plt.tight_layout() plt.savefig('img/3.png',dpi=100)
plt.show()
在这里插入图片描述
在这里插入图片描述
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import confusion_matrix, classification_report

统计各装置故障的情况

fault_columns = ['物料推送装置故障1001', '物料检测装置故障2001', '填装装置检测故障4001', '填装装置定位故障4002', '填装装置填装故障4003', '加盖装置定位故障5001', '加盖装置加盖故障5002', '拧盖装置定位故障6001', '拧盖装置拧盖故障6002']

加载数据

data = pd.read_csv('A题-示例数据/附件1/M101.csv')

构建故障报警模型

首先,选取特征和目标变量

feature_columns = ['时间', '物料推送气缸推送状态', '物料推送气缸收回状态', '物料推送数', '物料待抓取数', '填装数', '加盖数', '拧盖数', '合格数', '不合格数'] target_columns = fault_columns
data_len = 10000 X = data[feature_columns][0:data_len]

多标签问题

y = data[target_columns][0:data_len]

划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

使用随机森林模型进行训练

model = RandomForestClassifier() model.fit(X_train, y_train)

在测试集上进行预测

y_pred = model.predict(X_test)

评估模型性能

print('混淆矩阵:') print(confusion_matrix(y_test.values.flatten(), y_pred.flatten())) print('\n分类报告:') print(classification_report(y_test.values.flatten(), y_pred.flatten()))
上一篇
一分钟上手!用 Video GPT 一天制作上百条短视频
下一篇
docker 常用管理命令及数据备份

评论
Loading...