找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1977|回复: 0
收起左侧

二阶振荡粒子群算法

[复制链接]
ID:262395 发表于 2017-12-18 08:51 | 显示全部楼层 |阅读模式
主程序:
%------基本粒子群优化算法(Particle Swarm Optimization)-----------
%------名称:二阶粒子群优化算法(PSO)
%------作用:求解优化问题
%------说明:全局性,并行性,高效的群体智能算法,提高算法的精度
%------初始格式化--------------------------------------------------
clear all;
clc;
format long;
%------给定初始化条件----------------------------------------------
%c1=1.4962;             %学习因子1
c1=2;
c2=3;
%c2=1.4962;             %学习因子2
%w=0.7298;             %惯性权重
%MaxDT=500;            %最大迭代次数
%D=6;          %搜索空间维数(未知数个数)
%N=20;                  %初始化群体个体数目
eps=10^(-6);           %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
for i=1:N
    for j=1:D
        x(i,j)=randn; %随机初始化位置
        x1(i,j)=randn;
        v(i,j)=randn; %随机初始化速度
    end
end
%------先计算各个粒子的适应度,并初始化PiPg----------------------
figure(3)
for i=1:N
    P(i)=fitness2(x(i,:));
    y(i,:)=x(i,:);
end
Pg=x(N,:);             %Pg为全局最优
for i=1:(N-1)
    if fitness2(x(i,:))<fitness2(Pg)
        Pg=x(i,:);
    end
end
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
for t=1:MaxDT       
for i=1:N
%二阶粒子群速度更新公式
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-2*x(i,:)+x1(i,:))+c2*rand*(Pg-2*x(i,:)+x1(i,:));
        x1(i,:)=x(i,:);
        x(i,:)=x(i,:)+v(i,:);
        if fitness2(x(i,:))<P(i)
            P(i)=fitness2(x(i,:));
            y(i,:)=x(i,:);
        end
        if P(i)<fitness2(Pg)
            Pg=y(i,:);
        end
    end
    Pbest(t)=fitness2(Pg);
end
plot(Pbest)
TempStr=sprintf('c1= %g ,c2=%g',c1,c2);
title(TempStr);
xlabel('迭代次数');
ylabel('适应度值');
%------最后给出计算结果
disp('*************************************************************')
disp('函数的全局最优位置为:')
Solution=Pg
disp('最后得到的优化极值为:')
Result=fitness2(Pg)
disp('*************************************************************')

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表