【数学建模】自动化车床管理(蒙特卡洛模拟法)

2024-05-27 13:52

本文主要是介绍【数学建模】自动化车床管理(蒙特卡洛模拟法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1999年全国大学生数学建模竞赛题目A

  • question1
    • 假设检验
    • 建立模型
    • 重新建立模型
    • 随机化求解

自动化车床管理
一道工序用自动化车床连续加工某种零件,由于刀具损坏等原因该工序会出现故障,其中刀
具损坏故障占 95%, 其它故障仅占 5%。工序出现故障是完全随机的, 假定在生产任一零件时出现故障的机会均相同。工作人员通过检查零件来确定工序是否出现故障。
现积累有 100 次刀具故障记录,故障出现时该刀具完成的零件数如附表。现计划在刀具加工
一定件数后定期更换新刀具。
已知生产工序的费用参数如下:
故障时产出的零件损失费用 f = 200 f=200 f=200 元/件;
进行检查的费用 t = 10 t=10 t=10 元/次;
发现故障进行调节使恢复正常的平均费用 d = 3000 d=3000 d=3000 元/次(包括刀具费);
未发现故障时更换一把新刀具的费用 k = 1000 k=1000 k=1000 元/次。

1)假定工序故障时产出的零件均为不合格品,正常时产出的零件均为合格品, 试对该工序
设计效益最好的检查间隔(生产多少零件检查一次)和刀具更换策略。
2)如果该工序正常时产出的零件不全是合格品,有 2%为不合格品;而工序故障时产出的零
件有 40%为合格品,60%为不合格品。工序正常而误认有故障仃机产生的损失费用为 1500 元/次。
对该工序设计效益最好的检查间隔和刀具更换策略。
3)在 2)的情况, 可否改进检查方式获得更高的效益。

附:100 次刀具故障记录(完成的零件数)
459 362 624 542 509 584 433 748 815 505
612 452 434 982 640 742 565 706 593 680
926 653 164 487 734 608 428 1153 593 844
527 552 513 781 474 388 824 538 862 659
775 859 755 649 697 515 628 954 771 609
402 960 885 610 292 837 473 677 358 638
699 634 555 570 84 416 606 1062 484 120
447 654 564 339 280 246 687 539 790 581
621 724 531 512 577 496 468 499 544 645
764 558 378 765 666 763 217 715 310 851

question1

分析问题可知:
如果进行检查要花费 t = 10 t=10 t=10元/次
检查有两种结果,花费 { d = 3000 , 发现故障 0 , 未发现故障 \begin{cases} d=3000 , 发现故障\\ 0 , 未发现故障 \end{cases} {d=3000,发现故障0,未发现故障
注:说的是 未发现故障时 更换一把新刀具费用是 k = 1000 k=1000 k=1000元,前置条件是未发现故障,判断要执行的动作是更换一把新刀具,如果要换才花 k k k元,这里假定了假定工序故障时产出的零件均为不合格品,正常时产出的零件均为合格品,因此未发现故障,刀一定没坏,所以不换,花费为 0 0 0元。

我们先对100 次刀具故障记录(完成的零件数) 的数据进行处理:
先用C++跑出 出现的故障记录(完成的零件数) 对应的次数是多少

map<int,int>cnt;
void solve(){int x;for(int i=0;i<100;i++){cin >> x;cnt[x]++;}for(pair<int,int> k:cnt){cout << k.first << ' ' << k.second << '\n';}
}

改个打印格式再放进MATLAB里面画出柱状图

x =[84 120 164 217 246 280 292 310 339 358 362 378 388 402 416 428 433 434 447 452 459 468 473 474 484 487 496 499 505 509 512 513 515 527 531 538 539 542 544 552 555 558 564 565 570 577 581 584 593 606 608 609 610 612 621 624 628 634 638 640 645 649 653 654 659 666 677 680 687 697 699 706 715 724 734 742 748 755 763 764 765 771 775 781 790 815 824 837 844 851 859 862 885 926 954 960 982 1062 1153];
y =[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
bar(x,y)

在这里插入图片描述

可以很明显的看出线条集中在600偏左一点,出现次数为2的周边,查看之前的数据是593
算一下期望

double ex = 0;for(pair<int,int> k:cnt){ex += (double)k.first * (double)k.second/100;}cout << ex;

算一下期望得到 E ( x ) = 600 E(x) = 600 E(x)=600
并且分析上图推测该数据满足正态分布。

C++算标准差/方差:

double ex = 0;double ex2 = 0;for(pair<int,int> k:cnt){ex += (double)k.first * (double)k.second/100;ex2 += (double)k.first*(double)k.first * (double)k.second/100;}cout << ex2-ex*ex << '\n';double dx = 0;for(pair<int,int> k:cnt){dx += ((double)k.first-ex)*((double)k.first-ex) * (double)k.second/100;}cout << sqrt(dx);

得到方差为38276.4,标准差为195.644
用MATLAB画出正态分布图,如下图
在这里插入图片描述

上面这一步应该是拟合

假设检验

建立模型

综上所述,最好的检查间隔是600个零件/次,每次检查都换刀具

开始建立模型:
已知:
故障时产出的零件损失费用 f = 200 f=200 f=200 元/件;
进行检查的费用 t = 10 t=10 t=10 元/次;
发现故障进行调节使恢复正常的平均费用 d = 3000 d=3000 d=3000 元/次(包括刀具费);
未发现故障时更换一把新刀具的费用 k = 1000 k=1000 k=1000 元/次。

那么假设完成的零件数在 x x x时会故障,如果完成的零件数在 y y y时候检查,总花费 g ( y ) g(y) g(y)
g ( y ) = { ( y − x ) ∗ f + d + t , x ≤ y t , x > y g(y) = \begin{cases} (y-x)*f + d + t , x \le y\\ t, x \gt y \end{cases} g(y)={(yx)f+d+t,xyt,x>y

到目前为止难点就在于未发现故障时要不要更换一把新刀具并且其中刀具损坏故障占 95%, 其它故障仅占 5%。工序出现故障是完全随机的这个条件还没考虑到。
这里先直接假设刀具更换策略和检查策略分开,并且上述难点均分为刀具更换策略。

假设未检查到故障就不换刀,那么检查策略模型:
{ g ( y ) = { ( y − x ) ∗ f + d + t , x ≤ y t , x > y h ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 min ⁡ E ( g ( y ) ) = ∫ g ( y ) h ( x ) d x μ = 600 , σ 2 = 38276.4 \begin{cases} g(y) = \begin{cases} (y-x)*f + d + t , x \le y\\ t, x \gt y \end{cases}\\ h(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}\\ \min E(g(y)) = \int g(y)h(x)dx\\ \mu = 600 , \sigma^2 =38276.4 \end{cases} g(y)={(yx)f+d+t,xyt,x>yh(x)=2π σ1e2σ2(xμ)2minE(g(y))=g(y)h(x)dxμ=600,σ2=38276.4
求出检查间隔是 y y y个零件/次

刀具更换策略模型:
假设完成的零件数在 x x x时会故障,如果完成的零件数在 y y y时候换刀
因为刀具损坏故障占 95%所以
g ′ ( y ) = { ( y − x ) ∗ f + d , x ≤ y 95 % k , x > y g'(y) = \begin{cases} (y-x)*f + d, x \le y\\ 95\%k, x \gt y \end{cases} g(y)={(yx)f+d,xy95%k,x>y

{ h ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 min ⁡ E ( g ( y ) ) = ∫ g ′ ( y ) h ( x ) d x μ = 600 , σ 2 = 38276.4 \begin{cases} h(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}\\ \min E(g(y)) = \int g'(y)h(x)dx\\ \mu = 600 , \sigma^2 =38276.4 \end{cases} h(x)=2π σ1e2σ2(xμ)2minE(g(y))=g(y)h(x)dxμ=600,σ2=38276.4
求出换刀间隔是 y y y个零件/次

重新建立模型

1.确立检查间隔 n n n(检查间隔相同)
2.确立刀具更换周期 m = s n m=sn m=sn,即使不发生故障也要更换
总费用期望最低为目标
已知刀具寿命服从正态分布 N ( 600 , 195.64 4 2 ) N(600,195.644^2) N(600,195.6442)

1.预防更换费用(刀具寿命超过更换周期 m m m)
刀具更换前检查 s − 1 s-1 s1
c 1 = ( s − 1 ) t + k c_1 = (s-1)t+k c1=(s1)t+k 概率为 1 − F ( m ) 1-F(m) 1F(m)
i i i次检查发现故障更换费 ( i = 1 , . . , s − 1 ) (i=1,..,s-1) (i=1,..,s1)
c 2 i = i t + d + f ( n + 1 ) / 2 c_{2i}=it+d+f(n+1)/2 c2i=it+d+f(n+1)/2 概率为 F ( i n ) − F ( ( i − 1 ) n ) F(in)-F((i-1)n) F(in)F((i1)n)
(第 i − 1 i-1 i1到第 i i i次检查种平均生产 n + 1 2 \frac{n+1}{2} 2n+1不合格零件)

随机化求解

已知:
故障时产出的零件损失费用 f = 200 f=200 f=200 元/件;
进行检查的费用 t = 10 t=10 t=10 元/次;
发现故障进行调节使恢复正常的平均费用 d = 3000 d=3000 d=3000 元/次(包括刀具费);
未发现故障时更换一把新刀具的费用 k = 1000 k=1000 k=1000 元/次。

定一个 n n n m m m
每次随机一个 x x x服从正态分布 N ( 600 , 195.64 4 2 ) N(600,195.644^2) N(600,195.6442),相当于换新刀,随机生成刀的寿命
花费 W = { ( ⌈ x / n ⌉ ) t + d + ( ⌈ x / n ⌉ n − x ) f , x ≤ m ( m / n ) t + k , x > m W = \begin{cases} (\lceil x/n \rceil)t + d + (\lceil x/n \rceil n - x)f,x\le m\\ (m/n)t + k,x \gt m \end{cases} W={(⌈x/n⌉)t+d+(⌈x/nnx)f,xm(m/n)t+k,x>m
生产个数 T = { x , x ≤ m m , x > m T = \begin{cases} x,x\le m\\ m,x \gt m \end{cases} T={x,xmm,x>m
计算生成每个零件平均价值 W T \dfrac{W}{T} TW
随机 k k k x x x得到平均值 ∑ i = 1 k W T k \dfrac{\displaystyle\sum_{i=1}^{k} \dfrac{W}{T}}{k} ki=1kTW
取平均值最小的 n n n, m m m为解即可

蒙特卡洛模拟
matlab

t = 10; %进行检查的费用
k = 1000; %未发现故障时更换一把新刀具的费用
d = 3000; %发现故障进行调节使恢复正常的平均费用
f = 200; %故障时产出的零件损失费用
ans_n = 0;
ans_m = 0;
ans_wt = 1e9;
x = abs(normrnd(600,195.644,10000));
for n = 1:50for s = 1:100m=s*n;wt = 0;for i = 1:length(x);w = 0;t = 0;if x(i) < mw = w+ceil(x(i)/n)*t+d+(ceil(x(i)/n)*n-x(i))*f;t = t+x(i);elsew = w+s*t+k;t = t+m;endwt = wt + w/t;if ans_wt*1000 < wtbreak;endendif ans_wt > wt/1000ans_n = n;ans_m = m;ans_wt = wt/1000;endend
end
disp(ans_n);
disp(ans_m);

这篇关于【数学建模】自动化车床管理(蒙特卡洛模拟法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007664

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess