基于遗传算法卡车无人机旅行推销员问题(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

📋1 概述

一、引言

二、问题定义

三、遗传算法概述

四、基于遗传算法的D2TSP求解方法

1. 编码方案

2. 适应度函数

3. 遗传算子

4. 算法流程

五、仿真验证与结果分析

六、结论与展望

📝2 运行结果

📃3 参考文献

📋4 Matlab代码实现


📋1 概述

    本文利用遗传算法解决了卡车无人机串联或包裹递送操作(即UPS,FedEx)的旅行推销员问题的“最后一英里”问题。每辆卡车都携带一架无人机,该无人机从一个站点发射,将范围内的包裹运送到附近的站点,同时与卡车并行运行。卡车和无人机并行工作以运送包裹。无人机受到航程和容量的限制。因此,它必须作为操作在卡车附近运行。操作是指卡车发射无人机,卡车和无人机运送到不同的位置,然后卡车在会合地点回收无人机以进行电池更换和装载。这个想法是确定卡车和无人机(以及操作)的路线,以最大限度地减少总时间。总时间基于操作(启动-交付-恢复)的时间。操作(卡车或无人机)的最大时间用于计算路径的总时间。

一、引言

旅行推销员问题(TSP)是一个经典的组合优化问题,目标是找到一条访问所有城市恰好一次并最终返回起点的最短路径。随着无人机技术的快速发展,TSP的应用场景得到了极大的扩展,涌现出许多新的变种问题。其中,卡车和无人机协同配送的旅行推销员问题(D2TSP)成为研究热点。在D2TSP中,一辆卡车和多架无人机需要共同完成对多个地点的配送任务,卡车作为主要的运输载体,无人机则辅助完成局部配送,以提高整体配送效率。

二、问题定义

假设有N个城市,其坐标分别为(xᵢ, yᵢ),i=1, 2, ..., N。一辆卡车和若干架无人机需要访问所有N个城市。卡车从起点出发,访问所有城市后返回起点。无人机可以在卡车行驶过程中,从卡车处起飞,访问部分城市后返回卡车。问题的目标是最小化卡车和无人机的总旅行距离或时间。

三、遗传算法概述

遗传算法(Genetic Algorithm, GA)是一种高效的全局优化算法,被广泛应用于解决TSP及其变种问题。遗传算法通过模拟自然选择和遗传机制来搜索最优解,具有原理简单、搜索能力强等特点。

四、基于遗传算法的D2TSP求解方法

1. 编码方案

在D2TSP中,需要设计复杂的编码方式来同时表示卡车和无人机的行程。一种可能的方法是对卡车和每架无人机的路径分别进行编码,或者使用混合编码策略,将卡车和无人机的决策点整合进一个统一的解决方案表示中。

2. 适应度函数

适应度函数定义为总旅行时间的倒数或其他相关指标,以最大化适应度值。在D2TSP中,适应度函数不仅要考虑总行程距离,还要考虑无人机的飞行限制(如续航能力、起飞和降落费用)、货物分配以及主载体与无人机之间的协同工作策略。

3. 遗传算子

为了提高搜索效率和避免早熟收敛,可以对遗传算法的基本算子(选择、交叉、变异)进行改进或创新。例如,引入自适应交叉概率和变异概率,根据当前种群的平均适应度动态调整这些概率。此外,还可以采用精英策略,将上一代最优个体直接复制到下一代,以保留优秀的基因信息。

4. 算法流程

基于遗传算法的D2TSP求解方法通常包括以下几个步骤:初始化种群、计算适应度值、选择个体进行交叉和变异操作、生成新的种群、迭代更新直至满足停止条件(如达到最大迭代次数或找到满足要求的解)。

五、仿真验证与结果分析

为了验证基于遗传算法的D2TSP求解方法的有效性,需要进行仿真验证。仿真验证通常包括选择合适的测试系统(如随机生成的城市坐标)、设置仿真参数(如种群大小、最大迭代次数等)、运行仿真程序并记录优化结果。通过对优化结果进行分析和比较(如有功网损、电压水平等指标),可以评估算法的性能和优劣。

六、结论与展望

基于遗传算法的D2TSP求解方法具有显著的优势,能够在合理的时间内找到高质量的解。未来的研究可以进一步探索更有效的遗传算法参数调整策略、将更复杂的场景(如无人机的续航能力、飞行高度限制以及城市间的障碍物等因素)融入到优化模型中,以及采用其他启发式算法或混合算法来求解D2TSP问题。

📝2 运行结果

部分代码:

% Find the Best Route in the Population
        [minDist,index] = min(totalDist);
        distHistory(iter) = minDist;
        if minDist < globalMin
            globalMin  = minDist; 
            optPop2    = pop2(index,:);
            optPop1    = pop(index,:);
            if showprogress % gaph results
                
                tr_route = (optPop2==0).*optPop1;
                tr_route = tr_route(tr_route>0);
                tr_route = [tr_route tr_route(1)];
                if optPop2(n)==1
                   dr_route = [optPop1 optPop1(1) ];
                else
                   dr_route = [optPop1 ];
                end
                plot(xy(dr_route,1), xy(dr_route,2), 'k.--'); hold on;
                plot(xy(tr_route,1),  xy(tr_route,2),'ks-');  
                xlabel('x-coordinate (km)');
                ylabel('y-coordinate (km)');
                legend('drone','truck');
                 title(sprintf('Truck-1-drone time %1.1f',minDist)); 
                hold off;   
                drawnow;
            end  
        end
        
        % Genetic Algorithm Operators
        randomOrder = randperm(popSize);

        for p = 5:5:popSize
                % basically a random sampling in matrix format with a 
            rtes   = pop(randomOrder(p-4:p),:); 
      
            dists = totalDist(randomOrder(p-4:p));
                % what are the min distances?
            [~,idx] = min(dists); 
                % what is the best route
            bestOf5Route  = rtes(idx,:);
     
                % randomly select two route insertion points and sort
            routeInsertionPoints = sort(ceil(n*rand(1,2)));

                I = routeInsertionPoints(1); 
                J = routeInsertionPoints(2);

                
            for k = 1:5 % Mutate the Best row (dist) to get Three New Routes and orig.
                % a small matrix of 4 rows of best time
                tmpPop(k,:)  = bestOf5Route;
        
                switch k
                       % flip two of the cities and cities between
                    case 2 % Flip
                           tmpPop(k,I:J) = tmpPop(k,J:-1:I);
                            
                    case 3 % Swap
                           tmpPop(k,[I J]) = tmpPop(k,[J I]);
                    case 4 % Slide segment 
                           tmpPop(k,I:J) = tmpPop(k,[I+1:J I]); 
%                            tmpPop2(k,I2)=flag;
                    case 5 % increment sequence one space 
                            tmpPop(k,1:end) = tmpPop(k,[2:end 1]);

                    otherwise % Do Nothing
                end
            end
             % using the original population, create a new population
            newPop(p-4:p,:) = tmpPop; 
        end
        pop = newPop;  % update entire populations with mutations 

 end
 res=[optPop2;
      optPop1]
end

📃3 参考文献

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

📋4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值