【无人机三维路径规划】基于人工鱼群算法求解无人机三维航迹规划附matlab代码

简介: 【无人机三维路径规划】基于人工鱼群算法求解无人机三维航迹规划附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

一种基于人工鱼群的无人机路径规划方法.

一、 人工鱼的结构模型

人工鱼是真实鱼抽象化、虚拟化的一个实体,其中封装了自身数据和一系列行为,可以接受环境的刺激信息,做出相应的活动。其所在的环境由问题的解空间和其他人工鱼的状态,它在下一时刻的行为取决于自身的状态和环境的状态,并且它还通过自身的活动来影响环境,进而影响其他人工鱼的活动。

二、 人工鱼群算法的寻优原理

人工鱼群算法在寻优的过程中,可能会集结在几个局部最优解的周围,使人工鱼跳出局部最优解,实现全局寻优的因素主要有:


  • 觅食行为中重复次数较少时,为人工鱼提供了随机移动的机会,从而可能跳出局部最优解;

  • 随机步长使得人工鱼在前往局部最优解的途中,有可能转向全局最优解;

  • 拥挤度因子 δδ 限制了聚群的规模,使得人工鱼能够更广泛的寻优;

  • 聚群行为能够促使少出陷于局部最优解的人工鱼趋向全局最优解的人工鱼方向聚集,从而逃出局部最优解;

  • 追尾行为加快了人工鱼向更优状态游动。

三、 人工鱼群算法实现的步骤


  1. 初始化设置,包括种群规模N、每条人工鱼的初始位置、人工鱼的视野Visual、步长step、拥挤度因子δ、重复次数Trynumber;

  2. 计算初始鱼群各个体的适应值,取最优人工鱼状态及其值赋予给公告牌;

  3. 对每个个体进行评价,对其要执行的行为进行选择,包括觅食Pray、聚群Swarm、追尾Follow和评价行为bulletin;

  4. 执行人工鱼的行为,更新自己,生成新鱼群;

  5. 评价所有个体。若某个体优于公告牌,则将公告牌更新为该个体;

  6. 当公告牌上最优解达到满意误差界内或者达到迭代次数上限时算法结束,否则转步骤3。

四、人工鱼群算法实现流程图


⛄ 部分代码

   pointNum,visual,startPos,goalPos,try_number,delta,step,X,Y,Z)


N = length(fishs);

% 确定视野范围内的伙伴数目与中心位置

for i = 1:pointNum

   % 初始化感知范围内的位置变量和鱼数量

   pos_sum = [0 0 0];

   n_swarm = 0;

   

   % 依次遍历

   for j = 1:N

       % 计算第j只鱼与本鱼的距离

       dx = fish.pos.x(i) - fishs(j).pos.x(i);

       dy = fish.pos.y(i) - fishs(j).pos.y(i);

       dz = fish.pos.z(i) - fishs(j).pos.z(i);

       dist = sqrt(dx^2 + dy^2 + dz^2);

       

       % 判断是否位于感知范围内

       if dist < visual

           n_swarm = n_swarm+1;  % 统计在感知范围内的鱼数量

           pos_sum = pos_sum + ...

               [fishs(j).pos.x(i), fishs(j).pos.y(i), fishs(j).pos.z(i)];

       end

   end

   

   % 计算其他伙伴的中心位置,并减掉自身的位置

   pos_sum = pos_sum -[fish.pos.x(i),fish.pos.y(i),fish.pos.z(i)];

   n_swarm = n_swarm - 1;

   centerPos = pos_sum / n_swarm;

   

   % 对于第i个维度的控制点,赋值

   pos_c.x(i) = centerPos(1);

   pos_c.y(i) = centerPos(2);

   pos_c.z(i) = centerPos(3);

end


% 判断中心位置是否拥挤

[fitness_c,~] = calFitness(startPos, goalPos, pos_c);

if  fitness_c/n_swarm < delta*fish.fitness  && fitness_c < fish.fitness

   % 群聚行为:伙伴中心位置状态较优,向此方向群聚

   for i = 1:pointNum

       direction = [pos_c.x(i)-fish.pos.x(i), pos_c.y(i)-fish.pos.y(i), ...

           pos_c.z(i)-fish.pos.z(i)];

       centerPos = [fish.pos.x(i),fish.pos.y(i),fish.pos.z(i)] + ...

           rand*step*direction/norm(direction);

       pos_swarm.x(i) = centerPos(1);

       pos_swarm.y(i) = centerPos(2);

       pos_swarm.z(i) = centerPos(3);

   end

   

   % 计算适应度

   [fitness_swarm,path_swarm] = calFitness(startPos, goalPos,pos_swarm);

   

   % 碰撞检测判断

   flag = judgeObs(path_swarm,X,Y,Z);

   if flag == 1

       % 若flag=1,表明此路径将与障碍物相交,则增大适应度值

       fitness_swarm = 1000*fitness_swarm;

   end

else

   

   % 觅食行为

   label_prey = 0;             % 用于判断觅食行为是否找到优于当前的状态

   for i = 1:try_number

       % 随机搜索一个状态

       pos_rand.x = fish.pos.x + visual*(-1 + rand*2);

       pos_rand.y = fish.pos.y + visual*(-1 + rand*2);

       pos_rand.z = fish.pos.z + visual*(-1 + rand*2);

       [fitness_rand,~] = calFitness(startPos, goalPos, pos_rand);

       

       % 判断搜索到的状态是否比原来的好

       if fitness_rand < fish.fitness

           for j = 1:pointNum

               direction = [pos_rand.x(j) - fish.pos.x(j), pos_rand.y(j)-fish.pos.y(j), ...

                   pos_rand.z(j) - fish.pos.z(j)];

               centerPos = [fish.pos.x(j),fish.pos.y(j),fish.pos.z(j)] + ...

                   rand*step*direction/norm(direction);

               pos_swarm.x(j) = centerPos(1);

               pos_swarm.y(j) = centerPos(2);

               pos_swarm.z(j) = centerPos(3);

           end

           % 计算适应度

           [fitness_swarm,path_swarm] = calFitness(startPos, goalPos,pos_swarm);

           

           % 碰撞检测判断

           flag = judgeObs(path_swarm,X,Y,Z);

           if flag == 1

               % 若flag=1,表明此路径将与障碍物相交,则增大适应度值

               fitness_swarm = 1000*fitness_swarm;

           end

           label_prey = 1;

           break

       end

   end

   

   % 随机行为

   if label_prey == 0

       % 随机搜索一个状态

       pos_swarm.x = fish.pos.x + step *(-1 + rand*2);

       pos_swarm.y = fish.pos.y + step *(-1 + rand*2);

       pos_swarm.z = fish.pos.z + step *(-1 + rand*2);

       [fitness_swarm,path_swarm] = calFitness(startPos, goalPos,pos_swarm);

       

       % 碰撞检测判断

       flag = judgeObs(path_swarm,X,Y,Z);

       if flag == 1

           % 若flag=1,表明此路径将与障碍物相交,则增大适应度值

           fitness_swarm = 1000*fitness_swarm;

       end

   end

end

⛄ 运行结果

⛄ 参考文献

[1]许江波, 刘琳岚. 基于改进人工鱼群算法的无人机三维航迹规划[J]. 计算机工程与设计, 2019, 40(2):5.

[2]曹学玉, 邱毅, 王会芳. 一种基于人工鱼群的无人机路径规划方法:, CN112650287A[P]. 2021.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
11天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
22天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
25 3
|
21天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
18天前
|
机器学习/深度学习 存储 算法
基于Actor-Critic(A2C)强化学习的四旋翼无人机飞行控制系统matlab仿真
基于Actor-Critic强化学习的四旋翼无人机飞行控制系统,通过构建策略网络和价值网络学习最优控制策略。MATLAB 2022a仿真结果显示,该方法在复杂环境中表现出色。核心代码包括加载训练好的模型、设置仿真参数、运行仿真并绘制结果图表。仿真操作步骤可参考配套视频。
38 0
|
27天前
|
缓存 分布式计算 监控
优化算法和代码需要注意什么
【10月更文挑战第20天】优化算法和代码需要注意什么
18 0
|
29天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
6天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
14天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
15天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。

热门文章

最新文章

下一篇
无影云桌面