PSO粒子群算法_二维

%% 粒子群算法函数
% function[xm,fv] = PSO(fitness,N,c1,c2,w,M,D)
% c1,c2:学习因子
% w:惯性权重
% M:最大迭代次数
% D:搜索空间维数
% N:初始化群体个体数目
tic
clear;clc;
c1=1.5;
c2=2.5;
w=0.3;
M=100;
D=2;
N=50;
% 初始化种群的个体(可以在这里限定位置和速度的范围)
format long;
Xmin =-15; Xmax = 15;
Vmin = -2; Vmax = 2;
%二维画图
x1=Xmin:1:Xmax;
x2=Xmin:1:Xmax;
[x1,x2]=meshgrid(x1,x2);
z=x1.^2+x2.^2-x1.*x2-10.*x1-4.*x2+60;
mesh(x1,x2,z);    
hold on;
xlabel('x')
%一维画图
% fplot(@fitness,[Xmin Xmax]);
grid on;
hold on;

x = Xmin+rand(N,D)*(Xmax-Xmin);
v = Vmin+rand(N,D)*(Vmax-Vmin);
% 先计算各个粒子的适应度,并初始化pi和pg
for i=1:N
    p(i) = fitness(x(i,:));
    y(i,:) = x(i,:);
end 

pg = x(N,:);  % pg为全局最优
for i=1:(N-1)
    if(fitness(x(i,:))<fitness(pg))
        pg = x(i,:);
    end
end

% 进入主要循环,按照公式依次迭代,直到满足精度要求
for t=1:M
    for i=1:N  % 更新速度、位移
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        % 速度限幅
        v(i,find(v(i,:)<Vmin))=Vmin;
        v(i,find(v(i,:)>Vmax))=Vmax;
        
        x(i,:)=x(i,:)+v(i,:);
        % 位置限幅
        x(i,find(x(i,:)<Xmin))=Xmin;
        x(i,find(x(i,:)>Xmax))=Xmax;

        %个体适应度更新
        if fitness(x(i,:)) < p(i)
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
        %再次求取群体最优
        if p(i) < fitness(pg)
            pg=y(i,:);
        end
    end
    plot3(x(i,1),x(i,2),fitness(x(i,:)),'ro')
    pause(0.05);
    Pbest(t)=fitness(pg);
end

plot3(pg(1),pg(2),fitness(pg),'b*')
figure(2)
plot(Pbest)
xlabel('进化次数');
ylabel('适应度值');
grid on;
% 输出结果
disp('目标函数取最小值时的自变量:')
xm=pg'
disp('目标函数的最小值为:')
fv=fitness(pg)
toc

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值