从起点出发,到货物点领取货物最后到卸货点,以完成任务总时间最短为目标进行单目标优化,约束条件为,任务不冲突,路径不冲突,要能实现路径规避 ,4-6台agv一起工作。左右货架间隔可通过1个agv,上下货架间隔可通过两个agv,通道为双向行驶通道。一台agv只能带一个货物,优化目标为完成任务总的时间最短,agv的速度是匀速,转弯也不会减速,取货物时间为固定值。上面的图里面 货物看为正方形 跟agv一样的长度大小,agv试做是跟货物一样大小的正方形agv的速度是每秒1个车身。多台agv一起完成指定任务的时间最短,比如你可以设置三台agv一起取十个左右的货物到终点,使得这个时间最短。那就设置3台agv一起工作 取十个货物到终点 任务不冲突 路径不冲突 这样可以么,十个货物你可以在图片上面随便选。agv完成任务后从终点返回起点的时间和路径可以不计,或者可以把这个时间视作固定值 路径不会跟任务车辆冲突。

场景的仿真效果如下所示:

优化曲线

优化后场景如下

部分核心代码:

clc;
clear;
close all;
warning off;
addpath 'func\'
addpath 'GA\'

global N2;
global N1;
global W;
global W1;
global W2;
global W3;
global W4;
global V;
global Navg;
global X;
global Y;
global Starts;
global ends;
global Idx;
global Index;
global Xeach;
global Xpos;
global Ypos;
%产生地图
%上下每个区域的行数
N2 = 5;
%左右列数
N1 = 10;
%AGV大小
W  = 8;%这个地方不要改,保证坐标都是正数,方便内部计算处理
%左右货架间隔可通过1个agv
W1 = W/4;
%上下货架间隔可通过两个agv
W2 = W/4;
%上下两个区域的间隔
W3 = 2*W;
%货架大小
W4 = W;
%速度
V  = 1;

%AVG数量
Navg = 3;
[X,Y,Starts,ends,Idx,Xeach]=func_maps(N1,N2,W1,W2,W3,W4);
% Xeach(1:2:end)=Xeach(1:2:end)-W1/2;
% Xeach(2:2:end)=Xeach(2:2:end)+W4+W1/2;

%选择需要被搬运的货物编号
Index= [1,2,4,5,8,17,23,21,22,34,56,44,45,91];%设置最大值不超过2*N1*N2
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),Y(i)] W4 W4], 'LineWidth', 1, 'EdgeColor', 'b', 'Clipping', 'off');
       hold on
    else
       rectangle('Position', [[X(i),Y(i)] W4 W4], 'LineWidth', 1, 'EdgeColor', 'r', 'Clipping', 'off');
       hold on
       text(X(i)+1,Y(i)+1,num2str(i));
    end
end
plot(Starts(1),Starts(2),'--gs',...
    'LineWidth',2,...
    'MarkerSize',10,...
    'MarkerEdgeColor','b',...
    'MarkerFaceColor',[0.5,0.5,0.5]);
hold on
text(Starts(1)+1,Starts(2)+1,'START');

plot(ends(1),ends(2),'--ys',...
    'LineWidth',2,...
    'MarkerSize',10,...
    'MarkerEdgeColor','r',...
    'MarkerFaceColor',[0.5,0.5,0.5]);

text(ends(1)+1,ends(2)+1,'END');
title('红色为需要搬运的货物位置');

MAXGEN = 50;
NIND   = 200;
Nums   = length(Index)+Navg+1; %优化变量数量,含义为N个货物的路线优化变量+每个AVG的搬运数量变量+冲突策略判断
Chrom  = crtbp(NIND,Nums*10);

%sh
Areas = [];
for i = 1:length(Index)
    Areas = [Areas,[1;length(Index)-i+1]];
end
for i = 1:Navg
    Areas = [Areas,[1;length(Index)-Navg+1]];%每个avg最多搬运N-AVG+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,Navg))+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);

Color{1}='r';
Color{2}='k';
Color{3}='g';
Color{4}='y';
Color{5}='m';
Color{6}='c';

%显示每个avg搬运的货物编号
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

A-06-68

多agv系统调度的MATLAB仿真相关推荐

  1. m基于PSO粒子群优化的柔性制造系统AGV调度模型matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在PSO中,群中的每个粒子表示为向量.在投资组合优化的背景下,这是一个权重向量,表示每个资产的分配资 ...

  2. matlab的pid控制系统设计,PID控制系统设计以及MATLAB仿真.doc

    PID控制系统设计以及MATLAB仿真 PID控制系统设计以及MATLAB仿真 摘 要本文经过对温度这种常用被控参数使用PID系统构思设计,使用MATLAB完成参数的整定和仿真实验.在系统中加入干扰信 ...

  3. qpsk调制解调matlab_本科毕业设计课题—QPSK相干解调的MATLAB仿真(3)

    继续讲解! 给出参考文章! <全数字BPSKQPSK接收机同步技术研究> 模拟中频信号经过模数转换后形成数字中频信号,解调时首先经数字下变频器DDC(digita down-convert ...

  4. matlab2014仿真pid程序,先进 PID 控制及其 MATLAB 仿真 (PDF+程序)

    [实例简介] 目 录 前 言 第 1 章 数字 PID 控制------------------------(1) 1.1PID 控制原理 --------------------------(1) ...

  5. 码分复用的matlab仿真,基于matlab的多路时分复用仿真.doc

    基于matlab的多路时分复用仿真 通信系统原理综设实验报告 多路时分复用matlab仿真系统 教师评语: 引言 在实际的通信系统中,为了扩大通信链路的容量,提高通信系统的利用率,需要在一条链路上传输 ...

  6. matlab仿真谱间干扰,内外分解和谱分解问题解析计算及其MATLAB仿真.pdf

    内外分解和谱分解问题的解析计算及其MATLAB 仿真 摘 要 内外分解及谱分解问题是控制领域的一个重要问题,其应用范围非常广泛, 在许多重要问题上都发挥了关键的作用. 本文首先在第一章中介绍了内外分解 ...

  7. 升降压斩波电路matlab,升降压斩波电路matlab仿真.doc

    <升降压斩波电路matlab仿真.doc>由会员分享,可在线阅读,更多相关<升降压斩波电路matlab仿真.doc(4页珍藏版)>请在人人文库网上搜索. 1.升降压斩波电路ma ...

  8. matlab反馈模型,—倒立摆状态反馈系统的建模及matlab仿真.docx

    倒立摆状态反馈系统的建模及matlab仿真 课题名称:倒立摆状态反馈系统的建模及matlab仿真 学生姓名: 谢凯 学 号:2011330380229 班 级:电气工程及其自动化2班 指导老师:高金凤 ...

  9. CIC滤波器的Matlab仿真与FPGA实现

    CIC滤波器 1.单级CIC滤波器: CIC滤波器的冲激响应为: h(n)=1,[0,M-1] h(n)=0,其他 可见CIC滤波器在时域上是一个矩形窗,是一个累加器(积分器). 用MATLAB仿真不 ...

最新文章

  1. 深入浅出的webpack构建工具---DllPlugin DllReferencePlugin提高构建速度(七)
  2. 编写优质代码的 6 大关键方法
  3. $0,$?,$!,$-,$*,$@,$#等的特殊用法
  4. 网络中最常用的网络命令(2)-完整参数
  5. 史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......
  6. 如何用TensorFlow实现人工智能?
  7. windows date格式
  8. C++ 学习 之Struct
  9. 台大李宏毅Machine Learning 2017Fall学习笔记 (9)Keras
  10. 25本免费的Python电子书
  11. 模式识别与机器学习的关系
  12. 组合数学(2)——组合矩阵
  13. Visio自制直角箭头
  14. CSS单行文本溢出显示省略号
  15. RadioButton 只读
  16. 2022-06-26 笔记本新机重装系统
  17. 国内首款众筹刷单破亿的产品诞生,监管缺乏下京东刷单文化盛行
  18. 为什么计算机播放音乐不响,电脑打开音响,播放音乐为什么没有声音??!!~急急急!!快! 爱问知识人...
  19. 【Beta】Scrum Meeting 7 与助教谈话
  20. 树莓派——树莓派语音模块2麦克风阵列扩展板评测

热门文章

  1. OpenSearchServer 1.4 RC4 发布
  2. OpenCV下的角点获取
  3. UA MATH565C 随机微分方程V Stationary Measure
  4. UA MATH636 信息论7 并行高斯信道简介
  5. Linux 组调度学习
  6. Cesium界面学习以及隐藏界面控件
  7. 超图桌面版使用模板创建数据源
  8. win32汇编使用win32 api实现字符串拷贝
  9. Gym101128F:Landscaping
  10. Xamarin IOS – hello word