遗传算法在车间布局优化中的应用2007/06/02 23:39车间大小(5m*5m),放置5台设备,工件在各设备间的传输次数表如下
m1 m2 m3 m4 m5
m1 0 572 1559 157 0
m2 15 0 26 0 2
m3 6 54 0 64 36
m4 0 14 37 0 38
m5 7 4 0 22 0
设备的尺寸表如下
m1 m2 m3 m4 m5
3*3 1*0.8 1.5*0.8 1.5*0.8 0.8*0.7
dxij=0.8 dyij=0.5
分析
车间设备布局最优设计应使得各设备间的运输距离最短,即
另外,各设备在车间中均需占有一定面积,设备间还需要为操作人员留有一定的活动空间,因此在车间设备布局设计中还需要考虑一些约束条件.
间距约束:设备间应保持一定的间距,即
边界约束:设备在X,Y方向的布置不应超过车间的长度尺寸,即
分别表示车间在X,Y方向上的宽度
h,g
遗传算法参数设置:选择实数编码,种群中的个体数目为10,最大代数为100,交叉概率为0.9,变异概率为0.04
适应值函数如下
function [sol,eval]=f554(sol,options)
x(1:5)=sol(1:5);
y(1:5)=sol(6:10);
%传输次数矩阵
a=[0 572 1559 157 0;
15 0 26 0 2;
6 54 0 64 36;
0 14 37 0 38;
7 4 0 22 0];
%x方向尺寸向量
S=[3 1 1.5 1.5 0.8];
%y方向尺寸向量
L=[3 0.8 0.8 0.8 0.7];
%设备x,y在x方向上的最小间距
dxijmin=0.8;
%设备x,y在y方向上的最小间距
dyijmin=0.5;
%车间尺寸
H=5;
G=5;
for i=1:5
for j=1:5
delta1(i,j)=abs(x(i)-x(j))-(S(i)+S(j))/2-dxijmin;
delta2(i,j)=abs(y(i)-y(j))-(L(i)+L(j))/2-dyijmin;
%设备i,j之间的距离
d(i,j)=sqrt((x(i)-x(j)).^2+(y(i)-y(j)).^2);
end
end
%约束1
delta11=min(min(delta1));
%约束2
delta22=min(min(delta2));
summ1=0;
for i=1:4
summ1=summ1+abs(abs(x(i)-x(i+1))+(S(i)+S(i+1))/2);
end
%约束3
summ11=H-summ1;
summ2=0;
for i=1:4
summ2=summ2+abs(abs(y(i)-y(i+1))+(L(i)+L(i+1))/2);
end
%约束4
summ22=G-summ2;
if ((delta11>=0)&(delta22>=0)&(summ11>=0)&(summ22>=0))
fsum=0;
for i=1:5
for j=1:5
fsum=fsum+a(i,j)*d(i,j);
end
end
eval=fsum;
else
%惩罚项
eval=-500;
end
eval=-eval;
求解过程如下
%维数n=5
%车间尺寸
H=5;
G=5;
%x方向尺寸向量
S=[3 1 1.5 1.5 0.8];
smin=min(S)/2;
%y方向尺寸向量
L=[3 0.8 0.8 0.8 0.7];
lmin=min(L)/2;
%设备x,y在x方向上的最小间距
dxijmin=0.8;
%设备x,y在y方向上的最小间距
dyijmin=0.5;
%设置参数边界
bounds =[smin H;smin H;smin H;smin H;smin H;
lmin G;lmin G;lmin G;lmin G;lmin G];
% 生成初始种群,大小为10,且满足约束条件
flag=0;
while flag init=initializega(1,bounds,'f554');
x(1:5)=init(1:5);
y(1:5)=init(6:10);
for i=1:5
for j=1:5
delta1(i,j)=abs(x(i)-x(j))-(S(i)+S(j))/2-dxijmin;
delta2(i,j)=abs(y(i)-y(j))-(L(i)+L(j))/2-dyijmin;
end
end
%约束1
delta11=min(min(delta1));
%约束2
delta22=min(min(delta2));
summ1=0;
for i=1:4
summ1=summ1+abs(x(i)-x(i+1))+(S(i)+S(i+1))/2;
end
%约束3
summ11=H-summ1;
summ2=0;
for i=1:4
summ2=summ2+abs(y(i)-y(i+1))+(L(i)+L(i+1))/2;
end
%约束4
summ22=G-summ2;
if ((delta11>=0)&(delta22>=0)&(summ11>=0)&(summ22>=0))
flag=flag+1;
initPop(flag,:)=init;
else
continue;
end
end
% 调用遗传函数
[p endPop bpop trace] = ga(bounds,'f554',[],initPop,[1e-5 1 1],'maxGenTerm',100,...
'normGeomSelect',[0.08],['arithXover'], [20], 'nonUnifMutation',[2 1 3]);
求解过程超慢,请耐心等待
--------------------------------------------------------------------------------