下料问题的优化设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下料问题的优化设计 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT
题1、[下料问题的优化设计]某车间有一大批长130cm的棒料,根据加工零件的要求,需要从这批棒料中成套截取70cm长的毛坯不少于100根,32cm 长的毛坯不少于100根,35cm长的毛坯不大于100根。要求合理设计下料方案,使剩下的边角料总长最短。
根据题目意义,运用优化设计理论和方法,完成设计全过程;工程问题分析:数学模型建立及特征分析:优化方法选择;优化程序设计(解析优化);计算结果分析;结论及体会。
基于MATLAB一维优化下料问题分析
0 前言
生产中常会通过切割、剪裁、冲压等手段,将原材料加工成所需大小零件,这种工艺过程,称为原料下料问题。在生产实践中,毛坯下料是中小企业的一个重要工序。怎样减少剩余料头损失是节约钢材、降低产品成本、提高企业经济效益的一个重要途径。在毛坯下料中我们常会遇到毛坯种类多、数量大的情况,如不进行周密计算则因料头而造成的钢材损失是相当可观的。为使料头造成的钢材损失减少到最小程度,我们可依据预定的目标和限制条件统筹安排,以最少的材料完成生产任务。
1 一维优化下料问题的具体模型分析
设原材料长度为L,数量充足。需要切割成n(n≥0)种不同规格的零件,根据既省材料容易操作的原则,人们已经设计好了n种不同的下料方式,设第j种下料方式中可下得第i种零件ij a个,又已知第i种零件得需要量为i b个, j x表示第
B种下料方式所消耗得零件数目, j c表示第j B种下料方式所得余料(j=1, j
2 , , n, j x∈ Z)。满足条件的切割方案有很多种,现在要求既满足需要又使所用原材料数量最少,即最优下料方案满足:μp=min (∑j c j x)约束条
件:∑ij a j x=i b,j x∈Z。
线性规划数学模型
根据线性规划算法,约束条件包括两部分:一是等式约束条件,二是变量的非负性。出变量的非负要求外,还有其他不等式约束条件,可通过引入松弛变量将不等式约束化成等式约束形式。如果是求最大值的,则松弛模型最优解对应的目标函数值必大于或等于整数规划最优解对应的目标函数值;如果问题是求最小值,则松弛模型最优解对应的目标函数值必于或等于整数规划最优解对应的目标函数值。因此对于最优下料方案模型为:
由式(1)的线性规划(LP)引入松弛变量
如果得到的最优解是整数,则求解结束。该最优解也是式(1)的最优解。否则,得到的最优解只是式(1)的最优解的一个下界。这样可以把式(1)划分为两个子问题。
再对式(3)和式(4)继续上述过程。若在某一时刻得到了一个全整数解xm,则xm 为式(1)的一个上界。此时 ,若打算从子问题k开始分支,而这一问题的下界为
xk>xm,则这一分支不必再考虑了,因为在这一分支中不会找到小于xm的解。如果xk MATLAB一维优化算法 求解整数线性规划MATLAB程序 : function [ x, y] = ILp ( f, G, h, Geq, heq, lb, ub, x, id, options) global upper op t c x0 A b Aeq beq ID options; if nargin < 10, options = optimset( { } ) ; options. Disp lay = ’off’; op tions. LargeScale = ’off’; end if nargin < 9, id = ones( size ( f) ) ; end if nargin < 8, x = [ ] ; end if nargin < 7 | isemp ty( ub) , ub = inf*ones( size ( f) ) ; end if nargin < 6 | isempty( lb) , lb = zeros( size ( f) ) ; end if nargin < 5, heq = [ ] ; end if nargin < 4, Geq = [ ] ; end upper = inf; c = f; x0 = x; A = G; b = h; Aeq = Geq; beq = heq; ID = id; ftemp = ILP ( lb ( : ) , ub ( : ) ) ; x = opt; y = upper; function ftemp = ILP ( vlb, vub) global upper op t c x0 A b Aeq beq ID options; [ x, ftemp, how ] = linp rog ( c, A, b, Aeq, beq, vlb, vub, x0, op- tions) ; if how < = 0 return; end; if ftemp - upper > 0. 00005 % in order to avoid error return; end; ifmax( abs( x*ID - round ( x*ID) ) ) < 0. 00005 if upper - ftemp > 0. 00005 % in order to avoid error op t = x’; upper = ftemp; return; else op t = [ op t; x’] ; return; end; end; notintx = find ( abs( x - round ( x) ) > = 0. 00005) ; % in order to avoid error intx = fix( x) ; tempvlb = vlb; tempvub = vub;