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

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

相关文章

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

逆向学习汇编篇:内存管理与寻址方式

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/3ceeb9ae6d98​​ 在汇编语言的世界中,内存管理和寻址方式是构建程序的基础。理解这些概念不仅对于编写高效的汇编代码至关重要,也是进行逆向工程分析的关键技能。本文将深入探讨内存管理的基本原则和多种寻址方式,并通过代码案例来展示它们的实际应用。 1. 内存管理 内存管理涉及如何分配

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修改历史,并且可以轻松地回滚到任何历史版本。 Git的基本概念包括: 仓库(Repository):Git使用仓库来存储文件的版本历史。一个仓库可以包含多个文件

Yarn:引领JavaScript包管理新潮流

在浩瀚的JavaScript世界中,包管理工具如同一位精明的管家,帮助开发者管理着各式各样的代码包。而Yarn,这位新晋管家,以其高效、稳定和安全的特性,正逐渐成为开发者心中的新宠。本文将带您走进Yarn的世界,让您轻松掌握Yarn的强大特性和使用方法。 特性一:快速如闪电         想象一下,你是一位忙碌的图书馆管理员,每天需要整理成千上万的书籍。如果每本书的摆放都

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博

OSG数学基础:坐标系变换

三维实体对象需要经过一系列的坐标变换才能正确、真实地显示在屏幕上。在一个场景中,当读者对场景中的物体进行各种变换及相关操作时,坐标系变换是非常频繁的。坐标系变换通常包括:世界坐标系-物体坐标系变换、物体坐标系-世界坐标系变换和世界坐标系-屏幕坐标系变换(一个二维平面坐标系,即显示器平面,是非常标准的笛卡尔坐标系的第一象限区域)。 世界坐标系-物体坐标系变换 它描述的问题主要是关于物体本身的

OSG数学基础:坐标系统

坐标系是一个精确定位对象位置的框架,所有的图形变换都是基于一定的坐标系进行的。三维坐标系总体上可以分为两大类:左手坐标系和右手坐标系。常用的坐标系:世界坐标系、物体坐标系和摄像机坐标系。 世界坐标系 世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考框架。从另一方面说,能够用世界坐标系来描述其他坐标系的位置,而不能用更大的、外部的坐标系来描述世界坐标系。世界坐标系也被广泛地