1、零件参数的优化设计摘 要本文建立了一个非线性多变量优化模型。已知粒子分离器的参数 y 由零件参数 决定,参数 的容差等级决定了产品的成本。总费用就包括)72,1(ixixy 偏离 y0 造成的损失和零件成本。问题是要寻找零件的标定值和容差等级的最佳搭配,使得批量生产中总费用最小。我们将问题的解决分成了两个步骤:1.预先给定容差等级组合,在确定容差等级的情况下,寻找最佳标定值。2.采用穷举法遍历所有容差等级组合,寻找最佳组合,使得在某个标定值下,总费用最小。在第二步中,由于容差等级组合固定为 108 种,所以只要在第一步的基础上,遍历所有容差等级组合即可。但是,这就要求,在第一步的求解中,需要一
2、个最佳的模型使得求解效率尽可能的要高,只有这样才能尽量节省计算时间。经过对模型以及 matlab 代码的综合优化,最终程序运行时间仅为 3.995 秒。最终计算出的各个零件的标定值为:=0.0750,0.3750,0.1250,0.1200,1.2919,15.9904,0.5625,ix等级为: BCd,一台粒子分离器的总费用为:421.7878 元与原结果相比较,总费用由 3074.8(元/个)降低到 421.7878(元/个) ,降幅为 86.28%,结果是令人满意的。为了检验结果的正确性,我们用计算机产生随机数的方式对模型的最优解进行模拟检验,模拟结果与模型求解的结果基本吻合。最后,我
3、们还对模型进行了误差分析,给出了改进方向,使得模型更容易推广。关键字:零件参数 非线性规划 期望 方差一、问题重述一件产品由若干零件组装而成,标志产品性能的某个参数取决于这些零件的参数。零件参数包括标定值和容差两部分。进行成批生产时,标定值表示一批零件该参数的平均值,容差则给出了参数偏离其标定值的容许范围。若将零件参数视为随机变量,则标定值代表期望值,在生产部门无特殊要求时,容差通常规定为均方差的倍。进行零件参数设计,就是要确定其标定值和容差。这时要考虑两方面因素:一是当各零件组装成产品时,如果产品参数偏离预先设定的目标值,就会造成质量损失,偏离越大,损失越大;二是零件容差的大小决定了其制造成
4、本,容差设计得越小,成本越高。试通过如下的具体问题给出一般的零件参数设计方法。粒子分离器某参数(记作 y)由 7 个零件的参数(记作 x1,x2,.,x7)决定,经验公式为: 7616.24356.02485.012351 .1.24.7 xxxY y 的目标值(记作 y0)为 1.50。当 y 偏离 y0+0.1 时,产品为次品,质量损失为1,000 元;当 y 偏离 y0+0.3 时,产品为废品,损失为 9,000 元。零件参数的标定值有一定的容许范围;容差分为、三个等级,用与标定值的相对值表示,等为+1%,等为+5%,等为+10%。7 个零件参数标定值的容许范围,及不同容差等级零件的成本
5、(元)如下表(符号表示无此等级零件):标定值容许范围 等 等 等x1 0.075,0.125 25 x2 0.225,0.375 20 50 x3 0.075,0.125 20 50 200x4 0.075,0.125 50 100 500x5 1.125,1.875 50 x6 12,20 10 25 100x7 0.5625,0.935 25 100现进行成批生产,每批产量 1,000 个。在原设计中,7 个零件参数的标定值为:x 1=0.1,x2=0.3,x3=0.1,x4=0.1,x5=1.5,x6=16,x7=0.75;容差均取最便宜的等级。请你综合考虑 y 偏离 y0造成的损失和零
6、件成本,重新设计零件参数(包括标定值和容差) ,并与原设计比较,总费用降低了多少?二、模型假设1、将各零件参数视为随机变量,且各自服从正态分布;2、假设组成离子分离器的各零件互不影响,即各零件参数互相独立;3、假设小概率事件不可能发生,即认为各零件参数只可能出现在容许范围内;4、在大批量生产过程中,整批零件都处于同一等级, 。本题可认为 1000 各零件都为 A 等、B 等或 C 等;5、生产过程中出质量损失外无其他形式的损失;6、在质量损失计算过程中,认为所有函数都是连续可导的。三、符号说明:第 i 类零件参数的标定值(i=1,27) ;ix:第 i 类零件参数的实际值相对目标值的偏差(i=
7、1,27) ;i:第 i 类零件参数的容差(i=1,2,7) ;ir:第 i 类零件参数的方差(i=1,2,7) ;i:标定值 的上、下限;iba,ixy:离子分离器某参数的实际值;:离子分离器该参数的目标值;0:离子分离器某参数的均值;y:离子分离器某参数的实际值 y 相对平均值 的偏差; y:离子分离器某参数的方差;y:一批产品中正品的概率;1P:一批产品中次品的概率;2:一批产品中废品的概率;3P:一批产品的总费用(包括损失和成本费) ;W:第 i 类零件对应容差等级为 j 的成本(j=A,B,C) 单位:元/个。ijC最 优 解四、问题分析总费用损失费 成本费次品率 废品率 服从正态分
8、布 容差等级ix服从正 容差y态分布泰勒公式将 期 望 方 差 ixir其线性化 该问题是一定约束条件下的最优化问题,经分析题意,拟建立以总费用为目标函数的非线性规划模型。总费用由损失费和成本费两部分组成,零件成本由简单的线性代数式决定,而损失费涉及概率分布的非线性函数。要求出损失费,就必须知道一批产品的次品率和废品率,结合各类零件都服从 ,),(2ixN可假设 y 也服从正态分布,联想正态分布的性质当各变量均服从正态分布时,其线性组合也服从正态分布。题中所给经验公式为一复杂的非线性的公式,无法直接对其分析处理,所以需借助泰勒公式将其展开并作相应处理使其线性化。而对于零件成本,需先确定容差等级
9、才能求得成本费。由容差等级和各类零件的标定值 便可知道给类零件的容差 。最后,便将问题转化为 、 关ixirixir于总目标函数的最优解的问题上。在进行零件参数设计时,如果零件设计不妥,造成产品参数偏离预先设定值,就会造成质量损失,且偏差越大,损失也越大;零件容差的大小决定了其制造成本,容差设计得越小(即精度越高)零件成本越高。 合理的设计方案应既省费用又能满足产品的预先设定值,设计方向应该如下:(1)设计的零件参数,要保证由零件组装成的产品参数符合该产品的预先设定值,即使有偏离也应是在满足设计最优下的容许范围。(2)零件参数(包括标定值和容差等级)的设计应使总费用最小为优。此外分析零件的成本
10、及产品的质量损失不难发现,质量损失对费用的影响远大于零件成本对费用的影响,因而设计零件参数时,主要考虑提高产品质量来达到减少费用的目的。五、模型建立为了确定原设计中标定值( 的期望值)及已给的容差对xi(,)127产品性能参数影响而导致的总损失 ,即确定 偏离目标值 所造成的损失Wyy0和零件成本,先列出总损失的数学模型表达如下:)901(10327PCij当然,为了确定总损失 ,必须知道 、 、 (即正品、次品及废品123的概率) 。为此,将经验公式用泰勒公式在 处展开并略去二次)7,(ixX以上高次项后来研究 y 的概率分布,设 ,则yf)(71)(iiixxfXf将标定值 带入经验公式即
11、得72,1(ix)(ixfy所以 iixf71由于在加工零件时,在标定值知道的情况下,加工误差服从正态分布,即)( 2,0Niix且 相互独立,由正态分布性质可知ix),(2yNy由误差传递公式得(1)2712712 )()(iiiiiy xfxf由于容差为均方差的 3 倍,容差与标定值的比值为容差等级,则3.0,5.ixy 的分布密度函数为221)(yeyyy 偏离 的概率,即次品的概率为1.0(2)8.164.12 )()(ydydPy 偏离 的概率,即废品的概率为3.0(3)8.12.13 )()(yy由于 y 偏离 越远,损失越大,所以在 固定时,调整 y 使之等于目标值0 y可降低损
12、失。取 即 ,则0 0y0)1.(2yP)3.(3yP为标准正态分布函数。)(t综合考虑 y 偏离 y0造成的损失和零件成本,设计最优零件参数的模型建立如下:目标函数min )901(10327PCWijs.t. 7,(iaxbiii)21)(0 fyi六、模型求解初略分析对于原给定的设计方案,利用 matlab 编程计算(见附录) ,计算结果如下:正品率 次品率 废品率 成本费 损失费 总费用0.1260 0.6239 0.2501 200 2874.8 3074.8由于按原设计方案设计的产品正品率过低,损失费过高,显然设计不够合理。进一步分析发现,参数均值 =1.7256 偏离目标值 =1
13、.5 太远,致使损失y0y过大。尽管原设计方案保证了正本最低,但由于零件参数的精度过低,导致正品率也过低。所以我们应综合考虑成本费和损失费。模型的实现过程:本模型通过 matlab 进行求解,我们通过理论模型求解和随机模拟的求解过程如下:在给定容差等级的情况下,利用 matlab 中求解非线性规划的函数fmincon,通过多次迭代求解,最终求得一组最优解。最初,我们设定的fmincon 函数的目标函数就是总费用,约束条件为各个标定值的容许范围,以及各零件标定值带入产品参数表达式应为 ,即 1.5。然而,在迭代过程中我们0y发现,求解过程十分慢,在给定容差等级的确定的情况下,计算最优标定值需要将
14、近 400 秒,如果在此基础上对 108 种容错等级进行穷举查找最优组合,将需要大概 12 小时。显然这是不合理的。因此,我们在仔细对 matlab 实现代码研究发现,求解过程之所以慢,是因为代码中存在多次调用求偏导和积分的函数,在 fmincon 的多次迭代中,耗费大量时间。所以,为了提高求解速度,我们首先利用 matlab 中 diff 函数对产品参数中的各个表达式进行求偏导,然后得到多个带参表达式,利用 int 函数对 y 的概率密度函数进行积分,分别得到出现次品和废品概率的表达式,然后将这些表达式写进程序里,这样在求解过程中就不需要在每一次迭代中都要求偏导和积分了,修改后的程序运行时间
15、大大减少。确定一组容差等级初始化最小费用为 INFminW利用 fmincon 寻找最佳标定值 求出总费用 W min程序流程图Y还有容差 N 算 法等级未计算 结 束YminN程序见附录,求解结果如下:零 件种 类1 2 3 4 5 6 7零 件参 数0.0750 0.3750 0.1250 0.1200 1.2919 15.9904 0.5625容 差等 级B B B C C B B正品率 次品率 废品率 成本费 损失费 总费用0.8533 0.1476 0.0000 275 146.7878 421.7878运行总时间:3.995s离子分离器参数均值 =1.5y离子分离器参数方差 =0.
16、0689y模型检验对设计方案进行动态模拟,由于每种零件参数均服从正态分布,用正态分布随机数发生器在每种零件参数允许范围内产生 1000 个随机数参与真实值 的ix计算随机模拟 N 次后结果如下:正品率 次品率 废品率 成本费 损失费 总费用0.8570 0.1430 0.0000 275 143 418根据最优解的 =1.5, =0.0689 画出 y 的概率分布图,再对 x 随机取样yy画出 y 的概率分布图(见图 6.1) ,由图可知:两组数据所画概率分布图的拟合度相当高,进一步确保了模型的正确性。图 6.1 概率分布图对比图通过以上数据,与原设计方案所得结果相比较,总费用由 3074.8
17、(元/个)降低到 421.7878(元/个) ,降幅为 86.28%,结果是令人满意的。七、误差分析1、在建模过程中,通过泰勒公式将 展开并略去二次及以上项使)(Xfy线性化,不可避免地产生了截断误差,所以展开后的式子只是原经验公式的近似关系式。但在一般情况下,线性化和求总和在实用上具有足够的精度,所以由于函数线性化而略去的高次项可以忽略不计。在函数关系式较复杂的情况下,将其线性化更具有明显的优势。2、本模型忽略了小概率事件发生的可能,认为零件的参数只可能出现在允范围内,即 。现实中,小概率事件仍有发生的可能性,但在大iiix3,批量生产中,小概率事件的发生对最终结果没有影响,所以可以忽略。3
18、、该模型对于质量损失的计算,将所有函数都看作连续函数,而这对于每个零件参数而言是不可能的,所以其中也会产生误差。八、模型的评价及推广1.优点(1)建模过程中,采用泰勒公式将经验公式简化,并假设各零件参数都服从满足大量数据的正态分布,使得整个模型的建立及求解得到大大简化。(2)本模型运用概率统计与优化知识对零件参数进行优化设计。通过建立一个反映设计要求的数学模型,利用 MATLAB 软件,经过编程来实现对设计方案参数的调整,将总费用由 3074.8(元/个)降低到 421.7878(元/ 个) ,降幅达到86.28%,结果还是令人十分满意的。(3)本模型在程序运算的过程中,做了适当处理,将每次循
19、环本该由计算机求偏导和积分的提前人为处理,将求偏导和积分后的算式写入程序中,这样大大节约了运算时间,将运行时间由几个小时缩短为 3.0995s。2.缺点(1)本模型在模型的求解过程中,对一些可接受范围内的误差直接进行了忽略,因而对于结果的精确性还是会有一定的影响。(2)本模型是建立在一些假设中的,所有实用性受到了限制,在实际生产中,如果可以把更多的一些因素考虑进去应该会更好。在已假定的条件下,本模型的优化结果是好的。3 推广此模型有较强的应用价值。工程中往往因为某个零件的选取不当,而影响产品的参数,使可靠性降低,造成了极大的经济损失。所以需综合考虑零件成本和质量,以求获得最大的经济效益。本模型
20、具有广泛的适用性,很容易加以推广。模型中的设计变量可以推广到 个的情形,即设计变量 ,其中xi(,)127 nxinR(,)12设计空间 是一个 维空间。本模不仅适用于粒子分离器参数的设计,而且也Rn可用于类似的机构、零部件、工艺设备等的基本参数的设计问题;容差等级同样可推广应用。参考文献【1】 韩之俊,姚平中,概率与统计,国防工业出版社,1985【2】 陈宝林,最优化理论与算法,清华大学出版社,1989【3】 裘宗燕,数学软件系统的应用及程序设计,北京大学出版社,1994【4】 许波, Matlab 工程数学应用 ,清华大学出版社,2001附录:matlab 代码:function f=re
21、sult%穷举108种容错等级组合求解全局最优解fval=inf;tic%Bmin=2 3 3 3 3 3 2;%XminB(1)=2;B(5)=3;for i=2:3B(2)=i;for j=1:3B(3)=j;for t=1:3B(4)=t;for g=1:3B(6)=g;for m=1:2B(7)=m;fv,x=getcost(B);if fv=0.1f(2)=f(2)+1;end;if a=0.3f(3)=f(3)+1;end; end;f(1)=f(1)/iter;f(2)=f(2)/iter;f(3)=f(3)/iter;ffunction f=getparaX(MU,B)%利用标定值MU和容错等级B,随机求一组零件的参数B=int32(B);for i=1:7if B(i)=1sigma0(i)=MU(i)*0.01;end;if B(i)=2sigma0(i)=MU(i)*0.05;end;if B(i)=3sigma0(i)=MU(i)*0.1;end;f(i)=normrnd(MU(i),sigma0(i)/3);% while( (f(i)(MU(i)-sigma0(i) %end;end;