├── Init.m ├── README.md ├── calfitvaluemax.m ├── calfitvaluemin.m ├── main.m ├── updatepop.m └── 过程.gif /Init.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiaowenlong/PSO/ccfaa9ef594da9165295b88007e52c2171a892cb/Init.m -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PSO 2 | 粒子群算法 matlab2016b 3 | -------------------------------------------------------------------------------- /calfitvaluemax.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiaowenlong/PSO/ccfaa9ef594da9165295b88007e52c2171a892cb/calfitvaluemax.m -------------------------------------------------------------------------------- /calfitvaluemin.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiaowenlong/PSO/ccfaa9ef594da9165295b88007e52c2171a892cb/calfitvaluemin.m -------------------------------------------------------------------------------- /main.m: -------------------------------------------------------------------------------- 1 | %PSO 2 | %Copyright:jiaowenlong 3 | %2017.4.17 4 | 5 | clc 6 | clear 7 | 8 | %设置问题相关变量 9 | popsize=2000;%个体数量 10 | degree=100;%循环次数 11 | 12 | [popmax,vmax]=Init(popsize);%初始化求最大值群体的位置和速度 13 | [popmin,vmin]=Init(popsize);%初始化求最小值群体的位置和速度 14 | 15 | %计算初始群体的适应度,群体最优个体 16 | [value_max,gbestvaluemax,gbestmax]=calfitvaluemax(popmax); 17 | [value_min,gbestvaluemin,gbestmin]=calfitvaluemin(popmin); 18 | 19 | %将个体历史最优先设为初始化值 20 | pbestmax=popmax; 21 | pbestmin=popmin; 22 | 23 | %创建图 24 | set(gcf,'doublebuffer','on') 25 | set(gcf,'Name','粒子群算法PSO演示') 26 | axis([1 6 2 9]) 27 | grid on 28 | 29 | for i=1:degree 30 | %产生新的位置 31 | [newpopmax,newvmax]=updatepop(popmax,vmax,pbestmax,gbestmax); 32 | [newpopmin,newvmin]=updatepop(popmin,vmin,pbestmin,gbestmin); 33 | 34 | %更新速度值 35 | vmax=newvmax; 36 | vmin=newvmin; 37 | 38 | %更新位置值 39 | popmax=newpopmax; 40 | popmin=newpopmin; 41 | 42 | %计算新的适应度值,该次循环中的群体最优 43 | [newvalue_max,newgbestvaluemax,newgbestmax]=calfitvaluemax(newpopmax); 44 | [newvalue_min,newgbestvaluemin,newgbestmin]=calfitvaluemin(newpopmin); 45 | 46 | %更新个体历史最优 47 | for j=1:popsize 48 | if newvalue_max(j)>value_max(j) 49 | pbestmax(:,j)=newpopmax(:,j); 50 | end 51 | if newvalue_min(j)gbestvaluemax 58 | gbestvaluemax=newgbestvaluemax; 59 | gbestmax=newgbestmax; 60 | end 61 | 62 | if newgbestvaluemin