💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
一、粒子群算法(PSO)简介
-
粒子群算法1995年由J.Kennedy和R.C.Eberhart提出,是一种智能计算的算法,具有高速、整洁、求解精度高的特点而被广为人知。
-
它是一种新型群智能优化算法,因其概念简单、参数较少、容易实现等优点,受到国内外众多研究人员的青睐,被广泛应用在函数优化、自动控制、机器学习、工程设计等领域,但仍在发展中,理论基础以及改进方法和应用领域还需要进一步的研究和拓展。
二、路径规划问题
-
问题描述
-
路径规划是移动机器人导航最基本环节之一。给定环境信息,若环境内有障碍物,需寻求起始点到目标点的最短路径,并且路径不能与障碍物相交[2]()。
-
传统的路径规划算法如势场法、可视图法、遗传算法等,自身存在一定缺陷,会使路径搜索出现计算量过大、效率不高、寻优能力差等问题,无法保证路径规划的计算效率和可靠性要求。
-
-
PSO用于路径规划的优势
-
粒子群优化算法(Particle Swarm Optimization,简称PSO)是一种进化计算技术,同遗传算法类似,是一种基于迭代的优化工具,通过迭代搜寻最优值。与遗传算法相比,PSO的优势在于简单、容易实现并且许多参数不需要调整。
-
三、基于PSO的路径规划基本原理
-
一种解决思路是首先采用神经网络训练碰撞罚函数,得到无碰撞路径,然后采用粒子群优化算法解决路径的最优问题[1]()。
-
在PSO求解路径规划时:
-
-
算法涉及编码、适应度函数、碰撞检测、速度和位置更新步骤等。
-
四、PSO在路径规划中的应用示例
-
例如在机器人路径规划中,将路径视为粒子,利用群体智能寻找最短且无障碍的路径[2]()。
-
每个优化问题的解都是搜索空间中的一只“鸟”(粒子),所有粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定它们飞翔的方向和距离,然后粒子们追随当前的最优粒子在解空间中搜索。
五、结论
-
粒子群算法在路径规划方面有着独特的优势和应用方式,但仍有发展空间,例如在理论基础、改进方法以及应用领域的进一步拓展等方面。
📚2 运行结果
部分代码:
clear all
clc
% for o=1:4
tic
% for u=1:50
%% 设置各参数值
startX=0;startY=0; %起开始坐标
endX=700;endY=700; %结束坐标
c1=2;
c2=2; %学习因子
w=0.7; %惯性权数
pop=20; %粒子数
N_gen=500;
popmax=700;
popmin=0; %位置范围,根据测试函数而定
Vmax=20;
Vmin=-20; %速度范围,根据测试函数而定
gridCount=30;
%% 生成山峰
threat=[304 400 0;404 320 0;440 500 0;279 310 0;560 220 0;172 527 0;....
194 220 0;272 522 0;350 200 0;....
650 400 0;740 250 0;540 375 0;510 600 0];
r=[45 50 55 10 70 65 55 25 50 30 40 40 35];
for i=1:length(r)
figure(1)
[x,y,z]=sphere;
mesh(threat(i,1)+r(i)*x,threat(i,2)+r(i)*y,abs(threat(i,3)+r(i)*z));
hold on
end
view([-30,-30,70])
%% 初始化粒子
for i=1:pop
for j=1:gridCount
X(i,j)=startX+j*(endX-startX)/(gridCount+1);
Y(i,j)=startY+rand()*(endY-startY);
path(i,2*j-1)=X(i,j);
path(i,2*j)=Y(i,j);
end
end
for i=1:pop
[distance,pathpoint,positionPoint]=verify(path(i,:),threat,....
r,startX,startY,endX,endY,gridCount);
fitness(i)=distance;
V(i,:)=5*rands(1,gridCount*2); %分布在速度范围内
end
[bestFitness,bestindex]=min(fitness);
bestpath=path(bestindex,:);
pbest=path;
T=std(fitness);
BestFitness=Inf;
globalFitness=Inf;
pathRecord=zeros(1,gridCount+1); bestRecord=zeros(1,gridCount+1);
position=zeros(gridCount+1,2);
%% 迭代取优
for i=1:N_gen
for j=1:pop
V(j,:)=w*V(j,:)+c1*rand*(pbest(j,:)-path(j,:))+c2*rand*(bestpath-path(j,:)); %根据公式更新速度
V(j,find(V(j,:)>Vmax))=Vmax; %限制速度大小
V(j,find(V(j,:)<Vmin))=Vmin;
path(j,:)=path(j,:)+V(j,:); %根据公式更新位置
path(j,find(path(j,:)>popmax))=popmax; %限制位置大小
path(j,find(path(j,:)<popmin))=popmin;
[distance,pathpoint,positionPoint]=verify(path(j,:),threat,....
r,startX,startY,endX,endY,gridCount);
fmin=distance;
if fmin<fitness(j)
fitness(j)=fmin; %更新个体最优适应度
pbest(j,:)=path(j,:); %更新个体最优值
end
if fmin<bestFitness
bestFitness=fmin; %更新全局最优适应度
bestpath=path(j,:); %更新全局最优值
pathRecord=pathpoint;
position=positionPoint;
end
end
Fmin(i)=bestFitness;
end
% end
% end
%% 画出实体图
record=[];
count=1;
i=gridCount+1;
while i>1
j=pathRecord(i);
record(count,1)=position(i,1); record(count,2)=position(i,2);
count=count+1;
plot([position(i,1),position(j,1)],[position(i,2),position(j,2)],'Linewidth',2)
axis([0,700,0,700]);
i=j;
end
record(count,1)=position(i,1); record(count,2)=position(i,2);
text(position(1,1)',position(1,2)','S');
text(position(gridCount+1,1)',position(gridCount+1,2)','T');
figure(2)
plot(Fmin);
% title(['最佳个体适应度变化趋势,最佳适应值=' num2str(BestFitness)])
title(['最后适应值 =' num2str(min(Fmin))]);
xlabel('迭代次数')
ylabel('适应度值')
%% 分析结果
% plot(yy);
% title(['适应度曲线 最优适应度值:' num2str(yy(500))]);
% xlabel('进化次数');
% ylabel('适应度');
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
[1]白晓兰,周文全,张振朋,袁铮.基于启发式粒子群算法的机器人平滑路径规划[J].组合机床与自动化加工技术,2022(08):44-47+52.DOI:10.13462/j.cnki.mmtamt.2022.08.011.
[2]屈文婷. 基于粒子群算法及RBF神经网络技术的粮食产量预测方法[D].河南师范大学,2016.
[3]吴高超. 基于粒子群算法的路径规划问题研究[D].燕山大学,2016.
🌈4 Matlab代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取