首页/文章/ 详情

MATLAB学习笔记—粒子群算法学习1

1年前浏览526
最近女朋友的研究方向需要使用群体智能算法中的粒子群算法,因此笔者也开始进行相应的学习。那么今天先介绍一下粒子群算法的概念,并使用一个简单的例子进行一下说明。
粒子群算法(PSO)——在可行空间中初始化一群粒子,每个粒子都代表极值优化问题的一个潜在最优解,用位置、速度、适应度值三项指标表示粒子特征。粒子在空间运动时,通过追踪个体极值Pbest和群体极值Gbest更新个体 位置,从而得到适应度最优值,群体极值Gbest是指种群中所有粒子搜索到的适应度最优位置。粒子每更新一次位置,就计算一次适应度,通过比较新粒子的适应度和个体极值、群体极值的适应度更新个体极值Pbest和群体Gbest位置。
那么,我们举一个例子来说明吧!
假设有一个一元函数,我们怎么使用粒子群算法来寻找其极值呢?
代码如下:



























































































%------初始格式化--------------------------------------------------clear all;clc;
%------绘制目标函数-----%x = 1:0.01:2y = sin(10*pi*x)./x
figureplot(x,y,'b-')hold on

%------参数初始化--------%c1 =1.49445;             %学习因子1c2 =1.49445;             %学习因子2maxgen =50;            %最大迭代次数sizepop =10;           %种群规模,为10个粒子Vmax =0.5              %速度最大值Vmin =0.5              %速度最小值popmax =2              %根据x范围定义到-2popmin =1              %根据x范围定义到1
%-----产生初始粒子和速度
for i=1:sizepop    %---随机产生一个种群      pop(i,:) = (rands(1)+1)/2+1      V(i,:) = 0.5*rands(1)    %---计算适应度----%     fitness(i) =fun(pop(i,:))end
%----个体极值和群体极值-----%[bestfitness bestindes] =max(fitness)zbest =pop(bestindes,:)  %全局最佳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,:)<Vmin)) =Vmin
       %---种群更新----%        pop(j,:) =pop(j,:)+V(j,:)        pop(j,find(pop(j,:)>popmax)) =popmax        pop(j,find(pop(j,:)<popmin)) =popmin
       %---适应度值更新----%        fitness(j)=fun(pop(j,:))
   end
   for j=1:sizepop        %个体最优更新        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) =fitnesszbestend
%----输出结果并绘制图----%  [fitnesszbest zbest]  plot(zbest,fitnesszbest,'r*')

 figure  plot(yy)  title('最优个体适应度','fontsize',12)  xlabel('进化迭代','fontsize',12)  ylabel('适应度','fontsize',12)
%------算法结束---DreamSun GL & HF-----------------------------------%----定义fun函数----%function y = fun(x)y = sin(10*pi*x)./xend

其结果如下所示:


从以上结果可以看出,其峰值点在(1.049,0.953)的位置处,大概迭代8次左右便可得到相应值精度。
来源:土木爱研小站
MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-08-16
最近编辑:1年前
语墨
硕士 不怕困难,勇往直前
获赞 65粉丝 67文章 130课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈