传统粒子群算法matlab仿真

采用粒子群算法程序完成Camel函数寻优。Camel函数描述为:
在这里插入图片描述
该函数有六个局部极小点,其中(-0.0898,0.7126)和(0.0898,0.7126)为全局最小点,最小值为-1.031628。

%粒子群优化函数算法
clear;
close;
clc;
M=20;      %种群大小
N=2;       %粒子的维度
NCmax=50;      %最大迭代次数
%粒子每个维度位置的限制
Xmax=3;
Xmin=-3;
Ymax=2;
Ymin=-2;
%使用惯性权重法
Wmax=0.9;
Wmin=0.4;
%使用异步时变因子
C1i=2.5;
C1f=0.5;
C2i=0.5;
C2f=2.5;
Vmax=2;            %最大飞行速度
Vmin=-2;           %最小飞行速度
%初始化粒子的位置
popx=rand(M,N);
popx(:,1)=popx(:,1)*(Xmax-Xmin)+Xmin;    
popx(:,2)=popx(:,2)*(Ymax-Ymin)+Ymin;
%初始化粒子的速度
popv=rand(M,N)*(Vmax-Vmin)+Vmin;
pBest=popx;      %初始化粒子的局部最优点
%初始化全局最优点
F=ones(M,1);       %初始化目标函数值
for i=1:M        %计算目标函数值
    F(i)=(4-2.1*popx(i,1)^2+popx(i,1)^4/3)*popx(i,1)^2+popx(i,1)*popx(i,2)...
        +(-4+4*popx(i,2)^2)*popx(i,2)^2;    
end
minvalue=min(F);
pos=find(minvalue==F);       %寻找全局最优的位置 
gBest=popx(pos(1),:);         %记录全局最优点
GBest=ones(M,N);              %记录每代的全局最优点
Fbest=inf*ones(NCmax,1);        %每代最优的目标函数值
NC=1;               %迭代计数器,记录迭代次数 
while NC<=NCmax         %停止条件之一:达到最大迭代次数,停止
    W=Wmin+(Wmax-Wmin)*NC/NCmax;   %更新权重系数
    C1=C1i-(C1i-C1f)*NC/NCmax;     %更新局部学习因子
    C2=C2i+(C2f-C2i)*NC/NCmax;     %更新全局学习因子
%使用异步更新的方法更新全局最优值
    for i=1:M
        for j=1:N      %更新粒子的速度和位置
            popv(i,j)=W*popv(i,j)+C1*rand*(pBest(i,j)-popx(i,j))...
                      +C2*rand*(gBest(j)-popx(i,j));        
            popx(i,j)=popx(i,j)+popv(i,j);                      
        end  
        %计算第i个粒子当前所在位置的目标函数值
        BV=(4-2.1*popx(i,1)^2+popx(i,1)^4/3)*popx(i,1)^2+popx(i,1)*popx(i,2)...
            +(-4+4*popx(i,2)^2)*popx(i,2)^2;
        %计算第i个粒子目前的局部最优目标函数值
        PBV=(4-2.1*pBest(i,1)^2+pBest(i,1)^4/3)*pBest(i,1)^2+pBest(i,1)*pBest(i,2)...
            +(-4+4*pBest(i,2)^2)*pBest(i,2)^2;
         %如果当前位置为局部最优则保存下来
        if BV<PBV                  
            pBest(i,:)=popx(i,:); 
        end
        %计算目前的全局最优目标函数值
        GBV=(4-2.1*gBest(1)^2+gBest(1)^4/3)*gBest(1)^2+gBest(1)*gBest(2)...
            +(-4+4*gBest(2)^2)*gBest(2)^2;
        %如果该粒子的当前位置为全局最优则保存
        if BV<GBV
            gBest=popx(i,:);
        end       
    end
    GBest(NC,:)=gBest;    %记录该次迭代的全局最优点
    Fbest(NC)=GBV;        %记录每代的最优目标函数值
    NC=NC+1;                            
end
gBest
Fmin=Fbest(NCmax)
figure(1)
plot(Fbest);
xlabel('迭代次数') ;
ylabel('目标函数值') ;
title('适应度进化曲线') ;
figure(2)
plot3(GBest(:,1),GBest(:,2),1:NCmax,'r-o');
xlabel('X取值') ;
ylabel('Y取值') ;
zlabel('迭代次数') ;
title('每代最优位置');
grid on
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值