0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

粒子群优化算法PSO优化模糊控制论域

冬至子 来源:算法工程师的学习日志 作者:搬砖工程师domi 2023-07-19 15:33 次阅读

1、粒子群算法

粒子群算法是一种智能优化算法。关于智能,个人理解,不过是在枚举法的基础上加上了一定的寻优机制。试想一下枚举法,假设问题的解空间很小,比如一个函数 y = x^2 ,解空间在[-1,1],现在求这个函数的最小值,我们完全可以使用枚举法,比如在这里,在解空间[-1,1]上,取1000等分,也就是步长为0.002,生成1000个x值,然后代入函数中,找到这1000个最小的y就可以了。然而实际情况不是这样的,比如为什么选1000等分,不是1w,10w等分,很显然等分的越大,计算量也就越大,带来的解当然也就越精确,那么实际问题中如何去平衡这两点呢?也就是既要计算量小(速度快),也要准确(精度高),这就是智能算法的来源了,一般的智能算法基本上都是这样的,在很大的搜索空间上,即保证了速度快,也能比较好的找到最优解。

再来看看粒子群算法(也称PSO算法),也是一种进化算法,模拟生物群体的觅食行为,是一种群体智能算法,类似的算法想遗传算法,模拟退火算法等等。PSO是通过当前已知种群寻找到的所有解来决定新的解的寻找方向,也就是新解的生成方式依赖于这些种群历史上寻找的所有解。

形象的理解比如下图:

图片

开始随机生成一堆种群,那么这些种群之间的每个个体可以相互交流,比如下一时刻,A告诉B说我的解比你好,那么B就往A那个地方飞,也就是B的解朝着A的解方向变化,当然所有粒子间都这样操作,想想一旦粒子群中间有一个粒子找到了一个最优解,是不是所有的粒子会一窝蜂朝着这个方向而去了,而在这个去的过程中,万一某个粒子找到了一个更好的解,那它还会走吗?不会了,它就告诉剩下的所有粒子说我的解更好呀,大家快来呀(很无私的),然后所有粒子又一窝蜂的照着这个粒子方向前进,当然在这个前进的过程中可能又会产生新的解,就这样一步步的迭代,最终慢慢的趋近于一个最优解,这个解是不是全局最优解,不知道,可能是,也可能不是,取决于原始问题的复杂程度,也取决于粒子前进的多少等等。

粒子群算法相对于其他算法来说还是有很多优点的,典型的就是计算速度很快,在每次迭代时,所有粒子同时迭代,是一种并行计算方式,而且粒子的更新方式简单,朝着一个优秀解方向更新。这个优秀解包括两个部分:
1)一个是朝着自己在迭代的历史上找到的个体最优解gbest前进
2)一个是朝着群体在得带历史上找到的全体最优解zbest前进
现在还有一个问题就是每次迭代的时候更新多少呢?也就是自变量的增加步长了,我们用一个速度量V来表示,也就是每个粒子的更新速度了,公式化的表示就是这样的:

1.jpg

从上面的速度V的更新而已看到,c1那项就是朝着自己的最优解前进,c2那一项就是朝着全局最优解那前进。用简单的图表示如下:

图片

2、粒子群的算法步骤

粒子群的核心部分就是上面说到的那两个公式,一个是速度的更新方式,另一个是位置的更新方式,重点还是速度的更新方式;
总结来说,粒子群的算法步骤如下:

  • 初始化粒子群个体;
  • 计算每个个体的适应度值(函数值)作为评判好坏的标准;
  • 找到每个个体自己在所有迭代过程中的最优解Pbest;
  • 找到所有个体在所有迭代过程中的最优解Zbest;
  • 根据速度公式更新速度;
  • 根据位置公式更新位置;
  • 重复步骤二直至迭代次数结束

这里有几个参数需要说一下,

  • 关于速度V,限制速度的范围,比如需要设置一个最大速度,防止更新过快;
  • 关于c1与c2,这两个参数代表学习因子,决定跟随历史优秀解的能力;
  • 关于粒子数与迭代次数,粒子数一般50-100,迭代次数视问题而定了;

3、Matlab实现

%% I. 清空环境
clc
clear
close all
%% II. 绘制目标函数曲线图
x = 1:0.01:2;
fun = @(x)sin(10 * pi * x) ./ x;
y = fun(x);
figure
plot(x, y)
hold on
%% III. 参数初始化
c1 = 1.49445;
c2 = 1.49445;

maxgen = 50;   % 进化次数  
sizepop = 10;   %种群规模

Vmax = 0.5;   %速度的范围,超过则用边界值。
Vmin = -0.5;  
popmax = 2;   %个体的变化范围
popmin = 1;

%% IV. 产生初始粒子和速度
for i = 1:sizepop
    % 随机产生一个种群
    pop(i,:) = (rands(1) + 1) / 2 + 1;    %初始种群,rands产生(-1,1),调整到(1,2)
    V(i,:) = 0.5 * rands(1);  %初始化速度
    % 计算适应度
    fitness(i) = fun(pop(i,:));   
end

%% V. 个体极值和群体极值
[bestfitness,bestindex] = max(fitness);
zbest = pop(bestindex,:);   %全局最佳
gbest = pop;    %个体最佳
fitnessgbest = fitness;   %个体最佳适应度值
fitnesszbest = bestfitness;   %全局最佳适应度值

%% VI. 迭代寻优
for i = 1:maxgen

    for j = 1:sizepop
        % 速度更新
        V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
        V(j,V(j,:) >Vmax) = Vmax;
        V(j,V(j,:)< Vmin) = Vmin;

        % 种群更新
        pop(j,:) = pop(j,:) + V(j,:);
        pop(j,pop(j,:) >popmax) = popmax;
        pop(j,pop(j,:)< popmin) = popmin;

        % 适应度值更新
        fitness(j) = fun(pop(j,:)); 
    end

    for j = 1:sizepop    
        % 个体最优更新
        if fitness(j) > fitnessgbest(j)
            gbest(j,:) = pop(j,:);
            fitnessgbest(j) = fitness(j);
        end

        % 群体最优更新
        if fitness(j) > fitnesszbest
            zbest = pop(j,:);
            fitnesszbest = fitness(j);
        end
    end 
    yy(i) = fitnesszbest;          
end

%% VII. 输出结果并绘图
disp([fitnesszbest zbest])
plot(zbest, fitnesszbest,'r*')


figure
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

结果如下

图片

图片

动画过程

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MATLAB仿真
    +关注

    关注

    4

    文章

    174

    浏览量

    19638
  • PSO
    PSO
    +关注

    关注

    0

    文章

    49

    浏览量

    12773
  • 粒子群算法
    +关注

    关注

    0

    文章

    63

    浏览量

    12908
收藏 人收藏

    评论

    相关推荐

    PSO算法在数控机床交流伺服系统PID参数优化中的应用

    PSO算法在数控机床交流伺服系统PID参数优化中的应用摘要:针对发展高精度数控机床的要求,在数控机床交流伺服控制系统中,本文提出了一种新的永磁同步电机
    发表于 05-17 11:38

    粒子群优化模糊神经网络在语音识别中的应用

    针对模糊神经网络训练采用BP算法比较依赖于网络的初始条件,训练时间较长,容易陷入局部极值的缺点,利用粒子群优化算法(
    发表于 05-06 09:05

    粒子群算法城镇能源优化调度问题

    粒子群算法城镇能源优化调度问题,一、简介1 粒子群算法的概念粒子群
    发表于 07-07 06:04

    什么是粒子群算法

    粒子群算法(1.初步了解)​ 1995年,受鸟类捕食行为的启发,Kennedy和Eberhart正式提出了粒子群优化算法的概念。研究中发现,
    发表于 07-07 07:50

    粒子群优化算法在Acrobot平衡控制中的应用

    粒子群优化算法PSO)是基于群体的演化算法,本质上是一种随机搜索算法,并能以较大概率收敛到全局
    发表于 06-26 08:40 14次下载

    粒子群优化算法在配方设计中的应用王涛

    粒子群优化算法在配方设计中的应用_王涛
    发表于 03-15 08:00 0次下载

    Levy飞行的粒子群优化算法

    粒子群优化PSO算法具有易陷入局部最小值和全局搜索能力差的缺陷,对PSO算法的改进大多只是
    发表于 12-08 17:04 3次下载

    基于灰度平均梯度与粒子群优化PSO算法的散焦图像模糊参数估计

    针对散焦模糊图像的复原问题,提出一种基于灰度平均梯度与粒子群优化PSO算法相结合的散焦图像模糊
    发表于 12-21 09:27 1次下载
    基于灰度平均梯度与<b class='flag-5'>粒子群</b><b class='flag-5'>优化</b><b class='flag-5'>PSO</b><b class='flag-5'>算法</b>的散焦图像<b class='flag-5'>模糊</b>参数估计

    基于粒子群优化PSO算法的部署策略

    针对云计算基础设施即服务(IaaS)中的虚拟机部署问题,提出一种基于粒子群优化PSO算法的部署策略。由于PSO
    发表于 12-26 10:32 1次下载

    基于粒子群算法的行李条码阅读器优化

    针对航空旅客托运行李时,检测行李条码的阅读器数量、位置、姿态存在很多不确定性问题,提出了动态种群一双适应值粒子群优化( DPDF-PSO算法。首先,建立行李条码检测数学模型;然后,转
    发表于 12-26 18:51 0次下载

    基于粒子群优化模糊PID控制器研究

    针对阀控非对称伺服缸非线性、参数时变的特点,考虑到油液压缩特性的影响,建立了包含变体积弹性模量的系统数学模型。提出一种基于粒子群算法优化PSO)的
    发表于 03-05 16:00 2次下载
    基于<b class='flag-5'>粒子群</b><b class='flag-5'>优化</b>的<b class='flag-5'>模糊</b>PID<b class='flag-5'>控制</b>器研究

    含交叉项的混合二范数粒子群优化算法

    针对原始粒子群优化算法PSO)在搜索过程中容易陷入局部最优点的问题,并尽量避免破坏种群多样性,提出一种含交叉项的混合二范数粒子群
    发表于 01-23 14:26 3次下载
    含交叉项的混合二范数<b class='flag-5'>粒子群</b><b class='flag-5'>优化</b><b class='flag-5'>算法</b>

    如何使用免疫粒子群优化算法实现增量式的PID控制

    基于粒子群优化算法的收敛速度快简单易实现的特点和免疫算法的免疫记忆、免疫自我调节和多峰值收敛的特点,本文设计出免疫粒子群
    发表于 11-01 15:41 7次下载
    如何使用免疫<b class='flag-5'>粒子群</b><b class='flag-5'>优化</b><b class='flag-5'>算法</b>实现增量式的PID<b class='flag-5'>控制</b>

    粒子群优化算法基本原理及在直线感应电机中的应用

      摘要首先介绍了粒子群优化算法PSO)的基本原理,根据实验提出了改进措施,增强了粒子群优化
    发表于 07-19 14:58 0次下载

    粒子群优化算法的应用 粒子群优化算法研究方法

    .  粒子群优化算法(ParticleSwarmOptlmi~atlon,PSO)是由Kenrr~y和Et~rhart于1995年在鸟群、鱼群和人类社会行为规律的启发下提出的一种基于群
    发表于 07-19 15:01 0次下载