Bootstrap

matlab数学建模-矩形板材零部件排样优化设计

1、内容简介


538-可以交流、咨询、答疑

2、内容说明

矩形排样问题属于组合最优化问题和NP完全问题,因为存在计算上的复杂性,在一定时间内求其精确全局最优解是相当困难的。对于矩形排样问题,任何算法都难以保证总能得到最优解,目前解决的方法多为各种启发式算法。提高原材料利用率问题是一个系统工程问题,需要从生产管理、优化下料、支持决策等方面提供完备的一体化解决方案。其中优化下料环节中,构造有效的优化算法是关键。矩形件排样不仅适用于矩形零件的排放,而且也是不规则零件排放的基础。本文研究的问题是利用遗传算法,将定长定宽的板材矩形件的优化下料,其中板材为定宽定长,要排放的矩形件数量和规格都是已知的,要求在排放完所有给定矩形件的前提下使所消耗的板材面积最小。

关键词:矩形板材,排样优化,遗传算法

随着中国加入WTO,制造行业的企业面临着更为激烈的市场竞争。为了在竞争中立于不败之地,企业必须想方设法提高经济效益,而提高经济效益的重要途径之一就是通过 提高材料的利用率来降低成本。

矩形件排样在工业上有广泛的应用,目标是使下料过程中的切割损失减少到最少,使得原材料的利用率最高。优化排样算法的研究既有实际应用价值,又有理论意义。矩形排样问题属于组合最优化问题和NP完全问题,因为存在计算上的复杂性,在一定时间内求其精确全局最优解是相当困难的。对于矩形排样问题,任何算法都难以保证总能得到最优解,目前解决的方法多为各种启发式算法。提高原材料利用率问题是一个系统工程问题,需要从生产管理、优化下料、支持决策等方面提供完备的一体化解决方案。其中优化下料环节中,构造有效的优化算法是关键。矩形件排样不仅适用于矩形零件的排放,而且也是不规则零件排放的基础。本文研究的问题是无约束非剪切单一-卷材矩形件的优化下料,其中卷材为定宽,要排放的矩形件数量和规格都是已知的,要求在排放完所有给定矩形件的前提下使所消耗的卷材长度最小。

遗传算法是借鉴生物的自然选择和进化机制的一种全局优化自适应概率搜索算法,具有快速随机的全局搜索能力。对于非常复杂、高度非线性问题的优化求解,表现出比其它传统优化方法更优越的性能,是21世纪智能计算中的核心技术之一。本文对遗传算法做了系统介绍,包括遗传算法的特点、基本实现技术等。对求解矩形件优化排样问题的遗传算法的设计及具体实现进行了详细讨论。

传统的制造业发展历程中,资源的浪费一直是世界各国关注的焦点问题。如何利用现代科技与信息技术努力提高资源利用率,节约原料成本,已成为全世界的研究的热点。我国是全球最大制造业生产国,具有世界上最多的制造企业,因此,即使小幅度对原料利用率的提高,也会为企业创造巨大的财富,从而为国家节省大量资源。排样设计它广泛存在于船舶、玻璃、木材、钢材和造纸等传统制造行业。一种合理的排样方法可以为企业创造巨额的经济财富,排样问题具有很大的研究价值。  

3、仿真分析

clc
close all
clear
global dimension w h
% dimension = [7 4 6 5 2 10;
%              6 7 7 2 5  4];
dimension = [5 4 6 8 2 6 5;
             6 7 7 2 5 6 8];
num = length(dimension);%零件个数
w = 35;
h = 15;
lb = zeros(1,3*num);
ub = [w*ones(1,num) h*ones(1,num) ones(1,num)];
% options = optimoptions('ga','Display','iter');
options = gaoptimset('CrossoverFraction', 0.7,'Display','iter', 'Generations', 30, 'PopulationSize', 40,'TolCon',1e-6);
% ,'TolCon',1e-6,'InitialPopulation',num*300
% ,'PopInitRange',[zeros(1,num*3);ones(1,3*num)]
[x,fval,exitflag,output] = ga(@obj,3*num,[],[],[],[],lb,ub,@yueshu,options)

x(1:num)
x(num+1:2*num)
x(2*num+1:3*num)
[c,ceq]=yueshu(x)

color = 'grmck';
figure
rectangle('position',[0,0,w,h],'EdgeColor','b','LineWidth',3)
xlim([-10 w+10])
ylim([-5 h+10])
hold on
for i = 1:num
    x_1 = x(2*i-1);
    y_1 = x(2*i);
    width = (1-x(num*2+i))*dimension(1,i)+x(num*2+i)*dimension(2,i);
    height = (1-x(num*2+i))*dimension(2,i)+x(num*2+i)*dimension(1,i);
    index = unidrnd(length(color));
    rectangle('position',[x_1,y_1,width,height],'EdgeColor',color(index),'LineWidth',2)
    text(x_1+1,y_1+1,num2str(i))
    hold on
end
hold off

4、参考论文


 

;