刀具问题讨论
1 刀具的问题概述
问题描述
一道工序用自动化车床连续加工某种零件,由于刀具损坏等原因该工序会出现故障,其中刀具损坏故障占95%, 其它故障仅占 5%。工序出现故障是完全随机的, 假定在生产任一零件时出现故障的机会均相同。工作人员通过检查零件来确定工序是否出现故障。
现积累有100 次刀具故障记录,故障出现时该刀具完成的零件数如附表。现计划在刀具加工一定件数后定期更换新。
已知生产工序的费用参数如下:
1)故障时产出的零件损失费用 f=200 元/件;
2)进行检查的费用 t=10 元/次;
3)发现故障进行调节使恢复正常的平均费用 d=3000 元/次(包括刀具费);
4)未发现故障时更换一把新刀具的费用 k=1000 元/次。
研究如下问题:
假定工序故障时产出的零件均为不合格品,正常时产出的零件均为合格品, 试对该工序设计效益最好的检查间隔(生产多少零件检查一次)和刀具更换策略。
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
1 问题一:使用MATLAB绘画上述刀具寿命的直方图
所需的函数
1 xlim([0, 1200]); ylim([0, 25]);
这两个函数并不是绘画出一个Y坐标和一个X坐标,而是用来规定这个直方图的X坐标和Y坐标
2 histogram(num);
这个是用来绘画一个直方图函数,num是你所给的一个数组,这个数组里面有很多的元素
clear;% 输入数据
num = [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];histogram(num);xlim([0, 1200]);
ylim([0, 25]);
这样我们就可以绘画出这些数据的直方图,我们可以很直观的看到它们是呈现正态分布的趋势的
2 问题二:利用正态分布趋势的一个随机分布数来进行计算最佳间隔和最佳换刀周期
1 正态分布的数字的创建
我们这里需要用到方差和平均数,我们已经得知这里的方差和平均值分别为196.6和600
u = 600;
o = 196.6;
X = u + o * randn(1, 1e4);
然后randn是创建一个标准分布的随机数,我们只需要按照这个公式即可创建一个正态分布的随即数
X = 平均数 + 方差 * 标准分布的随机数
这里randn( 1 , 1e4 ) 表示的是创建一个1e4这么多的元素,1表示是创建是多少列,0表示创建多少行
后面的1e4表示创建多少元素
然后接下来我们就要考虑这么设计一个最好的方案去规划这些刀具
我们创建一个随机优化模型来解决这个问题
x代表的是当前这把刀的寿命,n代表的是检查的间隔
分为两种情况
情况1:当X <= T的时候
10 * ceil( x / n ) 表示的是这个刀在从当前到寿命结束的总间隔所需检查的费用
200 * ( n * ceil(x / n) - x )这个表示为检查到所报废的那一个零件
就比如上面这个例子,当我们T设计的是12,那么我们前面检查的都是没有报废的,但是一旦到12的时候就报废了,这个时候就是要消耗200块
后面就是 + 3000就是报废的没换刀的费用,除以x就是每一个合格产品所消耗的费用
情况2:当X > T的时候
这个很好理解就是把所有检查的费用加上,然后+1000,这个时候就进行换刀,除以T就是在换刀的时间段每把刀所需要的费用
然后我们就用MATLAB来进行编写
u = 600;
o = 196.6;
X = u + o * randn(1, 1e4);minval = Inf;
minn = 0;
minT = 0;%n 检查间隔
%T 更换周期
for T = 1:1000for n = 1:100total = 0;for i = 1:length(X)if X(i) > TY2 = (10 * floor(T / n) + 1000) / T;total = total + Y2;elseY1 = (10 * ceil(X(i) / n) + (n*ceil(X(i)/n) - X(i)) * 200 + 3000) / X(i);total = total + Y1;endend%fprintf("%d ",total);if minval > totalminval = total;minn = n;minT = T;endend
end
就是不断判断大小然后进行选取就好了
疑问:这里正态分布的中心值范围为400 ~ 600,为什么不设置到这里?
因为就像我们去检查生病,不可能只有老了再去,应该随时都去,所以这里要设置全面