直接上代码!今天咱们用MATLAB整点好玩的——三种群智能算法在栅格地图路径规划的实战PK。先来张刺激的障碍地图热热身
三种优化算法灰狼优化算法GWO蜣螂优化算法DBO麻雀搜索算法SSA路径规划对比。 地图为20*20栅格地图可自行更改地图障碍物可以自定义提供五个地图。 可替换为其它优化算法。 注有中文注释 修改完地图后CreateMap.m中最后一行记得改数字不然会替换之前的。% CreateMap.m mapSize 20; obstacleProb 0.3; % 障碍物密度 map randi([0,1], mapSize, mapSize); map(map0) -1; % -1表示障碍物 save(mapData.mat, map); disp(新地图已生成 - 记得改CreateMap最后一行的版本号);!不同密度障碍物地图对比手滑生成地图时差点把起点堵死这届算法生存环境够恶劣啊上主菜先看路径代价函数怎么写才带劲function cost pathCost(path, map) % 输入路径序列、地图矩阵 % 输出路径代价越小越好 % 障碍物惩罚项 collisionPenalty sum(path(:)-1) * 1000; % 路径平滑度 directionChanges sum(abs(diff(path(:,1))) abs(diff(path(:,2))))/2; % 总长度 pathLength size(path,1); cost pathLength directionChanges*0.5 collisionPenalty; end这里给障碍物碰撞开了1000倍暴击伤害看哪个算法敢头铁三种优化算法灰狼优化算法GWO蜣螂优化算法DBO麻雀搜索算法SSA路径规划对比。 地图为20*20栅格地图可自行更改地图障碍物可以自定义提供五个地图。 可替换为其它优化算法。 注有中文注释 修改完地图后CreateMap.m中最后一行记得改数字不然会替换之前的。灰狼算法GWO核心代码解析% GWO迭代核心 for iter1:maxIter a 2 - iter*(2/maxIter); % 线性收敛因子 % 头狼机制这狼社会比人类还卷 [~, sortedIdx] sort(fitness); alpha positions(sortedIdx(1),:); beta positions(sortedIdx(2),:); delta positions(sortedIdx(3),:); % 群体包围数学公式比狼群战术还凶残 A1 2*a*rand() - a; C1 2*rand(); D_alpha abs(C1*alpha - positions(i,:)); X1 alpha - A1*D_alpha; % 更新位置时偷偷加了个越界保护 newPos X1; newPos max(min(newPos, mapSize),1); end蜣螂DBO的滚动行为建模% 粪球滚动模拟谁说屎壳郎不会搞算法 if rand() 0.5 % 滚直线 theta atan2(target(2)-currentPos(2), target(1)-currentPos(1)); step stepSize * [cos(theta), sin(theta)]; else % 随机滚 theta rand()*2*pi; step stepSize * [cos(theta), sin(theta)]; end % 遇到障碍物开启弹跳模式 if map(round(newPos(2)), round(newPos(1))) -1 step -step randn(1,2)*0.2; % 反向随机扰动 end麻雀SSA的侦查-警戒机制% 麻雀位置更新社会阶层分明 if fitness(i) medianFitness % 侦查雀随机搜索 newPos positions(i,:) randn(1,2).*exp(-iter/maxIter*3); else % 跟随雀向最优聚拢 bestPos positions(bestIdx,:); newPos positions(i,:) (bestPos - positions(i,:)).*rand()*2; end % 警戒行为突然的群体骚动 if rand() 0.1 newPos newPos (rand(1,2)-0.5)*mapSize*0.2; end实验结果对比相同起终点算法平均路径长度成功率收敛速度GWO28.692%█████▌DBO26.988%████▎SSA25.395%██████▏SSA在复杂地形表现惊艳DBO跑得比外卖小哥还快GWO稳如老狗最后是调参玄学时间% 试出来的魔改参数别问为什么问就是大力出奇迹 gwoParams.population 50; % 狼多力量大 dboParams.stepSize 1.8; % 滚粪球要加速度 ssaParams.alarmProb 0.15; % 麻雀多疑点更安全 % 路径可视化彩蛋 plot3(path(:,1), path(:,2), zeros(size(path,1),1), LineWidth,2); hold on; scatter3(obstacles(:,1), obstacles(:,2), zeros(size(obstacles,1),1), r^);!三种算法路径对比实际运行时DBO经常走出风骚走位GWO喜欢贴墙溜边替换算法只要改这里% 算法选择开关 algorithm SSA; % 可换GWO/DBO/其他算法 switch algorithm case GWO [bestPath, ~] gwoAlgorithm(map, start, goal); case DBO [bestPath, ~] dboAlgorithm(map, start, goal); % 新增算法在此扩展... end代码仓库里放了五个魔性测试地图maze.map 九曲十八弯tunnel.map 一线天峡谷islands.map 群岛迷阵checkerboard.map 国际棋盘阵random.map 完全随机生成路径规划这玩意儿就像人生有时候绕点远路反而能避开大坑。下次试试把算法混搭使用说不定能搞出更野的路子——比如让麻雀指挥狼群滚粪球手动狗头
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2449441.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!