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

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

相关文章

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙