文档库 最新最全的文档下载
当前位置:文档库 › 最基本pso

最基本pso

最基本pso
最基本pso

function y = fun(x)

y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.7128 9;

%下面是主程序

%% 清空环境

clc

clear

%% 参数初始化

%粒子群算法中的两个参数

c1 = 1.49445;

c2 = 1.49445;

maxgen=200; % 进化次数

sizepop=20; %种群规模

Vmax=1;%速度限制

Vmin=-1;

popmax=5;%种群限制

popmin=-5;

%% 产生初始粒子和速度

for i=1:sizepop

%随机产生一个种群

pop(i,:)=5*rands(1,2); %初始种群

V(i,:)=rands(1,2); %初始化速度

%计算适应度

fitness(i)=fun(pop(i,:)); %染色体的适应度

end

%找最好的染色体

[bestfitness bestindex]=min(fitness);

zbest=pop(bestindex,:); %全局最佳

gbest=pop; %个体最佳

fitnessgbest=fitness; %个体最佳适应度值

fitnesszbest=bestfitness; %全局最佳适应度值

%% 迭代寻优

for i=1:maxgen

for j=1:sizepop

%速度更新

V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));

V(j,find(V(j,:)>Vmax))=Vmax;

V(j,find(V(j,:)

%种群更新

pop(j,:)=pop(j,:)+0.5*V(j,:);

pop(j,find(pop(j,:)>popmax))=popmax;

pop(j,find(pop(j,:)

%自适应变异(避免粒子群算法陷入局部最优)

if rand>0.8

k=ceil(2*rand);%ceil朝正无穷大方向取整

pop(j,k)=rand;

end

%适应度值

fitness(j)=fun(pop(j,:));

%个体最优更新

if fitness(j) < fitnessgbest(j)

gbest(j,:) = pop(j,:);

fitnessgbest(j) = fitness(j);

end

%群体最优更新

if fitness(j) < fitnesszbest

zbest = pop(j,:);

fitnesszbest = fitness(j);

end

end

yy(i)=fitnesszbest;

end

%% 结果分析

plot(yy)

title(['适应度曲线' '终止代数=' num2str(maxgen)]); xlabel('进化代数');ylabel('适应度');

PSO参数优化

1.利用PSO参数寻优函数(分类问题):psoSVMcgForClass 2.[bestCVaccuracy,bestc,bestg,pso_option]= 3.psoSVMcgForClass(train_label,train,pso_option) 4.输入: 5.train_label:训练集的标签,格式要求与svmtrain相同。 6.train:训练集,格式要求与svmtrain相同。 7.pso_option:PSO中的一些参数设置,可不输入,有默认值,详细请看代码的帮 助说明。 8.输出: 9.bestCVaccuracy:最终CV意义下的最佳分类准确率。 10.bestc:最佳的参数c。 11.bestg:最佳的参数g。 12.pso_option:记录PSO中的一些参数。 13.========================================================== 14.利用PSO参数寻优函数(回归问题):psoSVMcgForRegress 15.[bestCVmse,bestc,bestg,pso_option]= 16.psoSVMcgForRegress(train_label,train,pso_option) 17.其输入输出与psoSVMcgForClass类似,这里不再赘述。 复制代码 psoSVMcgForClass源代码: 1.function [bestCVaccuarcy,bestc,bestg,pso_option] = psoSVMcgForClass(train_label,train,pso_option) 2.% psoSVMcgForClass 3. 4.%% 5.% by faruto 6.%Email:patrick.lee@https://www.wendangku.net/doc/19816021.html, QQ:516667408 https://www.wendangku.net/doc/19816021.html,/faruto BNU 7.%last modified 2010.01.17 8. 9.%% 若转载请注明: 10.% faruto and liyang , LIBSVM-farutoUltimateVersion 11.% a toolbox with implements for support vector machines based on libsvm, 2009. 12.% 13.% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for 14.% support vector machines, 2001. Software available at 15.% https://www.wendangku.net/doc/19816021.html,.tw/~cjlin/libsvm 16.%% 参数初始化 17.if nargin == 2 18. pso_option = struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ... 19. 'k',0.6,'wV',1,'wP',1,'v',5, ...

标准粒子群算法(PSO)及其Matlab程序和常见改进算法

一、粒子群算法概述 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。 PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个”极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 二、算法原理 粒子群算法采用常数学习因子,及惯性权重,粒子根据如下的公式更新自己的速度和位置。 V ki=ωk V i?1i+c1r1(Q bi?Q k?1i)+c2r2(Q bg?Q k?1i)Q ki=Q k?1i+V ki 三、算法步骤 1、随机初始化种群中各微粒的位置和速度; 2、评价个粒子的适应度,将各粒子的位置和适应度储存在各微粒的pbest(Q bi)中,将所有pbest中适应度最优的个体的位置和适应度存储在gbest(Q bg)中。 3、更新粒子的速度和位移。 V ki=ωk V i?1i+c1r1(Q bi?Q k?1i)+c2r2(Q bg?Q k?1i)Q ki=Q k?1i+V ki 4、对每个微粒,与其前一个最优位置比较,如果较好,则将其作为当前的最优位置。 5、比较当前所有的pbest和上一迭代周期的gbest,更新gbest。 6、若满足停止条件(达到要求精度或迭代次数),搜索停止,输出结果,否则,返回2。

利用PSO优化SVM

%% 清空环境 clc clear load wine; train = [wine(1:30,:);wine(60:95,:);wine(131:153,:)]; train_label = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)]; test = [wine(31:59,:);wine(96:130,:);wine(154:178,:)]; test_label = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)]; [train,pstrain] = mapminmax(train'); pstrain.ymin = 0; pstrain.ymax = 1; [train,pstrain] = mapminmax(train,pstrain); [test,pstest] = mapminmax(test'); pstest.ymin = 0; pstest.ymax = 1; [test,pstest] = mapminmax(test,pstest); train = train'; test = test'; %% 参数初始化 %粒子群算法中的两个参数 c1 = 1.6; % c1 belongs to [0,2] c2 = 1.5; % c2 belongs to [0,2] maxgen=300; % 进化次数 sizepop=30; % 种群规模 popcmax=10^(2); popcmin=10^(-1); popgmax=10^(3); popgmin=10^(-2); k = 0.6; % k belongs to [0.1,1.0]; Vcmax = k*popcmax; Vcmin = -Vcmax ; Vgmax = k*popgmax; Vgmin = -Vgmax ;

基本pso优化神经网络程序

clc clear all %一、初始化部分 %1.1 预处理样本数据 % 选取训练样本(x,y) for i=1:126 x=0+0.0251*(i-1); y(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; % 待逼近函数 end AllSamIn=0:0.0251:pi; %训练样本输入 AllSamOut=y; %训练样本输出 %选取测试样本 for i=1:125 x=0.0125+0.0251*(i-1); %测试样本输入 ytest(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; %测试样本输出 end AlltestIn=0.0125:0.0251:(pi-0.0125); AlltestOut=ytest; %归一化训练样本,测试样本 [AlltestInn,minAlltestIn,maxAlltestIn,AlltestOutn,minAlltestOut,maxAlltestOut]= premnmx(AlltestIn,AlltestOut); %测试样本 [AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut]= premnmx(AllSamIn,AllSamOut); %训练样本 testIn=AlltestInn; testOut=AlltestOutn; global Ptrain; Ptrain = AllSamInn; global Ttrain; Ttrain = AllSamOutn; %1.2 设置神经网络参数 global indim; %输入层神经元个数 indim=1; global hiddennum; %隐藏层神经元个数 hiddennum=3; global outdim; %输出层神经元个数 outdim=1; global Gpos; %1.3 设置微粒群参数 vmax=0.5; % 速度上限 minerr=1e-7; % 目标误差 wmax=0.95;

Matlab PSO优化RBF的程序

Matlab PSO优化RBF的程序。 找了很久,凡是能找到的都找到了。网上就没有对的。自己写的一直有问题。我有个不完整的。大家看看能不能补全: AllSamIn=[]; AllSamOut=[]; %前向通道数据预设 global minAllSamOut; global maxAllSamOut; % 从总样本中抽取10%的样本作为测试样本,其余作为训练样本 [AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut] = premnmx(AllSamIn,AllSamOut); TesSamIn=[]; TestSamOut=[]; TargetOfTestSam=[]; %测试样本目标 TrainSamIn=AllSamInn; TrainSamOut=AllSamOutn; %样本评估: EvaSamIn=[]; %样本评估输入 EvaSamInn=tramnmx(EvaSamIn,minAllSamIn,maxAllSamIn); %归一化处理 global Ptrain; Ptrain= TrainSamIn; global Ttrain; Ttrain=TrainSamOut; Ptest = TestSamIn; Ttest = TestSamOut; spread=1.2; vmax=0.5; %最大速率

minerr=0.001; %适应度阈值 wmax=0.90; %惯性权重的最大值 wmin=0.30; %惯性权重的最小值 global itmax; itmax=300; %允许的最大迭代步数 c1=2; %学习因子 c2=2; %学习因子 for iter= 1:itmax W(iter)=wmax-((wmax-wmin)/itmax)*iter; %惯性权重下降 end %粒子在a,b之间随机初始化: a=-1; b=1; m=-1; n=1; global N; %粒子种群数目 N=40; global D; %粒子群长度 D=(indim+1)*hiddennum+(hiddennum+1)*outdim; %粒子群位置初始化: rand('state',sum(100*clock)); %产生0-1之间的随机数,粒子在a,b(-1,1)之间初始化 X=a+(b-a)*rand(N,D,1); %产生N行D列由0-1之间的矩阵 V=m+(n-m)*rand(N,D,1); %粒子群速度在m,n即-1和1之间初始化 %粒子群优化RBF神经网络的适应度值 global fvrec;

pso优化算法matlab程序

%------初始格式化------------------------------------------------- clear all; clc; format long; %------给定初始化条件--------------------------------------------- c1=1.4962; %学习因子1 c2=1.4962; %学习因子2 w=0.7298; %惯性权重 MaxDT=1000; %最大迭代次数 D=10; %搜索空间维数(未知数个数) N=40; %初始化群体个体数目 eps=10^(-6); %设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)----------- for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi 和Pg--------------------- for i=1:N p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end pg=x(1,:); for i=2:N if fitness(x(i,:),D) pg=x(i,:); end end %------进入主要循环,按照公式依次迭代,直到满足精度要求----------- for t=1:MaxDT for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:),D) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); %Pg 为全局最优 end if p(i) pg=y(i,:); end end Pbest(t)=fitness(pg,D); end %------最后给出计算结果disp('*************************************************************') disp('函数的全局最优位置为:')

粒子群优化算法参数设置

一.粒子群优化算法综述 1.6粒子群优化算法的参数设置 1.6.1粒子群优化算法的参数设置—种群规模N 种群规模N影响着算法的搜索能力和计算量: PSO对种群规模要求不高,一般取20-40就可以达到很好的求解效果,不过对于比较难的问题或者特定类别的问题,粒子数可以取到100或200。 1.6.2粒子的长度D 粒子的长度D由优化问题本身决定,就是问题解的长度。 粒子的范围R由优化问题本身决定,每一维可以设定不同的范围。 1.6.3最大速度Vmax决定粒子每一次的最大移动距离,制约着算法的探索和开发能力 Vmax的每一维一般可以取相应维搜索空间的10%-20%,甚至100% ,也有研究使用将Vmax按照进化代数从大到小递减的设置方案。 1.6.4惯性权重控制着前一速度对当前速度的影响,用于平衡算法的探索和开发能力 一般设置为从0.9线性递减到0.4,也有非线性递减的设置方案; 可以采用模糊控制的方式设定,或者在[0.5, 1.0]之间随机取值; 设为0.729的同时将c1和c2设1.49445,有利于算法的收敛。 1.6.5压缩因子限制粒子的飞行速度的,保证算法的有效收敛 Clerc0.729,同时c1和c2设为2.05 。 1.6.6加速系数c1和c2 加速系数c1和c2代表了粒子向自身极值pBest和全局极值gBest推进的加速权值。 c1和c2通常都等于2.0,代表着对两个引导方向的同等重视,也存在一些c1和c2不相等的设置,但其范围一般都在0和4之间。研究对c1和c2的自适应调整方案对算法性能的增强有重要意义。 1.6.7终止条件 终止条件决定算法运行的结束,由具体的应用和问题本身确定。将最大循环数设定为500,1000,5000,或者最大的函数评估次数,等等。也可以使用算法

粒子群优化算法(ParticleSwarmOptimizationPSO)是一种相对较新的

粒子群优化算法(Particle Swarm Optimization PSO )是一种相对较新的进化优化算法,它由Eberhart 博士和Kennedy 博士在1995年首次提出。粒子群优化算法源于对鸟类捕食行为的模拟,与遗传算法(GA )相比,它没有选择、交叉、变异等遗传操作,算法参数少,因此算法实现简单。目前,在一些学者的努力下,粒子群优化算法己经广泛应用于函数优化,并在系统辨识、神经网络训练等问题中取得了可喜的进展。自1998年以来,粒子群优化算法逐渐成为进化计算的领域内在遗传算法之后的又一个研究热点。 算法模拟鸟群飞行觅食的行为,通过鸟之间的集体协作使群体达到最优,与遗传算法类似,它也是基于群体迭代,但没有交叉和变异算子,是一种利用群体在解空间中找寻最优粒子进行搜索的计算智能方法。首先,PSO 中每个优化问题的解都是搜索空间中的一个粒子,所有的粒子都有一个由被优化的函数决定的适应值(fitness value ),每个粒子还有一个速度决定他们运动的方向和距离;然后粒子们就追随当前的最优粒子在解的空间中搜索。PSO 初始化为一群随机粒子(随机解);最后通过迭代找到最优解。该方法能快速地产生很好的效果,这样就可以使整个系统的效率有所提高。PSO 的优点在于收敛速度快、设置参数少,简单易实现,算法本身具有深刻的智能背景,既适合科学研究,又特别适合工程应用。 PSO 算法求解优化问题时,所求问题的解就是搜索空间中的每一只鸟的位置,称这些鸟为基本粒子。所有的粒子都由一个被优化的函数决定的适应值(候选解)和一个决定他们飞翔方向和距离的速度。在优化过程中,每个粒子记忆,追随当前的最优粒子,在解空间中进行搜索。PSO 算法初始化为一群随机粒子(随机候选解),然后通过迭代找到最优的解。在每一次迭代的过程中,粒子通过追逐两个极值来更新自己的位置。一个是粒子自身找到的当前最优解称为个体极值pbest ,另一个是整个群体当前找到的最优解,这个解称为全局极值gbest 。图2介绍了PSO 算法的具体流程[14,15]。 在PSO 算法中,每一个可能的解都会表示成一个粒子。每一个粒子都有一个位置坐标x 和一个速率坐标v ,位置坐标和速率坐标分别有以下表达式表示: ,1,2,(,, ,)i i i i N x x x x = (11) ,1,2,(,,,)i i i i N v v v v = (12)

相关文档