PSO粒子群优化算法

这篇具有很好参考价值的文章主要介绍了PSO粒子群优化算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法思想

粒子群算法(Particle Swarm Optimization)
PSO粒子群优化算法,算法,算法
PSO粒子群优化算法,算法,算法
PSO粒子群优化算法,算法,算法

优点:
1)原理比较简单,实现容易,参数少。
缺点:
1)易早熟收敛至局部最优、迭代后期收敛速度慢的。

算法拓展

针对标准PSO的缺点,通常有如下的改进:

  1. 实现参数的自适应变化。
  2. 引入一些其他机制。比如随机的因素,速度、位置的边界变化-后期压缩最大速度等。
  3. 结合其他智能优化算法:遗传算法、免疫算法、模拟退火算法等等,帮助粒子跳出局部最优,改善收敛速度。

matlab代码

二维下

%% 初始化种群  
clear
%% Sphere
clear
f= @(x) x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x) +3 * x .* sin(4 * x); % 函数表达式    % 求这个函数的最大值  


N = 20;                         % 初始种群个数  
d = 1;                          % 可行解维数  
ger = 100;                      % 最大迭代次数       
limit = [0, 50];               % 设置位置参数限制  
vlimit = [-10, 10];               % 设置速度限制  
w = 0.8;                        % 惯性权重  
c1 = 0.5;                       % 自我学习因子  
c2 = 0.5;                       % 群体学习因子   
figure(1);ezplot(f,[0,0.01,limit(2)]);   %曲线

x = limit(1) + (  limit( 2 ) -  limit( 1)  ) .* rand(N, d);%初始种群的位置

v = rand(N, d);                  % 初始种群的速度  
xm = x;                          % 每个个体的历史最佳位置  
ym = zeros(1, d);                % 种群的历史最佳位置  
fxm = ones(N, 1)*inf;               % 每个个体的历史最佳适应度  
fym = inf;                       % 种群历史最佳适应度  
hold on  
plot(xm, f(xm), 'ro');title('初始状态图');  
figure(2)  
%% 群体更新  
iter = 1;  
% record = zeros(ger, 1);          % 记录器  
while iter <= ger  
     fx = f(x) ; % 个体当前适应度     
     for i = 1:N        
        if fx(i)  <fxm(i) 
            fxm(i) = fx(i);     % 更新个体历史最佳适应度  
            xm(i,:) = x(i,:);   % 更新个体历史最佳位置(取值第i行的所有列)  
        end   
     end  
    if  min(fxm)  < fym 
        [fym, nmin] = min(fxm);   % 更新群体历史最佳适应度  
        ym = xm(nmin, :);      % 更新群体历史最佳位置  
    end  
    v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新  
    % 边界速度处理  
    v(v > vlimit(2)) = vlimit(2);  %可以根据括号中的条件决定是否赋值
    v(v < vlimit(1)) = vlimit(1);  
    x = x + v;% 位置更新  
    % 边界位置处理  
    x(x > limit(2)) = limit(2);  
    x(x < limit(1)) = limit(1);  
    record(iter) = fym;%最大值记录  
    x0 = 0 : 0.01 : limit(2);  %1行3列的数组
    subplot(1,2,1)
    plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')
    subplot(1,2,2);plot(record);title('最优适应度进化过程')  
    pause(0.01)  
    iter = iter+1;  

end  

x0 = 0 : 0.01 : limit(2);  
figure(4);plot(x0, f(x0), 'b-', x, f(x), 'ro');title('最终状态位置')  
disp(['最大值:',num2str(fym)]);  
disp(['变量取值:',num2str(ym)]);  

PSO粒子群优化算法,算法,算法
PSO粒子群优化算法,算法,算法

三维下

%% 初始化种群  
clear
clc
f = @(x,y)   20 +  x.^2 + y.^2 - 10*cos(2*pi.*x)  - 10*cos(2*pi.*y) ;%[-5.12 ,5.12 ]
 

x0 = [-5.12:0.05:5.12];
y0 = x0 ;
[X,Y] = meshgrid(x0,y0);
Z =f(X,Y)  ;
figure(1); mesh(X,Y,Z);  
colormap(parula(5));

N = 50;                         % 初始种群个数  
d = 2;                          % 可行解维数  
ger = 100;                      % 最大迭代次数       
limit = [-5.12,5.12];               % 设置位置参数限制  
vlimit = [-.5, .5];               % 设置速度限制  
w = 0.8;                        % 惯性权重  
c1 = 0.5;                       % 自我学习因子  
c2 = 0.5;                       % 群体学习因子   


x = limit(1) + (  limit( 2 ) -  limit( 1)  ) .* rand(N, d);%初始种群的位置  

v = rand(N, d);                  % 初始种群的速度  
xm = x;                          % 每个个体的历史最佳位置  
ym = zeros(1, d);                % 种群的历史最佳位置  
fxm = ones(N, 1)*inf;               % 每个个体的历史最佳适应度   
fym = inf;                       % 种群历史最佳适应度  
% record = zeros(ger,1);
hold on 
% [X,Y] = meshgrid(x(:,1),x(:,2));
% Z = f( X,Y ) ;
scatter3( x(:,1),x(:,2) ,f( x(:,1),x(:,2) ),'r*' );
figure(2)  
record=[];

%% 群体更新  
iter = 1;  
% record = zeros(ger, 1);          % 记录器  
while iter <= ger  
     fx = f( x(:,1),x(:,2) ) ;% 个体当前适应度     
     for i = 1:N        
        if  fx(i)  <fxm(i) 
            fxm(i) = fx(i);     % 更新个体历史最佳适应度  
            xm(i,:) = x(i,:);   % 更新个体历史最佳位置(取值)  
        end   
     end  
    if   min(fxm)<  fym
        [fym, nmin] = min(fxm);   % 更新群体历史最佳适应度  
        ym = xm(nmin, :);      % 更新群体历史最佳位置  
    end  
    v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新  
    % 边界速度处理  
    v(v > vlimit(2)) = vlimit(2);  
    v(v < vlimit(1)) = vlimit(1);  
    x = x + v;% 位置更新  
    % 边界位置处理  
    x(x > limit(2)) = limit(2);  
    x(x < limit(1)) = limit(1);  
    record(iter) = fym;%最大值记录  
    subplot(1,2,1)
    mesh(X,Y,Z)
    hold on 
    scatter3( x(:,1),x(:,2) ,f( x(:,1),x(:,2) ) ,'r*');title(['状态位置变化','-迭代次数:',num2str(iter)])
    subplot(1,2,2);plot(record);title('最优适应度进化过程')  
    pause(0.01)  
    iter = iter+1; 

end  

figure(4);mesh(X,Y,Z); hold on 
scatter3( x(:,1),x(:,2) ,f( x(:,1),x(:,2) ) ,'r*');title('最终状态位置')  
disp(['最优值:',num2str(fym)]);  
disp(['变量取值:',num2str(ym)]);  

PSO粒子群优化算法,算法,算法
PSO粒子群优化算法,算法,算法
PSO粒子群优化算法,算法,算法

python代码


import numpy as np
import matplotlib.pyplot as plt
# 粒子(鸟)
class particle:
    def __init__(self):
        self.pos = 0  # 粒子当前位置
        self.speed = 0
        self.pbest = 0  # 粒子历史最好位置


class PSO:
    def __init__(self):
        self.w = 0.5  # 惯性因子
        self.c1 = 1  # 自我认知学习因子
        self.c2 = 1  # 社会认知学习因子
        self.gbest = 0  # 种群当前最好位置
        self.N = 20  # 种群中粒子数量
        self.POP = []  # 种群
        self.iter_N = 100  # 迭代次数

    # 适应度值计算函数
    def fitness(self, x):
        return x + 16 * np.sin(5 * x) + 10 * np.cos(4 * x)

    # 找到全局最优解
    def g_best(self, pop):
        for bird in pop:
            if bird.fitness > self.fitness(self.gbest):
                self.gbest = bird.pos

    # 初始化种群
    def initPopulation(self, pop, N):
        for i in range(N):
            bird = particle()#初始化鸟
            bird.pos = np.random.uniform(-10, 10)#均匀分布
            bird.fitness = self.fitness(bird.pos)
            bird.pbest = bird.fitness
            pop.append(bird)

        # 找到种群中的最优位置
        self.g_best(pop)

    # 更新速度和位置
    def update(self, pop):
        for bird in pop:
            # 速度更新
            speed = self.w * bird.speed + self.c1 * np.random.random() * (
                bird.pbest - bird.pos) + self.c2 * np.random.random() * (
                self.gbest - bird.pos)

            # 位置更新
            pos = bird.pos + speed

            if -10 < pos < 10: # 必须在搜索空间内
                bird.pos = pos
                bird.speed = speed
                # 更新适应度
                bird.fitness = self.fitness(bird.pos)

                # 是否需要更新本粒子历史最好位置
                if bird.fitness > self.fitness(bird.pbest):
                    bird.pbest = bird.pos

    # 最终执行
    def implement(self):
        # 初始化种群
        self.initPopulation(self.POP, self.N)

        # 迭代
        for i in range(self.iter_N):
            # 更新速度和位置
            self.update(self.POP)
            # 更新种群中最好位置
            self.g_best(self.POP)


pso = PSO()
pso.implement()

best_x=0
best_y=0
for ind in pso.POP:
    #print("x=", ind.pos, "f(x)=", ind.fitness)
    if ind.fitness>best_y:
        best_y=ind.fitness
        best_x=ind.pos
print(best_y)
print(best_x)




x = np.linspace(-10, 10, 100000)


def fun(x):
    return x + 16 * np.sin(5 * x) + 10 * np.cos(4 * x)
y=fun(x)
plt.plot(x, y)

plt.scatter(best_x,best_y,c='r',label='best point')
plt.legend()
plt.show()

PSO粒子群优化算法,算法,算法
注:
算法思想和matlab代码来自于
【通俗易懂讲算法-最优化之粒子群优化(PSO)】
python代码来自于
粒子群PSO优化算法学习笔记 及其python实现(附讲解如何使用python语言sko.PSO工具包)文章来源地址https://www.toymoban.com/news/detail-627396.html

到了这里,关于PSO粒子群优化算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现PSO粒子群优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月13日
    浏览(32)
  • Python实现PSO粒子群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月15日
    浏览(39)
  • Particle Swarm Optimization粒子群优化算法(PSO算法)概念及实战

    粒子群算法(PSO算法) 粒子群算法,又称粒子群优化算法(Particle Swarm Optimization),缩写为 PSO, 是近年来发展起来的一种新的进化算法(Evolutionary Algorithm - EA),由Eberhart 博士和Kennedy 博士于1995年提出,其源于对鸟群捕食的行为研究。 PSO模拟鸟群的捕食行为。 设想这样一

    2024年02月16日
    浏览(26)
  • 智能优化之粒子群算法(PSO)(Matlab,python,C++实现)

    一、算法简介 粒子群算法(Particle swarm optimization, PSO)是一种仿生算法,它是一种 在求解空间中寻找最优解 的简单算法。它与其他优化算法的不同之处在于,它只需要 目标函数,不依赖于目标的梯度或任何微分形式。它也有很少的超参数。 由Kennedy和Eberhart于1995年提出; 群体

    2024年02月16日
    浏览(32)
  • 粒子群算法PSO优化支持向量机(PSO-SVM)的数据回归预测 matlab代码

    %%  清空环境变量 warning off             % 关闭报警信息 close all               % 关闭开启的图窗 clear                   % 清空变量 clc                     % 清空命令行 tic %%  导入数据 P_train = xlsread(\\\'data\\\',\\\'training set\\\',\\\'B2:G191\\\')\\\'; T_train= xlsread(\\\'data\\\',\\\'training set\\\',\\\'H2:H191\\\')\\\';

    2024年02月02日
    浏览(40)
  • C# PSO 粒子群优化算法 遗传算法 随机算法 求解复杂方程的最大、最小值

    复杂方程可以自己定义,以下是看别人的题目,然后自己来做 以下是计算结果

    2024年02月09日
    浏览(33)
  • 粒子群算法(PSO)优化的BP神经网络预测回归——附代码

    目录 摘要: 1.BP模型神经网络模型 2.粒子群优化算法(PSO) 伪代码实现 3.粒子群算法结合BP神经网络(PSO-BP) 4.程序运行结果 5.本文Matlab代码 BP神经网络是一种常见的多层前馈神经网络,本文通过粒子群算法(PSO)对BP神经网络的网络参数进行寻优,得到最优化的网络参数,并与

    2023年04月11日
    浏览(34)
  • 粒子群算法优化支持向量机回归分析,PSO-SVM回归分析

    背影 支持向量机SVM的详细原理 SVM的定义 SVM理论 粒子群算法原理 SVM应用实例,粒子群算法优化支持向量机回归分析,PSO-SVM回归分析 代码 结果分析 展望 完整代码:粒子群算法优化支持向量机回归分析,PSO-SVM回归分析(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.

    2024年03月15日
    浏览(35)
  • Python实现PSO粒子群优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月13日
    浏览(35)
  • 基于GA-PSO遗传粒子群混合优化算法的VRPTW问题求解matlab仿真

    目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 遗传算法(GA)基本原理 4.2 粒子群优化(PSO)基本原理 4.3 算法优化策略 5.完整程序        VRPTW是车辆路径问题(VRP)的一个扩展,它在基本的车辆路径问题上增加了对客户服务时间窗的考虑

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包