PSO(PSO——Particle Swarm Optimization)(基于种群的随机优化技术算法)
粒子群算法模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断改变其搜索模式。
概述请见:http://www.omegaxyz.com/2017/05/04/introductionofpso/
Python代码请见:http://www.omegaxyz.com/2018/01/12/python_pso/
MATLAB代码:
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 |
%------初始格式化-------------------------------------------------- clear all; clc; format long; %------给定初始化条件---------------------------------------------- c1=2; %学习因子1 c2=2; %学习因子2 w=0.7298; %惯性权重 MaxDT=200; %最大迭代次数 % D=2; %搜索空间维数(未知数个数) N=20; %初始化群体个体数目 %eps=10^(-6); %设置精度(在已知最小值时候用) Vmax=1; Vmin=-1; popmax=5; popmin=-5; %------初始化种群的个体(可以在这里限定位置和速度的范围)------------ for i=1:N pop(i,:)=popmin+(popmax-popmin)*rand(1,2); %随机初始化位置 V(i,:)=rand(1,2); %随机初始化速度 fitness(i)=ackley(pop(i,:)); end %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- [fitnessgbest bestindex]=min(fitness); gbest=pop(bestindex,:); pbest=pop; fitnesspbest=fitness; for i=1:MaxDT for j=1:N V(j,:)=w*V(j,:)+c1*rand*(pbest(j,:)-pop(j,:))+c2*rand*(gbest-pop(j,:)); V(j,find(V(j,:)>Vmax))=Vmax; V(j,find(V(j,:)<Vmin))=Vmin; pop(j,:)=pop(j,:)+V(j,:); pop(j,find(pop(j,:)>popmax))=popmax; pop(j,find(pop(j,:)<popmin))=popmin; % if rand>0.8 % k=ceil(2*rand); % pop(j,k)=rand; % end fitness(j)=ackley(pop(j,:)); if fitness(j)<fitnesspbest(j) pbest(j,:)=pop(j,:); fitnesspbest(j)=fitness(j); end if fitness(j)<fitnessgbest gbest=pop(j,:); fitnessgbest=fitness(j); end end yy(i)=fitnessgbest; end %------最后给出计算结果 plot(yy) title(['适应度曲线 ' '终止次数=' num2str(MaxDT)]); xlabel('进化代数'); ylabel('适应度') %------算法结束---DreamSun GL & HF----------------------------------- |
优化的函数为ackley函数:
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 |
% ackley.m % Ackley's function, from http://www.cs.vu.nl/~gusz/ecbook/slides/16 % and further shown at: % http://clerc.maurice.free.fr/pso/Semi-continuous_challenge/Semi-continuous_challenge.htm % % commonly used to test optimization/global minimization problems % % f(x)= [ 20 + e ... % -20*exp(-0.2*sqrt((1/n)*sum(x.^2,2))) ... % -exp((1/n)*sum(cos(2*pi*x),2))]; % % dimension n = # of columns of input, x1, x2, ..., xn % each row is processed independently, % you can feed in matrices of timeXdim no prob % % example: cost = ackley([1,2,3;4,5,6]) function [out]=ackley(in) % dimension is # of columns of input, x1, x2, ..., xn n=length(in(1,:)); x=in; e=exp(1); out = (20 + e ... -20*exp(-0.2*sqrt((1/n).*sum(x.^2,2))) ... -exp((1/n).*sum(cos(2*pi*x),2))); return |
函数图像:
其它代码:
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 |
clear; clc; format long; %------给定初始化条件---------------------------------------------- c1=2; %学习因子1 c2=2; %学习因子2 w=0.7; %惯性权重 MaxDT=100; %最大迭代次数 D=1; %搜索空间维数(未知数个数) M=30; %初始化群体个体数目 eps=10^(-6); %设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)------------ x=randn(M,D); %随机初始化位置 v=randn(M,D); %随机初始化速度 %------先计算各个粒子的适应度,并初始化p(i)和gbest-------------------- for i=1:M p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end gbest=x(1,:); %gbest为全局最优 for i=2:M if(fitness(x(i,:),D)<fitness(gbest,D)) gbest=x(i,:); end end %------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:MaxDT for i=1:M v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(gbest-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:),D)<p(i) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end if p(i)<fitness(gbest,D) gbest=y(i,:); end end end %------显示计算结果 disp('*************************************************************') disp('函数的全局最优位置为:') Solution=gbest' disp('最后得到的优化极值为:') Result=fitness(gbest,D) disp('*************************************************************') |
请问博主有矢量匹配法的程序包吗?
可以发一下完整版的数据吗
github上有
有其他拓扑结构的代码吗
Nice, thanks~~~
请问博主可以发一下Parkinson数据集吗?1269482535@qq.com,谢谢。
数据集在这里可以找到 https://github.com/xyjigsaw/Dataset
好奇是什么数据集
请问博主可以发一下Parkinson数据集吗?616837919@qq.com,谢谢。
已发送