粒子群算法的matlab程序代码

粒子群算法的matlab代码

帮助理解粒子群算法的寻优算法
该算法是寻找函数的最大值
代码如下:

%% 清空环境
clc
clear

%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;  %自我学习因子
c2 = 1.49445;  %社会学习因子

maxgen=300;    %进化次数  
sizepop=20;    %种群规模
Vmax=0.5;      %速度的最大值
Vmin=-0.5;     %速度的最小值
popmax=2;      %边界最大值
popmin=-2;     %边界最下值

for k=1:100
    %% 产生初始粒子和速度
    k
    for i=1:sizepop
        %随机产生一个种群
        pop(i,:)=2*rands(1,2);    %初始种群
        V(i,:)=0.5*rands(1,2);  %初始化速度
        %计算适应度
        fitness(i)=fun(pop(i,:));   %染色体的适应度
    end

    %% 个体极值和群体极值
    [bestfitness bestindex]=max(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,:)<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)=fitnesszbest;    

    end
    s(k,:)=yy;
end
%% 结果分析
for m=1:300
    s(101,m)=sum( s(:,m) )/100;
end
plot(s(101,:),'k')
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);


其中要寻找最优值的函数放在另一个.m文件当中,可以随时更改函数,以实现寻找不同函数的最优值的目的,函数文件的程序为:

function y = fun(x)
%函数用于计算粒子适应度值
%x           input           输入粒子 
%y           output          粒子适应度值 
y=sin( sqrt(x(1).^2+x(2).^2) )./sqrt(x(1).^2+x(2).^2)+exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)-2.71289;

这里的函数可以任意修改。该函数的文件名最好为上面程序中要调用的的函数fun.m。这样一个简单的粒子群算法就搭建好啦。
若有不正确的地方,希望给予指正。

要想了解更多的算法以及源代码,欢迎点进我的主页

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i love matlab11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值