您现在的位置:首页 >> 智能优化 >> 内容

m基于遗传算法的多AVG调度和货架存取货路线优化系统matlab仿真

时间:2022/12/9 18:52:30 点击:

  核心提示:02_068m,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y52Vlplr

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览






3.算法概述

        遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。通过优化算法处理之后,得到某个AVGj,搬运了Pj个货物,每个货物的搬运长度为Lj,那么中的路线长度,即对应我们的优化目标函数。 

4.部分源码

%选择需要被搬运的货物编号

Index= [9,5,19,12,13,14,17,21,63,64,75,97];%12个目标

Xpos = (X(Index));

Ypos = (Y(Index));

for i = 1:length(Xpos)

    idx = find(Xeach==Xpos(i));

    if mod(idx,2)==0;

       Xpos(i) = Xpos(i)+W4+W1/2;

    else

       Xpos(i) = Xpos(i)-W1/2;

    end

end

figure;

for i = 1:length(X)

    tmps = find(Index==i);

    if isempty(tmps)==1

       rectangle('Position', [[X(i)-W4/2,Y(i)-W4/2] W4 W4], 'LineWidth', 1, 'EdgeColor', 'b', 'Clipping', 'off');

       hold on

    else

       rectangle('Position', [[X(i)-W4/2,Y(i)-W4/2] W4 W4], 'LineWidth', 1, 'EdgeColor', 'r', 'Clipping', 'off');

       hold on

       text(X(i)+1,Y(i)+1,num2str(i));

    end

end

MAXGEN = 50;

NIND   = 200;

Nums   = length(Index)+Nagv+1; %优化变量数量,含义为N个货物的路线优化变量+每个agv的搬运数量变量+冲突策略判断

Chrom  = crtbp(NIND,Nums*10);

%sh

Areas = [];

for i = 1:length(Index)

    Areas = [Areas,[1;length(Index)-i+1]];

end

for i = 1:Nagv

    Areas = [Areas,[1;length(Index)-Nagv+1]];%每个agv最多搬运N-agv+1个,保证其他的至少可以搬运1个

end

for i = 1:1

    Areas = [Areas,[1;2]];%策略4选1

end

 

FieldD = [rep([10],[1,Nums]);Areas;rep([0;0;0;0],[1,Nums])];

gen   = 0;

%计算对应的目标值

A = floor(length(Index)*rand(1,Nagv))+1; 

S = sum(A); 

B = round(A*length(Index)/S);

if sum(B)>length(Index)

 [Vbb,Ibb]= max(B);

 B(Ibb) = B(Ibb)-(sum(B)-length(Index));

end

if sum(B)<length(Index)

 [Vbb,Ibb]= min(B);

 B(Ibb) = B(Ibb)+(length(Index)-sum(B));

end  

Xxx          = [1:length(Index),B,1];%初始值

fobj         = func_obj(Xxx);

E            = fobj;

Js           = E*ones(NIND,1);

Objv         = (Js+eps);

gen          = 0; 

 

%%

while gen < MAXGEN;   

      gen

      Pe0 = 0.9999;

      pe1 = 0.0001; 

 

      FitnV=ranking(Objv);    

      Selch=select('sus',Chrom,FitnV);    

      Selch=recombin('xovsp', Selch,Pe0);   

      Selch=mut( Selch,pe1);   

      phen1=bs2rv(Selch,FieldD);   

      for a=1:1:NIND  

          AA   = round(phen1(a,1:length(Index)));

          AA2  = [];

          Index_=Index;

          for i = 1:length(AA)

              AA2(i)=Index_(AA(i));

              Index_(AA(i))=[];

          end

          BB   = floor(phen1(a,1+length(Index):end-1))+1;

          S    = sum(BB); 

          BB2  = round(BB*length(Index)/S);

          if sum(BB2)>length(Index)

             [Vbb,Ibb]= max(BB2);

             BB2(Ibb) = BB2(Ibb)-(sum(BB2)-length(Index));

          end

          if sum(BB2)<length(Index)

             [Vbb,Ibb]= min(BB2);

             BB2(Ibb) = BB2(Ibb)+(length(Index)-sum(BB2));

          end   

          CC2  = round(phen1(a,end));

          

          X1   = [AA2,BB2,CC2];

 

          %计算对应的目标值

          [fobj,pathall] = func_obj(X1);

          E              = fobj;

          JJ(a,1)        = E;

          XX{a}          = X1;

          pathallX{a}    = pathall;

      end 

      

      Objvsel=(JJ);    

      [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);   

      gen=gen+1; 

      %保存参数收敛过程和误差收敛过程以及函数值拟合结论

      Error(gen) = mean(JJ);

end 

clc;

figure;

plot(Error,'linewidth',2);

grid on

xlabel('迭代次数');

ylabel('遗传算法优化过程');

[V,I]=min(JJ);

XX_best      = XX{I};

pathall_best = pathallX{I};

idxx = XX_best(1:length(Index));

Nums = XX_best(1+length(Index):end-1);

%显示每个agv搬运的货物编号

S1=0;

E1=0;

for j = 1:length(Nums)

    if j == 1

       S1=E1+1;

       E1=S1+Nums(j)-1;

       sel{j}=idxx(S1:E1); 

    else 

       S1=E1+1;

       E1=S1+Nums(j)-1;

       sel{j}=idxx(S1:E1); 

    end

    sel{j}

end

idxx = (1:length(Index));

Nums = XX_best(1+length(Index):end);

figure;

for i = 1:length(X)

rectangle('Position', [[X(i)-W4/2,Y(i)-W4/2] W4 W4], 'LineWidth', 1, 'EdgeColor', 'b', 'Clipping', 'off');

hold on

end

for j = 1:length(sel)

    tmps = sel{j};

    for jj = 1:length(tmps)

        rectangle('Position', [[X(tmps(jj))-W4/2,Y(tmps(jj))-W4/2] W4 W4], 'LineWidth', 1, 'EdgeColor', Color{j}, 'Clipping', 'off');

        hold on

        text(X(tmps(jj))+1,Y(tmps(jj))+1,num2str(tmps(jj)));

    end

end

02_068m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168