遗传算法优化装配生产线任务,MATLAB源码,优化出生产线最佳装配路径

源代码在线查看: 遗传算法优化装配生产线任务,matlab源码.txt

软件大小: 3 K
上传用户: junglili
关键词: MATLAB 生产线 装配 算法优化
下载地址: 免注册下载 普通下载 VIP

相关代码

				装配生产线任务平衡优化遗传算法通用MATLAB源码
				
				下面的源码实现了装配生产线任务平衡优化问题(ALB问题)的遗传算法
				 
				function [BestX,BestY,BestZ,AllFarm,LC1,LC2,LC3,LC4,LC5]=GSAALB(M,N,Pm,Pd,K,t0,alpha,TaskP,TaskT,TaskV,RT,RV)
				%% 装配生产线任务平衡优化的遗传算法
				%% 输入参数列表
				% M------------遗传算法进化代数
				% N------------种群规模,取偶数
				% Pm-----------变异概率调节参数
				% Pd-----------变异程度调节参数,0				% K------------同一温度下状态跳转次数
				% T0-----------初始温度
				% Alpha--------降温系数
				% Beta---------浓度均衡系数
				% TaskP--------任务优先矩阵,n×n矩阵,Pij=1表示任务i需在j之前完成,Pij=0时任务i和j没有优先关系
				% TaskT--------任务时间属性,n×1向量
				% TaskV--------任务体积属性,n×1向量
				% RT-----------时间节拍约束
				% RV-----------工位体积约束
				%% 输出参数列表
				% BestX--------最好个体的编码
				% BestY--------最好个体对应的装配方案
				% BestZ--------最好个体的目标函数值
				% LC1----------最优个体适应值的收敛曲线,M×1
				% LC2----------种群平均适应值的收敛曲线,M×1
				% LC3----------工位个数收敛曲线,M×1
				% LC4----------时间利用率及平衡度综合度量参数收敛曲线,M×1
				% LC5----------空间利用率及平衡度综合度量参数收敛曲线,M×1
				% AllFarm------各代种群的集合,M×1的细胞结构
				%% -----------------------初始化----------------------------------
				n=size(TaskP,1);
				[AA,BB]=QJHJ(TaskP);%调用子函数,建立每一个任务的前任务集和后任务集
				farm=Initialization(N,TaskP,AA,BB);%调用子函数,种群初始化
				%输出参数初始化
				BestX=zeros(1,n);
				BestY=zeros(1,n);
				BestZ=0;
				LC1=zeros(M,1);
				LC2=zeros(M,1);
				LC3=zeros(M,1);
				LC4=zeros(M,1);
				LC5=zeros(M,1);
				AllFarm=cell(M,1);
				%控制参数初始化
				m=1;%迭代计数器
				t=t0;%温度指示器
				BestPos=1;%初始时任意指定被保护个体
				%% -----------------------迭代过程---------------------------------
				while m				%% ----------------------变异退火算子------------------------------
				    for i=1:N
				        if rand>Pm&&i~=BestPos
				            %如果随机数大于变异概率门限值,并且不属于保护个体,就对其实施变异
				            I=farm(i,:);%取出该个体
				            k=1;
				            while k				                %调用变异子函数
				                J=Mutation(I,Pd,AA,BB);
				                %调用计算适应值子函数
				                [YI,ZI,FI,TGWI,VGWI,f1I,f2I]=Fitness(I,TaskT,TaskV,RT,RV);
				                [YJ,ZJ,FJ,TGWJ,VGWJ,f1J,f2J]=Fitness(J,TaskT,TaskV,RT,RV);
				                if FJ>FI
				                    farm(i,:)=J;
				                elseif rand				                    farm(i,:)=J;
				                else
				                    farm(i,:)=I;
				                end
				                k=k+1;
				            end
				        end
				    end   
				%% -----------------------交叉算子---------------------------------
				    newfarm=zeros(size(farm));
				    Ser=randperm(N);%用这个函数保证随机配对
				    for i=1:2:(N-1)
				        FA=farm(Ser(i),:);
				        FB=farm(Ser(i+1),:);
				        [SA,SB]=CrossOver(FA,FB);
				        newfarm(i,:)=SA;
				        newfarm(i+1,:)=SB;
				    end
				    %新旧种群合并
				    FARM=[farm;newfarm];   
				%% -----------------------选择复制---------------------------------
				   FIT_Y=zeros(2*N,n);
				   FIT_Z=zeros(2*N,1);
				   FIT_F=zeros(2*N,1);
				   FIT_f1=zeros(2*N,1);
				   FIT_f2=zeros(2*N,1);
				   fit_Y=zeros(N,n);
				   fit_Z=zeros(N,1);
				   fit_F=zeros(N,1);
				   fit_f1=zeros(N,1);
				   fit_f2=zeros(N,1);
				   for i=1:(2*N)
				       XX=FARM(i,:);
				       [Y,Z,F,TGW,VGW,f1,f2]=Fitness(XX,TaskT,TaskV,RT,RV);
				       FIT_Y(i,:)=Y;
				       FIT_Z(i)=Z;
				       FIT_F(i)=F;
				       FIT_f1(i)=f1;
				       FIT_f2(i)=f2;
				   end
				   Ser=randperm(2*N);
				   for i=1:N
				       ff1=FIT_F(Ser(2*i-1));
				       ff2=FIT_F(Ser(2*i));
				       if ff1>=ff2
				           farm(i,:)=FARM(Ser(2*i-1),:);
				           fit_Y(i,:)=FIT_Y(Ser(2*i-1),:);
				           fit_Z(i)=FIT_Z(Ser(2*i-1));
				           fit_F(i)=FIT_F(Ser(2*i-1));
				           fit_f1(i)=FIT_f1(Ser(2*i-1));
				           fit_f2(i)=FIT_f2(Ser(2*i-1));
				       else
				           farm(i,:)=FARM(Ser(2*i),:);
				           fit_Y(i,:)=FIT_Y(Ser(2*i),:);
				           fit_Z(i)=FIT_Z(Ser(2*i));
				           fit_F(i)=FIT_F(Ser(2*i));
				           fit_f1(i)=FIT_f1(Ser(2*i));
				           fit_f2(i)=FIT_f2(Ser(2*i));
				       end
				   end
				  
				%% -----------------------记录与更新-------------------------------
				   maxF=max(fit_F);
				   meanF=mean(fit_F);
				   LC1(m)=maxF;
				   LC2(m)=meanF;
				   pos=find(fit_F==maxF);
				   BestPos=pos(1);
				   BestX=farm(BestPos,:);
				   BestY=fit_Y(BestPos,:);
				   BestZ=fit_Z(BestPos);
				   LC3(m)=fit_Z(BestPos);
				   LC4(m)=fit_f1(BestPos);
				   LC5(m)=fit_f2(BestPos);
				   AllFarm{m}=farm;
				   disp(m);
				   m=m+1;
				   t=t*alpha;
				end
							

相关资源