粒子群算法是群智能算法中的一种,除此之外还有其他的群智能算法,如蚁群算法、猴群算法、鱼群算法等等。本文是关于粒子群算法的。所有的群智能算法都是通过模拟自然界中的生物群体的行为来解决问题的一种思想,同遗传算法一样,群智能算法的数学理论基础相对薄弱,缺乏具备普遍意义的理论性分析,算法中涉及的各种参数设置一直没有确切地理论依据,通常都是按照经验型方法确定,对具体问题和应用环境的依赖性比较大。同其他的自适应问题处理方法一样,群智能也不具备绝对的绝对的可信性,当处理突发事件时,系统的反应可能是不可测的,这在一定程度上也增加了其应用风险。

粒子群算法是通过模拟鸟群或蜂群的觅食行为来实现的一种算法思想。其基本思想是:通过群体中的个体之间的协作和信息共享来寻找最优解。

一群鸟在随机地搜索食物,在一块区域里只有一块食物,所有的鸟都不知道食物在哪儿,但是他们知道自己的当前位置距离食物有多远。我们将每一个飞行的小鸟抽象为一个无质量、无体积的粒子。每个粒子都有一个适应度(评估)函数值以模拟每只小鸟与食物的距离。每个粒子有一个速度决定它的飞行方向和距离,初始值可以随机确定。每一次单位时间的飞行之后,所有的粒子分享信息,下一步将飞向自身最佳位置(个体极值(pbest))和全局最优位置(全局极值(gbest))的加权中心。

粒子的速度和位置更新公式如下所示

其中,w称为惯性权重,c1和c2为两个正常系数,称为加速因子。将粒子的速度限制在一个最大速度之内。

从速度公式中我们可以看到粒子的速度主要由三部分组成,分别是“惯性部分”,对自身状态的信任;“认知部分”,对粒子本身的思考,即来源于自己的经验的部分;“社会部分”,粒子间的信息共享,来源于群体的其他优秀微粒的经验。

现给一个函数如下

其中m=30,0<x<60,0<y<60 。现在用MATLAB编程来求解函数的极大值与极小值。

首先是求解函数值的一个函数:

function [ z ] = thefunction( x,y )
%UNTITLED2 此处显示有关此函数的摘要
%   此处显示详细说明
z = 0;
if x>=0 && x<30 if y>=0 && y<30z = 30*x-y;    else if y>=30 && y<=60z = 30*y-x;endend
endif x>=30 && x<=60if y>=0 && y<=30z = x*x-y/2;else if y>=30 && y<=60z = 20*y*y-500*x;endend
endend

下面是求解极大值的代码;

%粒子群算法求解极大值
clc,clearvmax = 60;
w = 1;
num = 10000;x1 = zeros(2,num);
x2 = zeros(2,num);
x3 = zeros(2,num);
x4 = zeros(2,num);
x5 = zeros(2,num);
x1(:,1) = [20; 20];
x2(:,1) = [20; 40];
x3(:,1) = [40; 20];
x4(:,1) = [40; 40];
x5(:,1) = [30; 30];
x = zeros(5,2,num);
x(1,:,1) = [20;20];
x(2,:,1) = [20;40];
x(3,:,1) = [40;20];
x(4,:,1) = [40;40];
x(5,:,1) = [30;30];pbest = zeros(5,2,num);
pbest(1,:,1) = x(1,:,1);
pbest(2,:,1) = x(2,:,1);
pbest(3,:,1) = x(3,:,1);
pbest(4,:,1) = x(4,:,1);
pbest(5,:,1) = x(5,:,1);
gbest = zeros(2,num);
gbest(:,1) = x(1,:,1);
for i = 2:5if thefunction(gbest(1,1),gbest(2,1))<thefunction(pbest(i,1,1),pbest(i,2,1))gbest(:,1) = pbest(i,:,1);end
endv = zeros(5,2,10000);
for i = 1:5v(i,:,1) = [1;1];
endfor i = 2:10000for j = 1:5v(j,:,i) = w*v(j,:,i-1)+rand(1)*(pbest(j,:,i-1)-x(j,:,i-1));if v(j,1,i)>vmaxv(j,1,i) = vmax;endif v(j,2,i)>vmax;v(j,2,i) = vmax;endx(j,:,i) = x(j,:,i-1)+v(j,:,i);if x(j,1,i)<0x(j,1,i) = 0;endif x(j,1,i)>60x(j,1,i) = 60;endif x(j,2,i)<0x(j,2,i) = 0;endif x(j,2,i)>60x(j,2,i) = 60;endif thefunction(x(j,1,i),x(j,2,i)>thefunction(pbest(j,1,i-1),pbest(j,2,i-1)))pbest(j,:,i) = x(j,:,i);elsepbest(j,:,i) = pbest(j,:,i-1);endendgbest(:,i) = pbest(1,:,i);for j = 2:4if thefunction(gbest(1,i),gbest(2,i))<thefunction(pbest(j,1,i),pbest(j,2,i))gbest(:,i) = pbest(j,:,i);endendendscatter(1:80,gbest(2,1:80))
hold on
%scatter(1:10000,gbest(2,:))

x随迭代次数的变化如下

y值随迭代次数的变化如下

所以当x=60,y=60时函数取得极大值。

求解极小值的代码如下:

%粒子群算法求解极小值
clc,clearvmax = 60;
w = 0.8;
num = 10000;x1 = zeros(2,num);
x2 = zeros(2,num);
x3 = zeros(2,num);
x4 = zeros(2,num);
x5 = zeros(2,num);
x1(:,1) = [20; 20];
x2(:,1) = [20; 40];
x3(:,1) = [40; 20];
x4(:,1) = [40; 40];
x5(:,1) = [30; 30];
x = zeros(5,2,num);
x(1,:,1) = [20;20];
x(2,:,1) = [20;40];
x(3,:,1) = [40;20];
x(4,:,1) = [40;40];
x(5,:,1) = [30;30];pbest = zeros(5,2,num);
pbest(1,:,1) = x(1,:,1);
pbest(2,:,1) = x(2,:,1);
pbest(3,:,1) = x(3,:,1);
pbest(4,:,1) = x(4,:,1);
pbest(5,:,1) = x(5,:,1);
gbest = zeros(2,num);
gbest(:,1) = x(1,:,1);
for i = 2:5if thefunction(gbest(1,1),gbest(2,1))>thefunction(pbest(i,1,1),pbest(i,2,1))gbest(:,1) = pbest(i,:,1);end
endv = zeros(5,2,10000);
for i = 1:5v(i,:,1) = [1;1];
endfor i = 2:10000for j = 1:5v(j,:,i) = w*v(j,:,i-1)+rand(1)*(pbest(j,:,i-1)-x(j,:,i-1));if v(j,1,i)>vmaxv(j,1,i) = vmax;endif v(j,2,i)>vmax;v(j,2,i) = vmax;endx(j,:,i) = x(j,:,i-1)+v(j,:,i);if x(j,1,i)<0x(j,1,i) = 0;endif x(j,1,i)>60x(j,1,i) = 60;endif x(j,2,i)<0x(j,2,i) = 0;endif x(j,2,i)>60x(j,2,i) = 60;endif thefunction(x(j,1,i),x(j,2,i)<thefunction(pbest(j,1,i-1),pbest(j,2,i-1)))pbest(j,:,i) = x(j,:,i);elsepbest(j,:,i) = pbest(j,:,i-1);endendgbest(:,i) = pbest(1,:,i);for j = 2:4if thefunction(gbest(1,i),gbest(2,i))>thefunction(pbest(j,1,i),pbest(j,2,i))gbest(:,i) = pbest(j,:,i);endendend
scatter(1:100,gbest(2,1:100))

x随迭代次数的变化如下图所示

y随迭代次数的变化如下图所示

所以当x=24,y=24时函数取得极小值。

粒子群算法求函数极值相关推荐

  1. 粒子群算法的函数极值求解

    粒子群算法(PSO)是一种基于群体的随机优化技术,与其他基于群体的进化算法相比,他们均初始化为一组随机解,通过迭代搜寻最优解.不同的是,进化算法遵循适者生存原则,而PSO模拟社会,将每个可能产生的解表 ...

  2. matlab中fic算法,粒子群算法在函数优化问题中的应用最终版(全文完整版)

    <粒子群算法在函数优化问题中的应用.doc>由会员分享,可免费在线阅读全文,更多与<粒子群算法在函数优化问题中的应用(最终版)>相关文档资源请在帮帮文库(www.woc88.c ...

  3. 蚁群算法求函数最值c语言,蚁群算法代码(求函数最值)

    蚁群算法简单应用 function [F]=F(x1,x2) %目标函数 F=-(x1.^2+2*x2.^2-0.3*cos(3*pi*x1)-0.4*cos(4*pi*x2)+0.7); End f ...

  4. 【微电网优化】基于matlab粒子群算法求解热电联供型微电网经济运行优化问题【含Matlab源码 1696期】

    一.多目标粒子群算法求解电联供型微电网经济运行优化简介 0 引言 热电联供 (combined heat and power, CHP) 系统建立在能源梯级利用的概念基础上, 统一解决了电能和热能的供 ...

  5. 粒子群算法查找函数最小值

    实现 函数 F01.F06 的优化测试 以下内容是现有算法的运行结果.调参分析.及代码实现,用于给其他人提供参考,懒得改了hh 1. 运行结果 参数 w = 0.5 (可更改) c1 = 2.0 (可 ...

  6. 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码

    1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...

  7. 【优化求解】猫群算法求函数最优值

    猫群算法( Cat Swarm Optimization,缩写为CSO) 是由Shu - An Chu 等人在2006 年首次提出来的一种基于猫的行为的全局优化算法.根据 生物学分类,猫科动物大约有 ...

  8. 模拟退火算法求函数极值(含MATLAB代码实现)

    二.模拟退火算法 1. 简介      模拟退火算法的思想借鉴于固体的退火过程,当固体的温度很高时,内能比较大,固体内的粒子处于快速无序运动状态,当温度慢慢降低,固体的内能减小,粒子逐渐趋于有序,最终 ...

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

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

最新文章

  1. struts2文件下载出现Can not find a java.io.InputStream with the name的错误
  2. SSH运维总结-【liunx学习】
  3. linux下配置DHCP中继代理
  4. matlab两个图共用一个x轴_SCI论文写作MATLAB出图(2)
  5. php表格单元格怎么实现排序,javascript实现对表格元素进行排序操作
  6. 大规模天线阵列(massive-mimo)的介绍
  7. springmvc注解@
  8. python课程-Python课程学习总结
  9. 23种设计模式(十九)数据结构之组合模式
  10. zookeeper分布式协调服务的使用一
  11. 《编码的奥秘》读后感
  12. vtiger 安装中文语言包(汉化的步骤)--拓展繁体中文
  13. android发送语音动画,Android仿微信发送语音消息的功能及示例代码
  14. Note1:APUE引言
  15. windows系统清除电脑地址栏文件(夹)路径
  16. Python深度学习笔记04——tensorflow实现神经网络(壹)
  17. processing画正多边形
  18. tcpTrace的使用
  19. 上海交通大学计算机学院录取分数线,湖南省多少名可以进上海交大?附上海交通大学近三年录取分数线...
  20. 用matlab编写了一个DSP数据处理小软件

热门文章

  1. Commons Email开源项目使用
  2. html中怎么制作太阳月亮交替,CSS3 简单的地球/太阳/月亮动画
  3. 设备通过国标GB28181/海康Ehome接入EasyCVR,视频无法打开的原因分析及解决方法
  4. linux文件传输限制带宽,linux – 如何限制CentOS服务器上传/下载带宽?
  5. 基于Spring boot的图书馆图书借阅管理系统的设计与实现
  6. Python技术交流群(持续更新……)
  7. 如何在 Linux 中更新 Flatpak 软件包
  8. 数据库系统之物理设计
  9. mysql数据库读写文件
  10. [算法] 高斯消元详解