【最优潮流】基于人工鱼群算法的最优潮流计算(Matlab代码实现)

作品简介

 👨‍🎓个人主页:研学社的博客 
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
1.1 最优潮流问题
 1.2 人工鱼群算法
1.3 计算步骤
📚2 运行结果
🌈3 Matlab代码+数据+讲解
🎉4 参考文献
​编辑

💥1 概述

参考文献:

​编辑 最优潮流(OPF)是当系统的结构参数及负荷给定时,通过控制变量的优选,找到能满足所有

指定的约束条件,并使系统的一个或多个性能指标达到最优时的潮流分布。最优潮流算法按照所采用的优化方法不同大致分为经典解算法和现代优化注法。

经典解算法主要是指以简化梯度法!、牛顿法3、内点法和解耦法为代表的基于线性规划和非线性规划以及解耦原则的解算方法。其特点是利用目标函数对控制变量一阶或二阶梯度求解,当搜索起始点在局部最优点的收敛域以内时,常常会陷入局部最优点。

现代优化算法是以一定的直观基础而构造的算法,也称为启发式算法,包括遗传算法GA 、模拟退

火算法SA 、粒子群优化算法SO 等。这类算法以独特的优点和机制为解决复杂问题提供了新的思路和手段,当前主要应用于传统的数学优化方法难以解决的大规模非线性优化问题。启发式算法与导数无关,无需进行假设和近似,具有随机性,容易跳出局部极值点﹐且具有内在并行性,大大提高了处理复杂优化问题的速度。

 依据人工鱼群优化算法( Artificial Fish Swar mA gorithm AFSA)﹐本文提出了求解最优潮流计算的

一种新方法。

人工鱼群算法是一种基于模拟鱼群行为的随机搜索优化算法,主要利用了鱼的觅食、聚群和追尾行

为,从构造单条鱼的底层行为做起,通过鱼群中各个体的局部寻优达到全局最优值在群体中突现出来的目的。计算实例表明该算法具有良好的克服局部极值、取得全局极值的能力。

 

1.1 最优潮流问题

​编辑

 ​编辑

 1.2 人工鱼群算法

在水域中,鱼通过自行或尾随其它鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方。人工鱼群算法就是根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群及追尾行为,从而实现寻优。以下是鱼类的几种典型行为:

l)觅食行为一般情况下鱼在水中随机、自由地游动,当发现食物时,则会向着食物逐渐增多的方向快速游去。

2聚群行为鱼在游动过程中为了保证自身的生存和躲避危害会自然地聚集成群。鱼聚群时所遵守的规则有:分隔规则,尽量避免与邻近伙伴过于拥挤;对准规则,尽量与邻近伙伴的平均方向一致;内聚规则,尽量朝邻近伙伴的中心移动。

3追尾行为当鱼群中的一条或几条鱼发现食物时,其邻近的伙伴会尾随其快速到达食物点。

​编辑

​编辑

 

 ​编辑

 人工鱼群算法在聚群、内聚、拥挤度上寻求极小,而在食物浓度上寻求极大的基础上逐步向前寻优的,也就是每次迭代中人工鱼向极小方向寻优N步,N越小,寻优的精度会越高,但寻优速度会很慢;N越大,寻优的速度越快,但寻优到一定程度时出现振荡现象,影响寻优的精度。
优化的目标函数是个很复杂的非线性函数﹐应用常规的优化算法很容易陷入局部极值,或在极小和极大之间出现振荡无法收敛﹐而导致寻优效果较差。而遗传算法等算法则带来了更长的计算时间,应用人工鱼群算法则能很好地克服以上缺点.

1.3 计算步骤

 

​编辑

📚2 运行结果

​编辑

部分代码:

load data1.txt;   %已建支路数据

load data2.txt;   %待选支路数据

load data3.txt;    %节点功率

tic,

data1=data1;

data2=data2;

data3=data3;

[N,row]=size(data3); %N为节点数

fish=40;  %控制参数:人工鱼的条数

visual=7; %控制参数:视野

delta=0.35; %控制参数:拥挤度

step=5;  %控制参数:人工鱼移动的步长

maxcalculation=100;  %收敛条件:最大迭代次数

objectvalue=zeros(1,fish); %食物浓度矩阵(1×fish)

[NN,row]=size(data2); %NN为待选线路的维数

status=rand(fish,NN); %人工鱼位置状态矩阵status

for i=1:fish

  for j=1:NN

    if status(i,j)<=0.5

      status(i,j)=0;

    else

      status(i,j)=1;

    end

  end

end

minvalue=inf;

for fishnumber=1:fish

  x=status(fishnumber,:);

  [B1,B,BL,NEW,NL,L,nbl]=builtnet(x,data2,data1);

  [tong]=liantong(N,L,BL);

  if tong>1

    objectvalue(fishnumber)=inf;

  else

    [operate,overflowvalue]=dcflow(N,L,BL,data3,nbl);

    construction=0;

    for i=1:NEW

      construction=construction+25*B1(i,6);  %计算建设费用每公里线路建设费用取25万元

    end

    objectvalue(fishnumber)=construction+operate+overflowvalue;

  end

  if objectvalue(fishnumber)

   minvalue=objectvalue(fishnumber);  %minvalue记录最小的目标函数值

   minfish=status(fishnumber,:);    %minfish记录最小目标函数值所对应的人工鱼的位置

  end

end

%进行行为策略

calculation=1;

while calculation

for fishnumber=1:fish

  [status,objectvalue,swarmflag]=swarm(status,fishnumber,objectvalue,visual,fish,NN,N,delta,step,data2,data1,data3);

  if swarmflag==0

    [status,objectvalue,followflag]=follow(status,fishnumber,objectvalue,visual,fish,NN,N,delta,step,data2,data1,data3);

    if followflag==0

       [status,objectvalue]=prey(status,fishnumber,objectvalue,visual,fish,NN,N,delta,step,data2,data1,data3);

    end

  end

end 

🌈3 Matlab代码+数据+讲解



🎉4 参考文献


部分理论来源于网络,如有侵权请联系删除。

[1]刘耀年,李迎红,张冰冰,李春亮.基于人工鱼群算法的最优潮流计算[J].电工电能新技术,2006(04):30-33+66. 

创作时间:2022-11-27 20:59:37