声明:对于作者的原创代码,禁止转售倒卖,违者必究!
本期代码,利用强大的python库——mealpy,实现无人机3维路径规划设计。可以非常方便的对比170种优化算法,让你的论文不再乏力!
mealpy库包含了170多个智能优化算法,其中包含一些原始算法和改进的算法。关于mealpy库的详细介绍,链接在这里:https://mealpy.readthedocs.io/en/latest/
本期代码实现功能:
①3维无人机模型地图随意更改,可以随意增加障碍物,随意更改起始点位置;
②mealpy库中的170种算法都可以用到这个路径规划模型中;
③绘制了不同算法之间最佳短路径迭代曲线对比图
④绘制了3d模型下,无人机飞行轨迹对比图
学会本期代码后,参考一些论文,还可以将改进的智能算法用于机器人路径规划中,突出改进智能算法的优势!
第一组实验:
采用北方苍鹰(NGO)、灰狼算法(GWO)、蜜獾算法(HBA)进行对比,收敛曲线如下,在经过两千次迭代后,灰狼算法寻得路径最短。
自动打印出结果:
三维路径规划示意图:
这么乍一看是不是以为这些路径线都穿过障碍物了,哈哈,其实不然,看下面这个动画,就能清楚的看到,每一个无人机路径都完美避开了障碍物!
第二组实验:
由于mealpy库切换算法非常简单,可以说你几秒钟就可以切换几个新算法!这么多的算法,随意切换!
# 为了方便算法调用,我把部分算法名字写在这里了 ,想要知道每个算法详情,请 参考 https://mealpy.readthedocs.io/en/latest/# (BBO, BBOA, BMO, EOA, IWO, SBO, SMA, SOA, SOS, TPO, TSA, VCS, WHO)(CRO, DE, EP, ES, FPA, GA, MA)(BRO, BSO, CA, CHIO, FBIO, GSKA, HBO, HCO, ICA, LCO, QSA, SARO, SPBO, SSDO, TLO, TOA, WarSO)# (AOA, CEM, CGO, CircleSA, GBO, HC, INFO, PSS, RUN, SCA, SHIO)(ArchOA, ASO, CDO, EFO, EO, EVO, FLA, HGSO, MVO, NRO, RIME, SA, TWO, WDO)# (ABC, ACOR, AGTO, ALO, AO, ARO, AVOA, BA, BeesA, BES, BFO, BSA, COA, CoatiOA, CSA, CSO, DMOA, DO, EHO, ESOA, # FA, FFA, FFO, FOA, FOX, GJO, GOA, GTO, GWO, HBA, HGS, HHO, JA, MFO, MGO, MPA, MRFO, MSA, NGO, NMRA, OOA, PFA,# POA, PSO, SCSO, SeaHO, ServalOA, SFO, SHO, SLO, SRSR, SSA, SSO, SSpiderA, SSpiderO, STO, TDO, TSO, WaOA, WOA, ZOA)# AEO, GCO, WCA,HS
咱们再挑选三个对比一下吧!采用霜冰优化算法(RIME)、粒子群优化(PSO)、生物地理学优化算法(BBO)进行对比,收敛曲线如下,在经过两千次迭代后,霜冰算法寻得路径最短。
部分代码展示
from matplotlib.colors import LightSourceimport numpy as npimport randomimport mathfrom src.core.uav_setup import UAV_SetUpimport matplotlib.pyplot as pltfrom src.core.obj_fun import ObjFunfrom mealpy import GWO,HBA,BMO,NGO,IWO,TPO'''mealpy 这个包一定要装 2.5.3版本的哦!!! ''''''想要改地图,改起始点位置,在""uav_setup.py" 中修改'''# 为了方便算法调用,我把部分算法名字写在这里了 ,想要知道每个算法详情,请 参考 https://mealpy.readthedocs.io/en/latest/# (BBO, BBOA, BMO, EOA, IWO, SBO, SMA, SOA, SOS, TPO, TSA, VCS, WHO)(CRO, DE, EP, ES, FPA, GA, MA)(BRO, BSO, CA, CHIO, FBIO, GSKA, HBO, HCO, ICA, LCO, QSA, SARO, SPBO, SSDO, TLO, TOA, WarSO)# (AOA, CEM, CGO, CircleSA, GBO, HC, INFO, PSS, RUN, SCA, SHIO)(ArchOA, ASO, CDO, EFO, EO, EVO, FLA, HGSO, MVO, NRO, RIME, SA, TWO, WDO)# (ABC, ACOR, AGTO, ALO, AO, ARO, AVOA, BA, BeesA, BES, BFO, BSA, COA, CoatiOA, CSA, CSO, DMOA, DO, EHO, ESOA, # FA, FFA, FFO, FOA, FOX, GJO, GOA, GTO, GWO, HBA, HGS, HHO, JA, MFO, MGO, MPA, MRFO, MSA, NGO, NMRA, OOA, PFA,# POA, PSO, SCSO, SeaHO, ServalOA, SFO, SHO, SLO, SRSR, SSA, SSO, SSpiderA, SSpiderO, STO, TDO, TSO, WaOA, WOA, ZOA)# AEO, GCO, WCA,HS# ... 其他导入保持不变 ...def set_seed(seed=None): if seed is None: seed = random.randint(0, 100000) np.random.seed(seed) random.seed(seed) return seeddef configure_3d_axis(ax): '''配置三维坐标轴参数''' ax.grid(True, linestyle=':', alpha=0.6, color='slategray') ax.xaxis.pane.set_facecolor('white') ax.yaxis.pane.set_facecolor('whitesmoke') ax.zaxis.pane.set_facecolor('ghostwhite') ax.set_xlabel('X (m)', fontsize=12, labelpad=12) ax.set_ylabel('Y (m)', fontsize=12, labelpad=12) ax.set_zlabel('Altitude (m)', fontsize=12, labelpad=12)def draw_obstacles_3d(ax, obstacles): """增强型三维障碍物绘制""" ls = LightSource(azdeg=100, altdeg=45) for x, y, h, r in obstacles: # 柱体表面 theta = np.linspace(0, 2 * np.pi, 80) z = np.linspace(0, h, 30) theta, z = np.meshgrid(theta, z) x_cyl = x + r * np.cos(theta) y_cyl = y + r * np.sin(theta) # 添加材质效果 shaded = ls.shade(z, cmap=plt.cm.Greys_r, vert_exag=0.2) ax.plot_surface(x_cyl, y_cyl, z, facecolors=shaded, alpha=0.6, edgecolor='dimgray', linewidth=0.2) # 顶部平台 theta = np.linspace(0, 2 * np.pi, 100) x_top = x + r * np.cos(theta) y_top = y + r * np.sin(theta) ax.plot_trisurf(x_top, y_top, np.full_like(x_top, h), color='gray', alpha=0.6, edgecolor='k')
本期代码获取
点击下方阅读原文获取,或者复制链接跳转!
获取链接:https://mbd.pub/o/bread/aJaUmJxw
获取更多代码: