最优化算法 之 PSO算法
来源:互联网 发布:sql server创建视图 编辑:程序博客网 时间:2024/06/05 18:40
**
(一)PSO算法简要介绍
**
PSO算法是一种最优化算法。它预定义一组粒子,和计算粒子适应值(fitness value)的函数。然后进行如下步骤:
(1) 随机化这些粒子,并根据适应值函数算出所有粒子的适应值;
(2) 选出当前所有粒子适应值最优的粒子,保存为全局最优粒子gbest;保存当前所有粒子的适应值,为局部最优粒子lbest(,)(由于现在是第一次求粒子fitness value,故选择当前所有粒子的适应值为每个粒子的局部最优粒子);
(3) 将每个粒子按如下公式迭代更新,再次计算适应值。
(4) 根据适应值更新全局最优粒子和局部最优粒子,重复(3)步骤,直至迭代n次。
我们可以看到,这里一共需要定义:
c1 , c2 , 迭代次数n , 粒子个数m ,
除此之外,还需要定义最大迭代速度vmax,最小迭代速度vmin,粒子的最大值max, 最小值min,
(二)代码实现
feature_num = 5;w = 0.8; c1 = 0.2;c2 = 0.025;swarmsize = 50; //粒子数目maxiter = 100; //迭代数目vmax = ones(1,feature_num)*0.5; //最大速度vmin = ones(1,feature_num)*0.005; //最小速度max = ones(1,feature_num)*10; //最大值min = ones(1,feature_num)*0.1; //最小值%初始化粒子群range = ones(1,feature_num).*(max-min); swarm = rand(swarmsize,feature_num);%得到具有初始化位置的粒子群for i = 1:swarmsize swarm(i,:) = swarm(i,:).*range+min;end%初始化速度vstep = rand(swarmsize,feature_num);for i = 1:swarmsize vstep(i,:) = vstep(i,:).*(vmax-vmin)+vmin;endfswarm = zeros(swarmsize,1);%存放每个粒子的适应值%初始化得到适应值for i = 1:swarmsize a = swarm(i,:); rms = fitness(data,label,a,17); //data是数据 label是值 fswarm(i,1) = rms;end%个体最优和全局最优[best,bestIndex] = min(fswarm);gbest = swarm; %个体最优解,当前为所有初始值fgbest = fswarm; %个体最优适应值zbest = swarm(bestIndex,:); %全局最优解fzbest = best; %全局最优适应值;%迭代寻优yfitness = zeros(1,maxiter); %存放每一次迭代的全局最优适应值ybest = zeros(feature_num,maxiter); %存放每一次迭代的全局最优解for i = 1:maxiter if(max(fswarm)-min(fswarm)>0.0003) for j = 1:swarmsize vstep(j,:) = vstep(j,:)+c1*rand*(gbest(j,:)-swarm(j,:))+c2*rand*(zbest-swarm(j,:)); vstep(j,vstep(j,:)-vmax>0) = vmax(1,vstep(j,:)-vmax>0); vstep(j,vstep(j,:)-vmin<0) = vmin(1,vstep(j,:)-vmin<0); %控制速度范围 swarm(j,:) = swarm(j,:) + vstep(j,:); swarm(j,swarm(j,:)-max>0) = max(1,swarm(j,:)-max>0); vstep(j,swarm(j,:)-min<0) = min(1,swarm(j,:)-min<0); %计算适应值 fswarm(j,1) = fitness(data,label,swarm(j,:),17); if fswarm(j,1)<fgbest(j) fgbest(j) = fswarm(j,1); gbest(j,:) = swarm(j,:); end if fswarm(j,1)<fzbest fzbest = fswarm(j,1); zbest = swarm(j,:); end end yfitness(1,i) = fzbest; ybest(:,i) = zbest; endend[out.fitness, index] = min(yfitness);out.best = ybest(:,index);
0 0
- 最优化算法 之 PSO算法
- PSO粒子群优化算法
- PSO粒子群优化算法
- PSO粒子群优化算法
- pso粒子群优化算法
- 粒子群优化算法(PSO)
- PSO-粒子群优化算法
- 粒子群优化算法(PSO)
- 【PSO】熟悉PSO算法
- 优化算法—粒子群算法(PSO)
- pso算法
- (转)PSO粒子群优化算法
- 进化算法之粒子群(PSO)
- 优化算法——粒子群算法(PSO)
- 优化算法——粒子群算法(PSO)
- 粒子群PSO算法
- 粒子群算法(PSO)
- pso粒子群算法
- poj 1573 Robot Motion
- 成员方法
- 地址栏中去掉端口号 java
- AcDream1007
- 读书笔记:C++ primer 5th edition--chapter12.动态内存
- 最优化算法 之 PSO算法
- hdu5378 Leader in Tree Land(概率dp+逆元)
- 数据结构(二)基本概念
- 8. String to Integer (atoi)--2016/10/10
- 深入浅出傅里叶变换(一)
- HasValue 判断可空类型是否有值
- 欢迎使用CSDN-markdown编辑器
- 数据结构之栈的操作实现
- 在eclipse下配置struts