粒子群算法案例学习-非线性函数寻优

一、实例

fun.m脚本文件

%%函数用于计算粒子适应度值
function y=fun(x)

%x           input           输入粒子 
%y           output          粒子适应度值 

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+exp(1);
%%当c1=20,e=2.71282,n=2时,寻优的非线性函数为Ackley函数
%存在局部极小值点,最小值点为0,最小值位置(0,0%y=x(1)^2-10*cos(2*pi*x(1))+10+x(2)^2-10*cos(2*pi*x(2))+10;

PSO.m脚本文件

clc
clear 
%速度更新参数
c1=1.49445;
c2=1.49445;
maxgen=100;%迭代次数
sizepop=20;%种群规模
popmax=5;popmin=-5;%个体最值
Vmax=1;Vmin=-1;%速度最值
for i=1:sizepop
    %随机产生一个种群
    pop(i,:)=5*rands(1,2);%初始化粒子 
    %rands(1,2)12列的(01)的随机数
    V(i,:)=rands(1,2);%初始化速度
    %计算粒子的适应度值
    fitness(i)=fun(pop(i,:));
    %将目标优化函数进行适应度值的计算
end
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
%min返回两个数值 一个是数值最小的 一个是这个最小数值的位置 
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,:)<Vmin))=Vmin;
        
        %种群更新
        pop(j,:)=pop(j,:)+0.5*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)=fitnesszbest;    
        
end
%% 结果分析
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

%最优个体适应值为0.0328,对应粒子位置在(0.0082-0.0067

二、惯性权重的选择

惯性权重w体现的是粒子当前速度多大程度上继承之前的速度,
较大的惯性权重有利于全局搜索,较小的权重有利于局部搜索。
为了平衡算法的全局与局部搜索能力,提出线性递减惯性权重(Linear Decreasing Inertia Weight,LDIW)在这里插入图片描述
Wstart 为初始惯性权重;Wend迭代到最大次数时的权重;k为当前的迭代次数;Tmax为最大迭代次数。
一般,初始惯性权重取0.9,迭代到最大次数时的权重取0.4时,算法性能最好。迭代初期保持较大的全局搜索能力,后期能有利于进行精确的局部开发。
常用的惯性权重选择还包括以下几种:
在这里插入图片描述

三、自适应变异粒子群算法

四、动态粒子群算法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值