粒子群算法的寻优算法-非线性函数极值寻优

1、算法概述

粒子群优化算法(Particle Swarm optimization,PSO)又翻译为粒子群算法、微粒群算法、或微粒群优化算法。是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。PSO模拟鸟群的捕食行为。一群鸟在随机搜索食物,在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻离食物最近的鸟的周围区域。PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

2、算法步骤

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

算法源代码

%% 清空环境
clc
clear%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;
w = 0.9   %惯性权重
ws = 0.9
we = 0.4 maxgen=1000;   % 进化次s数
sizepop=200;   %种群规模Vmax=1;       %限制速度围
Vmin=-1;
popmax=5;    %变量取值范围
popmin=-5;
dim=10;       %适应度函数维数func=1;       %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(func);%画出待优化的函数,只画出二维情况作为可视化输出%% 产生初始粒子和速度
for i=1:sizepop%随机产生一个种群pop(i,:)=popmax*rands(1,dim);    %初始种群V(i,:)=Vmax*rands(1,dim);             %初始化速度%计算适应度fitness(i)=fun(pop(i,:),func);   %粒子的适应度
end%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
gbest=pop(bestindex,:);   %全局最佳
pbest=pop;                %个体最佳
fitnesspbest=fitness;     %个体最佳适应度值
fitnessgbest=bestfitness; %全局最佳适应度值%% 迭代寻优
for i=1:maxgenfprintf('第%d代,',i);fprintf('最优适应度%f\n',fitnessgbest);for j=1:sizepop%速度更新V(j,:) = w*V(j,:) + c1*rand*(pbest(j,:) - pop(j,:)) + c2*rand*(gbest - pop(j,:)); %根据个体最优pbest和群体最优gbest计算下一时刻速度w=ws-(ws-we)*(i/maxgen);V(j,find(V(j,:)>Vmax))=Vmax;   %限制速度不能太大V(j,find(V(j,:)<Vmin))=Vmin;%种群更新pop(j,:)=pop(j,:)+0.5*V(j,:);       %位置更新pop(j,find(pop(j,:)>popmax))=popmax;%坐标不能超出范围pop(j,find(pop(j,:)<popmin))=popmin;if rand>0.98                         %加入变异种子,用于跳出局部最优值pop(j,:)=rands(1,dim);end%更新第j个粒子的适应度值fitness(j)=fun(pop(j,:),func); endfor j=1:sizepop%个体最优更新if fitness(j) < fitnesspbest(j)pbest(j,:) = pop(j,:);fitnesspbest(j) = fitness(j);end%群体最优更新if fitness(j) < fitnessgbestgbest = pop(j,:);fitnessgbest = fitness(j);endend yy(i)=fitnessgbest;    end
%% 结果分析
figure;
plot(yy)
title('线性递减寻优过程','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

3、运行结果

运行结果中的最优适应度为平均值

3.1默认运行结果

当c1 = 1.49445、c2 = 1.49445、w=0.8、sizepop=100、dim=10时

最优适应度4.1839

3.2不同种群规模及维度对实验结果的影响

1、当sizepop=50、dim=5时,最优适应度=0.796434

2、当sizepop=50、dim=10时,最优适应度=5.474795

3、当sizepop=50、dim=20时,最优适应度=9.849591

4、当sizepop=50、dim=40时,最优适应度=20.899638

5、当sizepop=100、dim=5时,最优适应度=0.000


2、当sizepop=50、dim=10时,最优适应度=4.1839

7、当sizepop=100、dim=20时,最优适应度=8.5545

7、当sizepop=100、dim=40时,最优适应度=15.2029
由上述结果可知,维度越大寻优难度越大,适当提高种群数量有利于最优适应度的搜索。无论维度大小,种群规模越大速度越慢,搜索到的最优适应度值也越精确。当维度过大时种群规模的提升影响力下降。

3.3 学习因子c1、c2不变,w随着迭代次数变换对运行结果的影响

公式
wmax = 0.9;
wmin = 0.4;
w = wmax - (wmax-wmin)/maxgen*i;
其中,w是惯性权重,wmax是惯性权重最大值(一般为0.9),wmin是惯性权重最小值(一般为0.4),i是当前迭代次数,maxgen是总共迭代次数。该方法中,惯性权重跟迭代次数成负相关,并且惯性权重是迭代次数的一次函数,斜率恒定。
1、当wmax=0.9、wmin=0.4时的结果


2、当wmax=0.8、wmin=0.4时的结果


2、当wmax=0.9、wmin=0.3时的结果


由实验结果分析可得:当初始迭代时,惯性权重w比较大,具有很好的全局搜索能力,而局部搜索能力较弱。随着迭代次数的累加,w的值越来越小,粒子的速度也越来越小,此时粒子具有很好的局部搜索能力,而全局搜索能力较弱。但是由于斜率恒定,所以速度的改变总是保持同一水平。

3.4学习因子c1、c2和w同时都随着迭代次数变换对运行结果的影响

c1start=2;
c1end=0.5;
c2start=0.5;
c2end=2;
c1=c1start+(c1end-c1start)(i/maxgen);
c2=c2start+(c2end-c2start)
(i/maxgen);
其中,c1是自身学习因子,c1start自身学习因子最大值(一般为2)、c1end是自身学习因子最小值(一般为0.5)。c2是社会学习因子,c2start社会学习因子最小值(一般为0.5),c2end是社会学习因子最大值(一般为2)i是当前迭代次数,maxgen是总共迭代次数。
1、当c1start=2、c1end=0.5、c2start=0.5、c2end=2;时的结果


2、当c1start=1.5、c1end=0.5、c2start=0.5、c2end=1.5;时的结果


3、当c1start=2、c1end=1、c2start=1、c2end=2;时的结果


由实验结果可得:
动态改变学习因子,可以平衡算法的全局搜索能力和局部搜索能力。
w将影响全局和局部搜索能力,w值越大,全局搜索能力强,局部搜索能力弱
全局搜索能力弱容易陷入局部极值。

粒子群算法的寻优算法-非线性函数极值寻优相关推荐

  1. 《MATLAB 神经网络43个案例分析》:第4章 神经网络遗传算法函数极值寻优——非线性函数极值寻优

    <MATLAB 神经网络43个案例分析>:第4章 神经网络遗传算法函数极值寻优--非线性函数极值寻优 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB ...

  2. 基于Matlab的神经网络结合遗传算法在非线性函数极值寻优中的应用

    本微信图文利用神经网络进行非线性函数数据的拟合并通过遗传算法对训练后的神经网络进行非线性函数极值寻优.

  3. 如何利用神经网络结合遗传算法进行非线性函数极值寻优(2)

    如何利用神经网络结合遗传算法进行非线性函数极值寻优

  4. 粒子群优化算法的寻优算法——非线性函数极值寻优Matlab

    粒子群算法的起源 1995年,受到鸟群觅食行为的规律性启发,James Kennedy和Russell Eberhart建立了一个简化算法模型,经过多年改进最终形成了粒子群优化算法(Particle ...

  5. 【机器学习】基于蚁群算法的多元非线性函数极值寻优

    如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, you can give me the greates ...

  6. 混合粒子群的混沌蝴蝶优化算法

    文章目录 一.理论基础 1.基本蝴蝶优化算法(BOA) 2.基本粒子群优化算法(PSO) 3.混合粒子群的混沌蝴蝶优化算法(HPSOBOA) (1)Cubic映射 (2)非线性参数控制策略 (3)混合 ...

  7. 使用matlab拟合非线性函数找到最优参数值

    待解决的问题: 软测量作业第二题: 2. 炼钢厂出钢时盛钢水的钢包在使用过程中受钢水和炉渣对包衬耐火材料的浸蚀,其容积不断增大.表2所示为使用不同次数x时钢包容积y(由于容积不便测量,故以钢包盛满钢水 ...

  8. BP神经网络+遗传算法:求取非线性函数极值(一)

    1.问题描述 对于未知的非线性函数,仅通过函数的输入输出数据难以准确寻找其函数极值,这类问题可以通过利用BP神经网络的非线性拟合能力和遗传算法的非线性寻优能力来解决. 设非线性函数表达式如下: 其函数 ...

  9. 神经网络遗传算法函数极值寻优-非线性函数极值

    %% 清空环境变量 clc clear tic %% 训练数据预测数据提取及归一化 %下载输入输出数据 load data input output %从1到2000间随机排序 k=rand(1,40 ...

最新文章

  1. [zhuan]二叉树遍历算法实现(C#2.0)
  2. 【转】五、谈扩展方法的理解
  3. ActiveMQ;RabbitMQ;ZeroMQ
  4. 《腾讯传》读后感一——时势造英雄
  5. 程序员熬夜写代码,用C/C++打造一个安全的即时聊天系统
  6. 从些知道公钥密钥了,呜呜,激动ing~
  7. html 文字如何和阴影齐平,求助!Html Div齐平无效
  8. 陌陌 3 千万数据暗网出售;美团反腐 89 人受刑事查处;iPhone 推迟 5G 采用时间 | 极客头条...
  9. oralce数据库创建同义词
  10. [PsTools]psexec.exe使用范例-运行远程电脑程序(exe、bat等)
  11. codeblocks解决网络方面错误undefined reference to `inet_ntoa@4'|
  12. 外国参考文献计算机类,计算机毕业设计外文参考文献.docx
  13. en结尾的单词_以en结尾的形容词
  14. qduoj 分辣条1 (搜索+剪枝)
  15. 谷歌人工智能深度解剖:从HAL的太空漫游到AlphaGo,AI的春天来了
  16. TT付款方式、前TT和后TT、LC信用证+TT付款方式
  17. python 拆分excel工作表_Python几行代码轻松拆分表格
  18. C++偶遇-菱形继承
  19. 孤立森林异常检测算法原理和实战(附代码)
  20. HTML超链接文字加粗,Markdown语法之--标题/注释/超链接/下划线/图片/代码/贯穿线/斜体加粗/列表,使你的文本更丰富...

热门文章

  1. 周末乐一个,转个无节操的活动
  2. 使用animate库
  3. 免费的内网穿透(钉钉)
  4. 软件开发团队在苹果iPhone上日进千金
  5. 饮用水中的硝酸盐超标的解决方案
  6. 怎么才能戒烟最好的方法,这样戒烟最有效
  7. 负载均衡器技术Nginx和F5的优缺点对比
  8. (转)段永平的投资思想:56 个要点
  9. CUMTOJ算法作业二
  10. 发一份魔兽改键工具的代码,vc6.0环境,带聊天模式识别功能