ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-02-04 23:01:33  阅读:179  来源: 互联网

标签:粒子 gbest 位置 调度 pbest 源码 end 优化 最好


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代码问题可私信交流。

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

标签:粒子,gbest,位置,调度,pbest,源码,end,优化,最好
来源: https://blog.csdn.net/qq_59747472/article/details/122786691

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有