【优化算法】三维粒子群算法【含Matlab源码 902期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【优化算法】三维粒子群算法【含Matlab源码 902期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、粒子群算法简介
1 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
2 粒子群算法分析
2.1基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
公式(2)和 公式(3)被视为标准PSO算法。
3 PSO算法的流程和伪代码
三、部分源代码
SR=1000;%搜索范围Searching range
RNS=1;%群体规模与搜索范围之比The ratio of the number of particles to the searching range
M=RNS*SR;%群体规模Members
W=0.5;%惯性权重Inertia weight
C1=5;%加速常数Accelerated constant
C2=5;%加速常数Accelerated constant
RVR=0.02;%最大速度与搜索范围之比The ratio of the maximum velocity to the searching range
RCS=0.01;%收敛区间与搜索范围之比The ratio of the convergent interval to the searching range
CI=RCS*SR;%收敛区间Convergent interval
PT=0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001;%暂停时间Pause time
RNPA=0.5;%正负半轴标度之比The ratio of the negative half axis to the positive half axis
x=SR*rand(1,M);
y=SR*rand(1,M);
z=SR*rand(1,M);
px=x;
py=y;
pz=z;%初始化个体历史最优解数据
vx=RVR*SR*rand(1,M);
vxmax=RVR*SR*(zeros(1,M)+1);
vy=RVR*SR*rand(1,M);
vymax=RVR*SR*(zeros(1,M)+1);
vz=RVR*SR*rand(1,M);
vzmax=RVR*SR*(zeros(1,M)+1);
ox=SR*rand*(zeros(1,M)+1);
oy=SR*rand*(zeros(1,M)+1);
oz=SR*rand*(zeros(1,M)+1);%随机生成谷地位置 以上为初始化过程
sx=abs(x-ox);
sy=abs(x-oy);
sz=abs(x-oz);%评估每个微粒的适应度
[r,c]=find(sx==min(min(sx)));
gx=x(r,c)*(zeros(1,M)+1);
[r,c]=find(sy==min(min(sy)));
gy=y(r,c)*(zeros(1,M)+1);
[r,c]=find(sz==min(min(sz)));
gz=z(r,c)*(zeros(1,M)+1);
while (max(max(sx))>CI)||(max(max(sy))>CI)||(max(max(sz))>CI)%确定结果收敛区间
ox=0.1*SR*rand*(zeros(1,M)+1);
oy=0.1*SR*rand*(zeros(1,M)+1);
oz=0.1*SR*rand*(zeros(1,M)+1);
plot3(ox,oy,oz,'r*');
title('三维粒子群算法收敛演示');
text(ox,oy,oz,'随机目标点');
xlabel('X'),
ylabel('Y'),
zlabel('Z');
axis([-RNPA*SR SR -RNPA*SR SR -RNPA*SR SR]);
grid on;
hold on;
plot3(x,y,z,'b*');
hold off;
pause(PT);
if max(max(sx))>CI
vx=W*vx+C1*rand*(px-x)+C2*rand*(gx-x);%根据算法方程给v一个改变量。因为区间长度较小,所以弱化微粒的自身惯性和自我认知能力,强化社会能力以尽快得到最优解
while max(max(vx))>RVR*SR||min(min(vx))<-RVR*SR
if max(max(vx))>RVR*SR
[r,c]=find(vx==max(max(vx)));
vx(r,c)=RVR*SR;
end
if min(min(vx))<-RVR*SR
[r,c]=find(vx==min(min(vx)));
vx(r,c)=-RVR*SR;
end%以上为限制v的大小,避免微粒飞过好解或陷入局部优值
end
x=x+vx;
for i=1:M
if abs(x(1,i)-ox(1,i))<sx(1,i)
px(1,i)=x(1,i);
end
end
sx=abs(x-ox);
[r,c]=find(sx==min(min(sx)));
gx=x(r,c)*(zeros(1,M)+1);
end
if max(max(sy))>CI
vy=W*vy+C1*rand*(py-y)+C2*rand*(gy-y);
while max(max(vy))>RVR*SR||min(min(vy))<-RVR*SR
if max(max(vy))>RVR*SR
[r,c]=find(vy==max(max(vy)));
vy(r,c)=RVR*SR;
end
if min(min(vy))<-RVR*SR
[r,c]=find(vy==min(min(vy)));
vy(r,c)=-RVR*SR;
end%以上为限制v的大小,避免微粒飞过好解或陷入局部优值
end
y=y+vy;
for i=1:M
if abs(y(1,i)-oy(1,i))<sy(1,i)
py(1,i)=y(1,i);
end
end
sy=abs(y-oy);
[r,c]=find(sy==min(min(sy)));
gy=y(r,c)*(zeros(1,M)+1);
end
if max(max(sz))>CI
vz=W*vz+C1*rand*(pz-z)+C2*rand*(gz-z);
while max(max(vz))>RVR*SR||min(min(vz))<-RVR*SR
if max(max(vz))>RVR*SR
[r,c]=find(vz==max(max(vz)));
vz(r,c)=RVR*SR;
end
if min(min(vz))<-RVR*SR
[r,c]=find(vz==min(min(vz)));
vz(r,c)=-RVR*SR;
end%以上为限制v的大小,避免微粒飞过好解或陷入局部优值
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/116993781
- 点赞
- 收藏
- 关注作者
评论(0)