• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: Matlab
  • 标签: matlab  

资源简介

依据 IEEE TEC2006 Comprehensive Learning Particle Swarm Optimizer for Global Optimization of Multimodal Functions 论文改写,其中有详细中文注释,可直接运行。 从网上之前找了很多有关CLPSO的但是感觉有些部分和这篇论文对不上,于是就自己综合了一下编写了这个

资源截图

代码片段和文件信息

clc;clear;close;
tic
%% 初始化参数
rand(‘state‘sum(100*clock));%确定随机数流
ps = 10;%种群个数大小
dimension = 10;%粒子维数
iter_max = 3000;%最大迭代数
w0=0.9;w1=0.4;
c=1.49445; %加速常数
v_min = -4;v_max = 4;%粒子速度上下限   
V = v_min + (v_max - v_min)*rand(ps dimension);%粒子速度
xmin=-5.12;xmax=5.12;%粒子位置的上下限值
mask_min = repmat(xmin 1 dimension);
mask_max = repmat(xmax 1 dimension);
X = rand(ps dimension);%粒子初始化位置
for i = 1 : dimension
   X(: i)  = repmat(xmin ps 1) + (xmax - xmin)*X(: i);    
end 
flag = zeros(ps1);%粒子停止改进代数标记
m=5;%刷新间隔
%% 计算适应度值,初始化pbest,gbest
fhd=str2func(‘@(x)sum(x.^2-10.*cos(2.*pi.*x)+102)‘);%定义函数句柄
for i=1:ps
    e(i1)=feval(fhdX(i:));%计算每个粒子适应度值
end
%% 初始化pbest和gbest
pbest=X;%初始化位置作为pbest
pbestval=e; %初始化粒子pbest和pbest的适应度值
[gbestvalgbestid]=min(pbestval);%求出适应值最小的粒子索引,得到gbest适应度值
gbest=pbest(gbestid:);%初始化gebst,将具有最小适应值的粒子的pbest作为gbest
%% Pc学习率
t=0:1/(ps-1):1;
t=5.*t;
Pc=0.0+(0.5-0.0).*(exp(t)-exp(t(1)))./(exp(t(ps))-exp(t(1)));%每个粒子的学习可能性
ai=zeros(psdimension);
f_pbest=1:ps;%单独一个粒子
f_pbest=repmat(f_pbest‘1dimension);%每个粒子每个维数需要学习的粒子索引数,初始化为每个粒子每一维从自身学习,行数代表粒子数列数是维数
%% 计算准熵
pbestval_history=pbestval;%将第一次初始化的pbest适应度值保存
P(:1)=pbestval_history(:1)./sum(pbestval_history(:1));%计算第一次迭代的Pti
QE(:1)=-sum(P(:1).*log(P(:1)));%计算初始准熵
%% CLPSO开始
for iter=1:iter_max
    w(iter)=w0-iter*(w0-w1)/iter_max;%更新惯性权重
    for i=1:ps%每个粒子进行迭代
        num=(iter-1)*10+i;%总循环次数
       %% 粒子从其他粒子学习的锦标赛选择过程
        if flag(i)>=m %当连续没有改进一定代数
            flag(i)=0;
            for d=1:dimension%粒子每一维迭代
                r = rand;%生成随机数
                if r < Pc(i)
                    a=randperm(ps);
             

评论

共有 条评论