1 简介

粒子群算法因其原理简单,易于编程,适于并行计算等优点而得到了广泛的应用.本文探讨和分析了Matlab粒子群算法工具箱,并提出了基于该工具箱来实现水电站优化调度计算的方法.计算实例表明,Matlab粒子群算法工具箱可以很好地用于解决水电站优化调度问题,可获得比动态规划算法更好的精度.

1 算法介绍

1.1 关于速度和位置

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。

鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子i在N维空间的位置表示为矢量Xi=(x1,x2,…,xN),飞行速度表示为矢量Vi=(v1,v2,…,vN)。每个粒子都有一个由目标函数决定的适应值(fitness value),并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置(gbest)(gbest是pbest中的最好值),这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

2.2 速度和位置的更新

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

对于公式(1):

公式(1)的第①部分称为【记忆项】,表示上次速度大小和方向的影响;

公式(1)的第②部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;

公式(1)的第③部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

以上面两个公式为基础,再来看一个公式:

公式(2)和 公式(3)被视为标准PSO算法。

1.3 标准PSO算法的流程

1)初始化一群微粒(群体规模为N),包括随机位置和速度;

2)评价每个微粒的适应度;

3)对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;

4)对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;

5)根据公式(2)、(3)调整微粒速度和位置;

6)未达到结束条件则转第2)步。

迭代终止条件根据具体问题一般选为最大迭代次数Gk或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。

​PSO流程图解

2 部分代码

%min (x-3)^2

%s.t. 1<x<4.

clear all

clc

x=zeros(20,1);%粒子位置

v=zeros(20,1);%粒子速度

vmax=(4-1)./5;%最大速度

fx=zeros(20,1);%粒子适应值

pbest=zeros(20,1);%个体最好位置

fpbest=zeros(20,1);%个体最好适应值

gbest=ones(1,1);%全局最好序号

w=0.9;%惯性权重

c1=2.0;%学习因子

c2=2.0;

gmax=200;%最大迭代次数

%初始化

for i=1:20

x(i,1)=1+rand().*(4-1);%初始化粒子位置

tmp = rand().*vmax;%初始化速度

v(i,1)=tmp;

if rand()<0.5

v(i,1)=-1.*tmp;

end

fx(i)=(x(i,1)-3)^2;%每个个体目标函数值

pbest(i,1)=x(i,1);%初始化个体最好

fpbest(i,1)=fx(i);%初始化个体最好适应值

end

t=1;

while t<gmax

w=0.9-0.5.*t/gmax;%更新惯性权重

for i=1:20

v(i,1)=w.*v(i,1)+c1.*rand().*(pbest(i,1)-x(i,1))+c2.*rand().*(pbest(gbest,1)-x(i,1));%速度更新

if v(i,1)>vmax%速度越界判断

v(i,1)=vmax;

end

if v(i,1)<-1.*vmax

v(i,1)=-1*vmax;

end

x(i,1)=x(i,1)+v(i,1);%位置更新

if x(i,1)>4%限幅

x(i,1)=4;

end

if x(i,1)<1

x(i,1)=1;

end

fx(i,1)=(x(i,1)-3)^2;%计算适应值

if fx(i,1)<fpbest(i,1)%更新个体最好

pbest(i,1)=x(i,1);

fpbest(i)=fx(i);

if fpbest(i)<fpbest(gbest)%更新群体最好

gbest=i;

end

end

end

t=t+1;

end

disp('最小值为');

disp(fpbest(gbest));%输出最好目标

disp('对应的x1为');

disp(pbest(gbest,1));%输出最好解

3 仿真结果

4 参考文献

[1]芮钧, 陈守伦. MATLAB粒子群算法工具箱求解水电站优化调度问题[J]. 中国农村水利水电, 2009(1):3.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【优化调度】基于粒子群算法求解水火电调度优化问题含Matlab源码相关推荐

  1. 【微电网优化】基于matlab粒子群算法求解综合能源系统优化问题【含Matlab源码 1969期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解综合能源系统优化问题[含Matlab源码 1969期] 点击上面蓝色字体,直接付费下载,即可. ...

  2. 【优化调度】粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】

    ⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...

  3. 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码

    1 简介 基于粒子群算法求解配电网抢修选址优化问题​. 2 部分代码 function DrawCircle(Circle1, Circle2, r, 3600, s)​plot(model.trou ...

  4. 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1405期】

    ⛄一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水 ...

  5. 【优化选址】基于模拟退火结合粒子群算法求解分布式电源定容选址问题matlab源码

    1 算法介绍 1.1 模拟退火算法 1.2 粒子群算法 粒子群算法同遗传算法相似,也是根据生物界中的种群行为而发明的一种算法.也是解决优化问题常用的一种算法.其原理简单,实现起来也不复杂,并且经过自己 ...

  6. 【ELM预测】基于粒子群算法改进极限学习机ELM实现数据预测matlab源码

    一.极限学习机的概念 极限学习机(Extreme Learning Machine) ELM,是由黄广斌提出来的求解单隐层神经网络的算法. ELM最大的特点是对于传统的神经网络,尤其是单隐层前馈神经网 ...

  7. 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  8. 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1831期】

    ⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...

  9. 【配送路径规划】蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

最新文章

  1. JEECG微云快速开发平台
  2. 局部线性嵌入(LLE)算法matlab可运行
  3. ADT17中引入外部JAR包时出现ClassNotFoundException
  4. 13 个应该记住的最不寻常的搜索引擎
  5. lightoj 1037 - Agent 47(状压dp)
  6. 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit
  7. 【Linux】bash: groupadd: command not found a
  8. linux rpm安装mysql5.7.*密码策略,访问策略等常见问题
  9. YUI-compressor 在Linux下安装和使用
  10. 自定义NodeJS-C++ Addons使用说明
  11. 微信支付——微信H5支付实战教程(微信支付v3版本java)
  12. UCOS操作系统——时间片轮转调度(五)
  13. Web安全工具大汇聚
  14. 2014 抢票工具 纯java
  15. 一个简单的界面拖动切换效果类ScrollViewGroup
  16. netsh interface portproxy listenaddress
  17. 如何手动提取易失性数据
  18. bzoj2844:albus就是要第一个出场(线性基)
  19. 23-TCP 协议(紧急标志)
  20. Win11记事本打不开怎么办?打不开Win11记事本的解决方法

热门文章

  1. 关于三方协议不得不说的注意事项
  2. 军犬舆情每日热点:强生爽身粉致癌案 被判赔偿47亿美元;华为正式进军电视行业
  3. 前端数据处理——行政区域编码
  4. java 防止恶意刷新_防止恶意刷新接口, 控制在5秒内不能被刷新10次以上
  5. eas bos客户端获取组织,人员,用户的方法
  6. android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]
  7. 面向对象——依赖倒转原则和里氏代换原则
  8. ubuntu下载神器---xdm
  9. CSS常用函数补充(var、clac、blur、gradient)
  10. mysql lbs_LBS类数据服务对比分析 (一)