【无人机三维路径规划】基于人工鱼群算法求解无人机三维航迹规划附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电子书和数学建模资料


相关文章
|
28天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
2月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
123 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
2月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
95 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
2月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
71 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
5月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
5月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
5月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
5月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
5月前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
下一篇
无影云桌面