Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
普通会员
注册日期: 2008-10-06
年龄: 25
帖子: 53
声望力: 18 ![]() |
![]()
下面的源码实现了装配生产线任务平衡优化问题(ALB问题)的遗传算法,算法主要参考下面这篇文献,并对其进行了改进。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系。
陈永卿,潘刚,李平.基于混合遗传算法的装配线平衡[J].机电工程,2008,25(4):60-62. function [BestX,BestY,BestZ,AllFarm,LC1,LC2,LC3,LC4,LC5]=GSAALB(M,N,Pm,Pd,K,t0,alpha,TaskP,TaskT,TaskV,RT,RV) %% 装配生产线任务平衡优化的遗传算法 % GreenSim团队原创作品,转载请注明 % 欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim %% 输入参数列表 % M------------遗传算法进化代数 % N------------种群规模,取偶数 % Pm-----------变异概率调节参数 % Pd-----------变异程度调节参数,0<Pd<1,越大,变异的基因位越多 % 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<=M%设置停止条件 %% ----------------------变异退火算子------------------------------ for i=1:N if rand>Pm&&i~=BestPos %如果随机数大于变异概率门限值,并且不属于保护个体,就对其实施变异 I=farm(i,:);%取出该个体 k=1; while k<=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<exp((FJ-FI)/(FI*t)) 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
__________________
算法设计、代写程序,欢迎访问GreenSim团队主页→ http://blog.sina.com.cn/greensim 此帖于 2010-03-06 17:23 被 greensim 编辑。 原因: 插入图片 |
![]() |
![]() |