【无人机】基于遗传算法混合粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)

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

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

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

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

对于无人机的路径规划问题,改进的粒子群算法(GAPSO)与传统的遗传算法(Genetic Algorithm, GA)和基本粒子群算法(Particle Swarm Optimization, PSO)相比较,可以提供更高效、更优的路径规划方案。无人机路径规划问题主要涉及在给定的环境中,如何有效地从起始点导航至目标点,同时避免障碍物、最小化路径长度或飞行时间,以及考虑其他可能的约束条件,例如能耗最小化或飞行高度限制。

### 基本原理比较

1. **遗传算法(GA):** 遗传算法是一种模拟自然选择和遗传学的搜索算法。它利用适应度函数确定个体的生存概率,通过选择、交叉(交配)和变异操作,在种群中不断演化出更好的解。GA在处理复杂的优化问题时表现出不俗的能力,但在局部搜索能力和收敛速度方面可能不如PSO。

2. **粒子群算法(PSO):** 粒子群优化算法是模拟鸟群捕食行为的一种群体智能优化技术。每个粒子代表问题空间中的一个潜在解,通过跟踪个体和群体的经验最优位置来更新自己的位置。PSO具有实现简单、收敛速度快的特点,但可能会陷入局部最优。

3. **改进的粒子群算法(GAPSO):** GAPSO通过在标准PSO的基础上引入了一些改进策略,如动态调整速度和位置更新公式、使用多策略混合初始化种群、引入局部搜索策略等,结合遗传算法的优点。以增强算法的全局搜索能力和避免早熟收敛。

### 性能比较

- **全局搜索能力:** GAPSO通过引入新的策略提高了全局搜索能力,相较于GA和标准PSO,可以更有效地避免陷入局部最优解。
- **收敛速度:** 改进的粒子群算法通过优化搜索策略,通常具有更快的收敛速度,相比遗传算法和基本的粒子群算法,在很多情况下可以更快地找到满意的解。
- **解的质量:** 在很多情况下,GAPSO能够找到比GA和PSO更优的解,因为它结合了多种策略来保证在搜索过程中维持高的多样性,同时有效指导搜索过程向全局最优解进发。
- **鲁棒性:** 改进的策略提高了算法的鲁棒性,使IPSO能够应对不同的问题设置和动态变化的环境,而传统的GA和PSO在面对复杂多变的环境时可能表现不如GAPSO。
- **计算复杂度:**GAPSO的计算复杂度可能略高于原始PSO和GA,因为它采用了更复杂的更新机制和局部搜索策略。然而,通过高效的并行化设计和代码优化,这一影响可以被大幅度减少。

综上所述,基于改进粒子群算法的无人机路径规划研究显示,GAPSO在很多方面相比于传统的遗传算法和粒子群算法都有显著的改进和优势,特别是在全局搜索能力、收敛速度和解的质量方面。然而,选择哪种算法还需要根据具体问题的特性、计算资源的限制和求解质量的要求来综合考量。

📚2 运行结果

部分代码:

%种群的适应度值
seeds_fitness=zeros(1,model.NP);
%全局最优
p_global.cost=inf;
%适应度最优值保留
best=zeros(model.MaxIt+1,1);
best(1)=model.globel.cost;
%种群初始化
for i=1:model.NP
    chromosome(i).pos=model.chromosome(i).pos;
    chromosome(i).alpha=model.chromosome(i).alpha;
    chromosome(i).beta=model.chromosome(i).beta;
    chromosome(i).atkalpha=model.chromosome(i).atkalpha;
    chromosome(i).atkbeta=model.chromosome(i).atkbeta;
    chromosome(i).T=model.chromosome(i).T;
    chromosome(i).sol=model.chromosome(i).sol;
    chromosome(i).cost=model.chromosome(i).cost;
    chromosome(i).IsFeasible=model.chromosome(i).IsFeasible;

    seeds_fitness(i)=model.seeds_fitness(i);
  for d=1:3
  chromosome(i).vel(d,:)= zeros(1,model.dim);
  end
  %更新历史最优粒子
  chromosome(i).best.pos =chromosome(i).pos;
  chromosome(i).best.alpha =chromosome(i).alpha;
  chromosome(i).best.beta =chromosome(i).beta;
  chromosome(i).best.T =chromosome(i).T;
  chromosome(i).best.sol =chromosome(i).sol;
  chromosome(i).best.cost =chromosome(i).cost;
  %更新全局最优例子
  if p_global.cost > chromosome(i).best.cost
    p_global = chromosome(i).best;
  end
  
end

for it=1:model.MaxIt
    %得到最大和平均适应度值
    model.f_max =max(seeds_fitness);
    model.f_avg =mean(seeds_fitness);
   %按照适应度对染色体排序
    sort_array =zeros(model.NP,2);
    for i=1:model.NP
    sort_array(i,:)= [i,chromosome(i).cost];
    end
    %以cost从小到大进行排序
    sort_array =sortrows(sort_array,2);
    model.p_global =p_global;
    %只保留前一半的染色体,后一般抛弃
    for i=1:model.NP/2
           
           next_chromosome(i) =chromosome(sort_array(i,1));
      
           %更新染色体的速度和位置
           [next_chromosome(i).vel,next_chromosome(i).alpha,next_chromosome(i).beta,next_chromosome(i).T]=Update_vel_pos( next_chromosome(i),model );
           [next_chromosome(i).pos]=Angel2Pos( next_chromosome(i),model );
           %检验坐标是否合理
           [flag(i),next_chromosome(i).atkalpha,next_chromosome(i).atkbeta] = IsReasonble(next_chromosome(i),model);
      
           %计算适应度值
           [next_chromosome(i).cost,next_chromosome(i).sol] = FitnessFunction(next_chromosome(i),model);
    end
    %对剩余的NP/2个染色体进行选择交叉变异操作
    for i=model.NP/2+1:2:model.NP
        %随机选择父母
        parents =repmat(my_chromosome,2,1);
        for p=1:2
        array =ceil(rand(1,2)*model.NP/2);
        if next_chromosome(array(1)).cost < next_chromosome(array(2)).cost
            parents(p) = next_chromosome(array(1));
        else
            parents(p) = next_chromosome(array(2));
        end
        end
        %交叉变异操作
        [ sons] = CrossoverAndMutation( parents,model );
        %符合要求以后计算子代的适应度值
        [sons(1).cost,sons(1).sol] = FitnessFunction(sons(1),model);
        [sons(2).cost,sons(2).sol] = FitnessFunction(sons(2),model);
        next_chromosome(i) = sons(1);
        next_chromosome(i+1) =sons(2);
    end
    for i=1:model.NP
       chromosome(i) =next_chromosome(i);
       %更新局部最优
       if chromosome(i).cost < chromosome(i).best.cost
              chromosome(i).best.pos =chromosome(i).pos;
              chromosome(i).best.alpha =chromosome(i).alpha;
              chromosome(i).best.beta =chromosome(i).beta;
              chromosome(i).best.T =chromosome(i).T;
              chromosome(i).best.sol =chromosome(i).sol;
              chromosome(i).best.cost =chromosome(i).cost;

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]鞠宏浩,程楷钧,邓彩连,等.无人机空地网络研究综述[J/OL].西南交通大学学报:1-14[2024-04-16].http://kns.cnki.net/kcms/detail/51.1277.U.20240415.1013.004.html.

[2]薛斌,张志才,付芳.无人机辅助智能交通系统中面向视频多播的资源优化[J].测试技术学报,2024,38(02):194-202.

[3]李鹏娜.无人机路径规划方法研究及在油田巡井中的应用[D].东北石油大学[2024-04-17].DOI:CNKI:CDMD:2.1017.085318.

🌈4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值