热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

二进制蜻蜓优化算法在电力系统中的应用(附Matlab完整代码)

目录1蜻蜓算法概述2蜻蜓算法数学模型2.1分离2.2对齐2.3聚集2.4食物吸引2.5天敌驱散3完整matlab代码实现3.1主函数代码3.2子函数代码此算法在

目录

1 蜻蜓算法概述

2 蜻蜓算法数学模型

2.1 分离

2.2 对齐

2.3 聚集

2.4 食物吸引

2.5 天敌驱散

3 完整matlab代码实现  

3.1 主函数代码

3.2 子函数代码


 此算法在电力系统中也有很多应用 


1 蜻蜓算法概述

自然充满了执行不同任务的社会行为。尽管所有个体和集体行为的最终目标是生存,但生物在群体、畜群、学校、殖民地和羊群中合作和互动有几个原因:狩猎、防御、导航和觅食。例如,狼群拥有组织最完善的狩猎社交互动之一。狼倾向于遵循社会领导以不同的步骤捕猎猎物:追逐猎物、盘旋猎物、骚扰猎物和攻击猎物 。集体防御的一个例子是海洋中的鱼群。数以千计的鱼类形成了一个鱼群,并通过相互警告来避开捕食者,使得捕食者的捕食变得非常困难。

蜻蜓算法(DA)。 DA算法的主要灵感来源于自然界蜻蜓静态和动态的成群行为。优化、探索和开发的两个基本阶段是通过对蜻蜓在导航、寻找食物和在动态或统计上成群时避开敌人的社会互动进行建模来设计的。接下来文章还考虑了 DA 的二进制和多目标版本的方法,分别称为二进制 DA (BDA) 和多目标 (MODA)。所提出的算法由几个数学测试函数和一个定性和定量的真实案例研究进行了基准测试。该算法能够改善给定问题的初始随机种群,收敛到全局最优,并提供非常有竞争力的结果。 MODA 的结果还表明,该算法倾向于为多目标问题找到具有高度均匀分布的帕累托最优解的非常精确的近似值。潜艇螺旋桨设计问题得到的一组设计证明了MOD的优点。

2 蜻蜓算法数学模型

蜻蜓算法寻优计算主要思路通过模拟蜻蜓的捕食行为来实现(图1),该飞行(进化)寻优机制可以表示为蜻蜓群体分离、对齐、聚集、食物吸引与天敌驱散五个步骤。
 

2.1 分离

表示避免蜻蜓个体距离太近降低寻优效率:

                       

式中Ek为蜻蜓k的分离度;D表示当前蜻蜓的位置;Dj代表第j个邻近蜻蜓的位置;J代表群体中第k个蜻蜓的邻近蜻蜓的数量。

2.2 对齐

表示某个蜻蜓与其邻近蜻蜓个体速度的相同程度:

                        

式中Uk为蜻蜓k的对齐度;Vj代表第j个邻近蜻蜓的飞行速度;其他符号意义同前。

2.3 聚集

表示某个蜻蜓具有朝着其附近较优蜻蜓个体靠近的趋势:

                            

式中Bk为蜻蜓k的聚集度;其他符号意义同前。

2.4 食物吸引

食物是指某一次迭代计算中最优个体的位置:

                           

式中Sk为蜻蜓k的食物吸引度;D+代表当前计算中最优蜻蜓的位置。

2.5 天敌驱散

目的是使个体尽可能远离最差的蜻蜓个体,提高寻优计算效率:

                         

式中Tk为蜻蜓k的天敌驱散度;D-代表当前计算中最差蜻蜓的位置。
蜻蜓个体k飞行位置更新步长:

蜻蜓飞行位置更新:

                  

式中e、u、b、s、t分别表示分离度、对齐度、聚集度、食物吸引度、天敌驱散度的影响系数;β代表惯性系数;l代表反复迭代计数下标;其他符号意义同前。 


3 完整matlab代码实现  

3.1 主函数代码

二进制蜻蜓优化算法在电力系统中的应用(附Matlab完整代码)

3.2 子函数代码

%=====目标函数============
function [o] = MyCost(x)o=sum(x); % 这个目标函数比较简单,可以换成自己需要的目标函数end


function [Best_pos, Best_score ,Convergence_curve]=BDA(N, max_iter, nVar, CostFunction)dim=nVar;Food_fitness=inf;
Food_pos=zeros(dim,1);Enemy_fitness=-inf;
Enemy_pos=zeros(dim,1);%% 初始化X和DeltaX向量
for i&#61;1:N,for j&#61;1:nVar if rand<&#61;0.5X(j,i)&#61;0;elseX(j,i)&#61;1;endif rand<&#61;0.5DeltaX(j,i)&#61;0;elseDeltaX(j,i)&#61;1;endend
endFitness&#61;zeros(1,N);for iter&#61;1:max_iterw&#61;0.9-iter*((0.9-0.4)/max_iter);my_c&#61;0.1-iter*((0.1-0)/(max_iter/2));if my_c<0my_c&#61;0;ends&#61;2*rand*my_c; % 分离权重a&#61;2*rand*my_c; % 对齐权重c&#61;2*rand*my_c; % 聚集权重f&#61;2*rand; % 食物吸引权重e&#61;my_c; % 天敌驱散权重if iter>(3*max_iter/4)e&#61;0;end%% &#61;&#61;&#61;&#61;&#61;&#61;首先计算所有的目标值&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;for i&#61;1:N Fitness(1,i)&#61;CostFunction(X(:,i)&#39;);if Fitness(1,i)Enemy_fitnessEnemy_fitness&#61;Fitness(1,i);Enemy_pos&#61;X(:,i);endendfor i&#61;1:Nindex&#61;0;neighbours_no&#61;0;clear Neighbours_DeltaXclear Neighbours_X%% 找到相邻的解决方案&#xff08;所有蜻蜓都假设为二元搜索空间中的一个组&#xff09;for j&#61;1:Nif (i~&#61;j)index&#61;index&#43;1;neighbours_no&#61;neighbours_no&#43;1;Neighbours_DeltaX(:,index)&#61;DeltaX(:,j);Neighbours_X(:,index)&#61;X(:,j);endend%% 分离S&#61;zeros(dim,1);for k&#61;1:neighbours_noS&#61;S&#43;(Neighbours_X(:,k)-X(:,i));endS&#61;-S;%% 对齐A&#61;(sum(Neighbours_DeltaX&#39;)&#39;)/neighbours_no;%% 聚集C_temp&#61;(sum(Neighbours_X&#39;)&#39;)/neighbours_no;C&#61;C_temp-X(:,i);%% 食物吸引F&#61;Food_pos-X(:,i);%% 天敌驱散E&#61;Enemy_pos&#43;X(:,i);for j&#61;1:dimDeltaX(j,i)&#61;s*S(j,1)&#43; a*A(j,1)&#43; c*C(j,1)&#43; f*F(j,1)&#43;e*E(j,1) &#43; w*DeltaX(j,i);if DeltaX(j,i)>6DeltaX(j,i)&#61;6;endif DeltaX(j,i)<-6DeltaX(j,i)&#61;-6;endT&#61;abs(DeltaX(j,i)/sqrt((1&#43;DeltaX(j,i)^2))); %V3传递函数if rand

function o&#61;Levy(d)beta&#61;3/2;sigma&#61;(gamma(1&#43;beta)*sin(pi*beta/2)/(gamma((1&#43;beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
u&#61;randn(1,d)*sigma;
v&#61;randn(1,d);
step&#61;u./abs(v).^(1/beta);o&#61;0.01*step;


function [Best_pos, Best_score ,Convergence_curve]&#61;BDA(N, max_iter, nVar, CostFunction)


dim&#61;nVar;

Food_fitness&#61;inf;
Food_pos&#61;zeros(dim,1);

Enemy_fitness&#61;-inf;
Enemy_pos&#61;zeros(dim,1);

%% 初始化X和DeltaX向量
for i&#61;1:N,
    for j&#61;1:nVar 
        if rand<&#61;0.5
            X(j,i)&#61;0;
        else
            X(j,i)&#61;1;
        end
        
        if rand<&#61;0.5
            DeltaX(j,i)&#61;0;
        else
            DeltaX(j,i)&#61;1;
        end
    end
end

Fitness&#61;zeros(1,N);

for iter&#61;1:max_iter
    
    w&#61;0.9-iter*((0.9-0.4)/max_iter);
    
    my_c&#61;0.1-iter*((0.1-0)/(max_iter/2));
    if my_c<0
        my_c&#61;0;
    end
    
    s&#61;2*rand*my_c; % 分离权重
    a&#61;2*rand*my_c; % 对齐权重
    c&#61;2*rand*my_c; % 聚集权重
    f&#61;2*rand;      % 食物吸引权重
    e&#61;my_c;        % 天敌驱散权重
    
    if iter>(3*max_iter/4)
        e&#61;0;
    end
    %% &#61;&#61;&#61;&#61;&#61;&#61;首先计算所有的目标值&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
    for i&#61;1:N 
        Fitness(1,i)&#61;CostFunction(X(:,i)&#39;);
        if Fitness(1,i)             Food_fitness&#61;Fitness(1,i);
            Food_pos&#61;X(:,i);
        end
        
        if Fitness(1,i)>Enemy_fitness
            Enemy_fitness&#61;Fitness(1,i);
            Enemy_pos&#61;X(:,i);
        end
    end
    
    for i&#61;1:N
        index&#61;0;
        neighbours_no&#61;0;
        
        clear Neighbours_DeltaX
        clear Neighbours_X
        
        %% 找到相邻的解决方案&#xff08;所有蜻蜓都假设为二元搜索空间中的一个组&#xff09;
        for j&#61;1:N
            if (i~&#61;j)
                index&#61;index&#43;1;
                neighbours_no&#61;neighbours_no&#43;1;
                Neighbours_DeltaX(:,index)&#61;DeltaX(:,j);
                Neighbours_X(:,index)&#61;X(:,j);
            end
        end
        
        %% 分离
        
        S&#61;zeros(dim,1);
        for k&#61;1:neighbours_no
            S&#61;S&#43;(Neighbours_X(:,k)-X(:,i));
        end
        S&#61;-S;
        
       %% 对齐
        
        A&#61;(sum(Neighbours_DeltaX&#39;)&#39;)/neighbours_no;
        
       %% 聚集
        
        C_temp&#61;(sum(Neighbours_X&#39;)&#39;)/neighbours_no;
        C&#61;C_temp-X(:,i);
         
       %% 食物吸引
       
        F&#61;Food_pos-X(:,i);
        
       %% 天敌驱散
       
        E&#61;Enemy_pos&#43;X(:,i);
        
        for j&#61;1:dim
            
            DeltaX(j,i)&#61;s*S(j,1)&#43; a*A(j,1)&#43; c*C(j,1)&#43; f*F(j,1)&#43;e*E(j,1) &#43; w*DeltaX(j,i);
            if DeltaX(j,i)>6
                DeltaX(j,i)&#61;6;
            end
            if DeltaX(j,i)<-6
                DeltaX(j,i)&#61;-6;
            end
            
            
            T&#61;abs(DeltaX(j,i)/sqrt((1&#43;DeltaX(j,i)^2))); %V3传递函数
            
            
            if rand                 X(j,i)&#61;~X(j,i);
            end
        end  
    end
    Convergence_curve(iter)&#61;Food_fitness;
    Best_pos&#61;Food_pos;
    Best_score&#61;Food_fitness;
    
end


function [Best_pos, Best_score ,Convergence_curve]&#61;BDA(N, max_iter, nVar, CostFunction)


dim&#61;nVar;

Food_fitness&#61;inf;
Food_pos&#61;zeros(dim,1);

Enemy_fitness&#61;-inf;
Enemy_pos&#61;zeros(dim,1);

%% 初始化X和DeltaX向量
for i&#61;1:N,
    for j&#61;1:nVar 
        if rand<&#61;0.5
            X(j,i)&#61;0;
        else
            X(j,i)&#61;1;
        end
        
        if rand<&#61;0.5
            DeltaX(j,i)&#61;0;
        else
            DeltaX(j,i)&#61;1;
        end
    end
end

Fitness&#61;zeros(1,N);

for iter&#61;1:max_iter
    
    w&#61;0.9-iter*((0.9-0.4)/max_iter);
    
    my_c&#61;0.1-iter*((0.1-0)/(max_iter/2));
    if my_c<0
        my_c&#61;0;
    end
    
    s&#61;2*rand*my_c; % 分离权重
    a&#61;2*rand*my_c; % 对齐权重
    c&#61;2*rand*my_c; % 聚集权重
    f&#61;2*rand;      % 食物吸引权重
    e&#61;my_c;        % 天敌驱散权重
    
    if iter>(3*max_iter/4)
        e&#61;0;
    end
    %% &#61;&#61;&#61;&#61;&#61;&#61;首先计算所有的目标值&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
    for i&#61;1:N 
        Fitness(1,i)&#61;CostFunction(X(:,i)&#39;);
        if Fitness(1,i)             Food_fitness&#61;Fitness(1,i);
            Food_pos&#61;X(:,i);
        end
        
        if Fitness(1,i)>Enemy_fitness
            Enemy_fitness&#61;Fitness(1,i);
            Enemy_pos&#61;X(:,i);
        end
    end
    
    for i&#61;1:N
        index&#61;0;
        neighbours_no&#61;0;
        
        clear Neighbours_DeltaX
        clear Neighbours_X
        
        %% 找到相邻的解决方案&#xff08;所有蜻蜓都假设为二元搜索空间中的一个组&#xff09;
        for j&#61;1:N
            if (i~&#61;j)
                index&#61;index&#43;1;
                neighbours_no&#61;neighbours_no&#43;1;
                Neighbours_DeltaX(:,index)&#61;DeltaX(:,j);
                Neighbours_X(:,index)&#61;X(:,j);
            end
        end
        
        %% 分离
        
        S&#61;zeros(dim,1);
        for k&#61;1:neighbours_no
            S&#61;S&#43;(Neighbours_X(:,k)-X(:,i));
        end
        S&#61;-S;
        
       %% 对齐
        
        A&#61;(sum(Neighbours_DeltaX&#39;)&#39;)/neighbours_no;
        
       %% 聚集
        
        C_temp&#61;(sum(Neighbours_X&#39;)&#39;)/neighbours_no;
        C&#61;C_temp-X(:,i);
         
       %% 食物吸引
       
        F&#61;Food_pos-X(:,i);
        
       %% 天敌驱散
       
        E&#61;Enemy_pos&#43;X(:,i);
        
        for j&#61;1:dim
            
            DeltaX(j,i)&#61;s*S(j,1)&#43; a*A(j,1)&#43; c*C(j,1)&#43; f*F(j,1)&#43;e*E(j,1) &#43; w*DeltaX(j,i);
            if DeltaX(j,i)>6
                DeltaX(j,i)&#61;6;
            end
            if DeltaX(j,i)<-6
                DeltaX(j,i)&#61;-6;
            end
            
            
            T&#61;abs(DeltaX(j,i)/sqrt((1&#43;DeltaX(j,i)^2))); %V3传递函数
            
            
            if rand                 X(j,i)&#61;~X(j,i);
            end
        end  
    end
    Convergence_curve(iter)&#61;Food_fitness;
    Best_pos&#61;Food_pos;
    Best_score&#61;Food_fitness;
    
end


推荐阅读
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录
    本文是2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录。文章介绍了皮亚诺曲线的概念和特点,并提供了计算皮亚诺曲线上两点距离的方法。通过给定的两个点的坐标,可以计算出它们之间沿着皮亚诺曲线走的最短距离。本文还提供了个人题解的目录,供读者参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
author-avatar
mobiledu2502894115
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有