基于改进遗传算法的卡车和两架无人机旅行推销员问题(D2TSP)(Matlab代码实现)

目录

1 概述

2 运行结果

3 参考文献

4 Matlab代码实现

🎁专栏目录链接:

🌈🌈🌈路径规划神经网络预测电气代码智能算法及其应用优化调度图像处理车间调度信号处理浪漫的她数学建模🌟🌟🌟

1 概述

   本文为解决卡车和两个无人机旅行推销员的问题,表示为串联团队,无人机提供最后一英里的努力。使用遗传算法(路由突变)来解决问题。该问题可以解决随机生成坐标的100个城市的D2TSP。该解决方案基于最小化时间而不是距离。最短时间计算基于卡车或无人机在操作中交付的最长时间。操作表示为无人机(或两者)发射、发送交付然后在会合位置恢复的节点或停靠点。每架无人机都受到航程和容量的限制。因此,操作中的停靠范围和停靠次数受到无人机约束的限制。

2 运行结果

 

部分代码:

% Sanity Checks
    popSize     = max(12,12*ceil(popSize(1)/12));
    numIter     = max(1,round(real(numIter(1))));
    showProg    = logical(showProg(1));
    showResult  = logical(showResult(1));
    showWaitbar = logical(showWaitbar(1));
    
    % Initialize the Populations
    popRoute = zeros(popSize,n); %routes        
    popTrk   = zeros(popSize,n); %truck route
    popDrn   = zeros(popSize,n); %drone route
    popDrn2   = zeros(popSize,n); %drone 2 route
    popOps   = zeros(popSize,n); %operations drone 1
    popRoute(1,:) = (1:n);
    rp =popRoute(1,:);

    %[rp, optr, oppr, opdr] = map_cir2(rp) ;  
    [rp, optr, oppr, opdr, opdr2] = map_cir2(rp);
    
    popRoute(1,:) = map_cir( rp);   
    popTrk(1,:)   = optr;    
    popDrn(1,:)   = opdr; 
    popDrn2(1,:)  = opdr2;
    popOps(1,:)   = oppr;
    for k = 2:popSize
        [op, tr, dr, dr2]  = rand_ops_d_o();
       % op=oppr; tr=optr; dr=opdr; dr2=opdr2;
        popRoute(k,:) = randperm(n);
        
         if mod(k,2)==0    % swap
            r = sort([randi(n) randi(n)]);
            r1=r(1); r2=r(2);
            popRoute(k,:)= popRoute(1,:);
            popRoute(k,[r1 r2]) = popRoute(k,[r2 r1]); 
        elseif mod(k,3)==0 % flip
            r = sort([randi(n) randi(n)]);
            r1=r(1); r2=r(2);
            popRoute(k,:)= popRoute(1,:);
            popRoute(k,r1:r2) = popRoute(k,r2:-1:r1); 
        elseif mod(k,4)==0% swap, flip
            r = sort([randi(n) randi(n)]);
            r1=r(1); r2=r(2);
            popRoute(k,:)= popRoute(1,:);
            popRoute(k,[r1 r2]) = popRoute(k,[r2 r1]);
            popRoute(k,r1:r2)   = popRoute(k,r2:-1:r1);
        else
            r = sort([randi(n) randi(n)]);
            r1=r(1); r2=r(2);
            popRoute(k,:)= popRoute(1,:);
            popRoute(k,[r1 r2]) = popRoute(k,[r2 r1]);
           % popRoute(k,r1:r2)   = popRoute(k,r2:-1:r1);    
        end
        
        
        popTrk(k,:)   = tr;
        popOps(k,:)   = op;
        popDrn(k,:)   = dr;
        popDrn2(k,:)  = dr2;
    end
    
    % Run the GA
    globalMin   = Inf;
    totalDist    = zeros(1,popSize);
    totalTime    = zeros(1,popSize);              % total time for route
    totalEnergy  = zeros(1,popSize);              % total energy for route
    totalCost    = zeros(1,popSize);              % cost of route
    totalCostkm  = zeros(1,popSize);
    totalCosthr  = zeros(1,popSize);
    totalEnergyP = zeros(1,popSize);
    distHistory  = zeros(1,numIter);      
    timeHistory  = zeros(1,numIter);
    energyHistory= zeros(1,numIter);
    costHistory  = zeros(1,numIter);
    costkmHistory= zeros(1,numIter);
    costhrHistory= zeros(1,numIter);

    
    tmpPopRoute  = zeros(12,n);
    tmpPopTrks   = zeros(12,n);
    tmpPopOps    = zeros(12,n);
    tmpPopDrns   = zeros(12,n);
    tmpPopDrns2  = zeros(12,n);
    
    newPopRoute  = zeros(popSize,n);
    newPopTrks   = zeros(popSize,n);
    newPopOps    = zeros(popSize,n);
    newPopDrns   = zeros(popSize,n);
    newPopDrns2  = zeros(popSize,n);

3 参考文献

[1]黄书召,田军委,乔路,王沁,苏宇.基于改进遗传算法的无人机路径规划[J.计算机应用,2021,41(02):390-397.

4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值