粒子群算法matlab以求解函数最优解为例

23 篇文章 10 订阅
5 篇文章 0 订阅

粒子群算法matlab以求解函数最优解为例

clear; clc; close all;
N=100; %粒子个数
D=2; %粒子维数
MaxIter=500; %最大迭代次数
C1max=1.8;  %权重参数,自适应
C2max=1.8;  
C1=1.2;  
C2=1.2;
w=0.79;
Wmax=0.8;  %对自己速度的记忆
Wmin=0.4;
Xmax=4; Xmin=-4;  %自变量的范围
Vmax=1; Vmin=-1;  %速度的范围

x=rand(N,D)*(Xmax-Xmin)+Xmin; %初始化N个粒子的D维空间位置
v=rand(N,D)*(Vmax-Vmin)+Vmin; %初始化N个粒子的D维空间速度

p=x;
pbest=ones(N,1);
for i=1:N
    pbest(i)=func(p(i,:));  %计算适应度,此处求的优化目标是最小值
end

g=ones(1,D);
gbest=min(pbest);      %全局最小值
index=find(pbest==gbest);
g=p(index(1),:);   %全局最小位置
gb=ones(1,MaxIter); %记录历史的全局最小

for i=1:MaxIter
    for j=1:N
        if func(x(j,:))<pbest(j)
            pbest(j)=func(x(j,:)); %记录对应粒子的局部最小
            p(j,:)=x(j,:);
        end
        if pbest(j)<gbest
            gbest=pbest(j);   %记录对应粒子的全局最小
            g=p(j,:);
        end
        w=Wmax-(Wmax-Wmin)*i/MaxIter; %自适应更新记忆度
        C1=(C1max-C1)*i/MaxIter+C1; %自适应更新权重
        C2=(C2max-C2)*i/MaxIter+C2;
        
        v(j,:)=w*v(j,:)+C1*rand*(p(j,:)-x(j,:))+C2*rand*(g-x(j,:)); %速度调整
        x(j,:)=x(j,:)+v(j,:);                                                            %位置更新
        for ii=1:D
            if v(j,ii)>Vmax | v(j,ii)<Vmin                                    %边界调整
                v(j,ii)=rand*(Vmax-Vmin)+Vmin;
            end
            if x(j,ii)>Xmax | x(j,ii)<Xmin
                x(j,ii)=rand*(Xmax-Xmin)+Xmin;
            end
        end
    end
    gb(i)=gbest;
end
g
gb(end)
figure(1)
plot(gb);
xlabel('迭代次数');
ylabel('适应度值');
figure(2);
k1=-4:0.02:4;
k2=-4:0.02:4;
z=3*cos(k1'*k2)+k1+k2.^2;
mesh(k1,k2,z);
hold on;
scatter(g(:,1),g(:,2),func(g),'*')
            
        
    

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值