⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pso_syber_精确.m

📁 matlab编写的经典pso算法
💻 M
字号:
clc;
clear;
%初始化变量----------------------------------------------------------------------------------------------------------------------------------
Global_Min        = 0;     % 全局最小值,用于停止条件
ErrGoal           = 1e-10;  % 期望精度
Success           = 0;     % 成功标志
Current_Iteration = 0;     % 迭代次数
MaxIterations     = 1000;  % 最大迭代次数

% 初始化权值
w_start   = 0.95;
w_end     = 0.4;
w_now     = w_start;
delta_w   = (w_start-w_end)/MaxIterations; 
%delta_w   = 7.857e-4; 
c1        = 2.0;
c2        = 2.0;

% 初始化微粒属性
SwarmXMax = 200;
SwarmXMin = 100;
SwarmVMax = 100;
SwarmSize = 20;
SwarmDim  = 10;

%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 初始化微粒位置和速度
SwarmXMatrix = rand(SwarmSize, SwarmDim)*(SwarmXMax-SwarmXMin) + SwarmXMin;
SwarmVMatrix = rand(SwarmSize, SwarmDim);

% 适应度函数及初始适应度向量
f2eval          = 'DeJong';
 f2eval          = 'Rastrigrin';
% f2eval          = 'Griewank';
% f2eval          = 'Rosenbrock';
Current_Fitness_Vector = feval(f2eval, SwarmXMatrix);

SwarmXMatrix_P      = SwarmXMatrix;               % SwarmXMatrix_P为微粒(Paicle)最好位置
SwarmXMatrix_G      = SwarmXMatrix;               % SwarmXMatrix_G为全局(Gloabal)最好位置
Best_Fitness_Vector = Current_Fitness_Vector;     % 初始最佳适应度向量
[Best_Fitness, g]   = min(Current_Fitness_Vector);% 初始全局最佳适应度
Best_Fitness_Latest =     Best_Fitness;     
History             = [0, Best_Fitness ,SwarmXMatrix(g,:)];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while( (Success == 0) & (Current_Iteration <= MaxIterations) )
    
    Current_Iteration = Current_Iteration+1;   
    if (Current_Iteration<=1000) & (Current_Iteration > 1)
        w_now = w_now - delta_w;
    end
                
    % 采用经典PSO算法-------------------------------------------------------------------------------------------------------------------------
    R1 = rand(SwarmSize, SwarmDim);
    R2 = rand(SwarmSize, SwarmDim);
    
    SwarmXMatrix_G = repmat(SwarmXMatrix(g,:), SwarmSize, 1); % repmat(X, m, n) repeats the matrix X in m rows by n columns.
    SwarmVMatrix   = w_now*SwarmVMatrix + c1*R1.*(SwarmXMatrix_P-SwarmXMatrix) + c2*R2.*(SwarmXMatrix_G-SwarmXMatrix);  %PBest为最佳值矩阵

    ChangeMatrix                     = SwarmVMatrix > SwarmVMax;
    SwarmVMatrix(find(ChangeMatrix)) = SwarmVMax;
    ChangeMatrix                     = SwarmVMatrix < -SwarmVMax;
    SwarmVMatrix(find(ChangeMatrix)) = -SwarmVMax;
    
    SwarmXMatrix = SwarmXMatrix + SwarmVMatrix;
    
    % 更新微粒最优
    Current_Fitness_Vector     = feval(f2eval, SwarmXMatrix);                            % 重新计算各个微粒的函数值
    ChangeVector               = Current_Fitness_Vector < Best_Fitness_Vector;           % 找到函数值变小的微粒(行),只有0,1的10*1列向量
    Best_Fitness_Vector(find(ChangeVector)) = Current_Fitness_Vector(find(ChangeVector));% 更新新的值20*1
    SwarmXMatrix_P(find(ChangeVector), :)  =  SwarmXMatrix(find(ChangeVector), :);       % 更新新的微粒最优群20*10,按行更新
    
    % 更新全局最优
    [Best_Fitness, g] = min(Best_Fitness_Vector);% 更新后的20*1中最小值及其下标分别更新fGBest和g
    if Best_Fitness < Best_Fitness_Latest        % 如果小于上次20*1中的最小值
        Best_Fitness_Latest = Best_Fitness;      % 新的最小值来更新
    end
               
    History((size(History,1)+1), :) = [Current_Iteration,SwarmXMatrix_P(g,:),Best_Fitness];
   
    if abs(Best_Fitness_Latest-Global_Min) <= ErrGoal     % GBest
        Success = 1;
    end;
    
%     pause;
%     SwarmXMatrix
%     sprintf('Current_Iteration\tSwarmXMatrix(g,:)\tBest_Fitness\tg')
%     [Current_Iteration,SwarmXMatrix(g,:),Best_Fitness,g]
end 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xmin  = SwarmXMatrix_P(g,:);
fxmin = Best_Fitness;
[xmin,fxmin]
%RealValue = feval(f2eval, xmin);
%[xmin,fxmin,RealValue]
 plot(History(:,1+SwarmDim+1));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -