前言
随着微电网和分布式新能源的发展,利用动物界觅食或繁殖行为进行寻优的方法受到了人们的关注。多目标蜣螂算法(Multi-Objective Cockroach Algorithm,MOCA)是一种基于自然界中蜣螂觅食行为的多目标优化算法。它模拟了蜣螂在寻找食物时的行为,通过觅食、挥发物扩散和信息素沉积等过程来进行多目标优化。基本思想是通过一群虚拟蜣螂在搜索空间中移动,根据目标函数值的优劣和个体之间的相对位置来调整它们的行为。这些蜣螂在搜索过程中通过挥发物扩散和信息素沉积来通信,并且可以根据周围环境中的信息素浓度来调整移动的方向和速度。因此,利用多目标蜣螂算法对微电网进行优化调度值得深入研究。
多目标蜣螂算法原理
蜣螂的移动行为模拟:在算法开始时,生成一群虚拟蜣螂,并在搜索空间中随机初始化它们的位置。这些蜣螂将根据多个目标函数值来评价当前位置的好坏,并据此决定下一步的移动方向和距离。
信息素通信机制:蜣螂之间通过信息素来进行通信和交流。在MOCA算法中,每个蜣螂在其当前位置释放信息素,并且根据周围环境中的信息素浓度来调整移动的方向和速度。这样,信息素在搜索空间中的扩散和沉积能够帮助蜣螂更有效地搜索到最优解。
挥发物扩散和信息素沉积:模拟蜣螂释放信息素后,信息素会随时间逐渐挥发,从而影响周围蜣螂的移动。同时,信息素也会在搜索空间中沉积,形成信息素的浓度梯度,蜣螂可以根据这些梯度来调整移动的方向和距离。
多目标优化过程:在MOCA算法中,每个蜣螂都会根据多个目标函数值来评价当前位置的好坏。通过比较不同蜣螂的目标函数值,可以确定Pareto最优解集合,即在多个目标函数下都没有更好解的解集合。
迭代优化过程:MOCA算法是一个迭代的优化过程,通过不断地移动蜣螂、释放信息素、更新信息素浓度等步骤,来逐步优化Pareto最优解集合,直至达到收敛或满足停止条件为止。
算法步骤
初始化:随机生成一群虚拟蜣螂,并在搜索空间中随机初始化它们的位置。初始化算法参数包括迭代次数、信息素挥发速率、蜣螂移动步长等。
评价目标函数:对每个蜣螂的当前位置,计算其对应的多个目标函数值。根据目标函数值评价每个蜣螂的适应度。
信息素释放和移动:每个蜣螂根据其适应度和周围环境中的信息素浓度,决定下一步的移动方向和距离。蜣螂释放信息素,并根据信息素浓度来调整移动方向和距离。
信息素更新:在每个蜣螂移动后,更新搜索空间中的信息素浓度。通过信息素的挥发和沉积来模拟信息素的扩散过程。
重复迭代:重复步骤2到4,直到达到预设的迭代次数或满足停止条件为止。在迭代过程中,不断优化蜣螂的位置和信息素的分布,以搜索到Pareto最优解集合。
结果输出:输出Pareto最优解集合,即在多个目标函数下都没有更好解的解集合。根据需要,进行后续的结果分析和决策。
蜣螂行为分类
滚球行为
在没有障碍物的情况下,蜣螂利用太阳导航以保持粪球在直线上滚动,其中光照的强度会影响蜣螂的路径,滚球的位置更新方式如公式所示。
其中,t代表当前迭代次数,xi(t)表示第t次迭代时第i只蜣螂的位置信息;k∈(0,0.2],是一个常量,表示偏转系数;b∈(0,1);α是自然系数取1或-1,模拟自然因素使蜣螂偏离原来的方向,α=1表示没有偏离,α=-1表示偏离原来方向;Xw表示全局最差位置;Δx模拟光强的变化,越大表示光照越弱。
跳舞行为
在遇到障碍物的情况下,蜣螂利用跳舞来重新定向自己,以获得新的路线,跳舞行为的位置更新方式如公式所示。
其中,θ∈(0,π)。
繁殖行为
在自然界中,雌性蜣螂将粪球滚到适合产卵的安全地方藏起来,以此为后代提供合适的栖息地。受此启发,作者提出了一种边界选择策略来模拟雌性蜣螂产卵的位置,如公式所示。
其中,Lb*,Ub*表示产卵的区域的下界和上界;X*表示当前局部最优解;R=1-t/Tmax,Tmax表示最大迭代次数;Lb,Ub表示优化问题的下界和上界。产卵发生的区域随迭代次数动态调整,因此卵球的位置在迭代过程中也是动态的,如公式所示。
其中,Bi(t)表示第t次迭代时第i个卵球的位置信息;b1和b2是两个独立的大小为1×d的随机向量。卵球是严格限制在产卵区域的。
觅食行为
一些成熟的蜣螂从地里钻出来寻找食物,小蜣螂的最佳觅食区域是动态更新的,如公式所示。
其中,Xb表示全局最优位置,Lbb,Ubb分别表示最佳觅食区域的下界和上界。
小蜣螂的位置更新如公式所示。
其中,C1是服从正态分布的随机数;C2是(0,1)范围内的随机向量。
偷窃行为
有些蜣螂会偷其他蜣螂的粪球,位置更新如公式所示。
其中,g是大小为1×d服从正态分布的随机向量,S是常量。
程序适用平台:Matlab+Yalmip+Cplex
程序结果
部分程序
switch TestProblem
global P_load; %电负荷global WT;%风电global PV;%光伏
global buy_price;%买电电价global sell_price;%售电电价
%获取数据
data=xlsread('data.xlsx');P_load=data(:,1);
PV=data(:,2);WT=data(:,3);buy_price=data(:,4);sell_price=data(:,5);
%蓄电池最大放电功率(正表示为电负荷供电,即放电)BESSMax_dischar=30;
%蓄电池最大充电功率BESSMax_char=-30;
%柴油机最大发电功率DEMax=30;
%柴油机最小发电功率DEMin=6;
%燃气轮机最大发电功率 MTMax=30;
%燃气轮机最小发电功率MTMin=3;
%主网交互最大功率(正表示为电负荷供电)GridMax=30;
%主网交互最小功率GridMin=-30;
%各设备出力约束
for n=1:144 %粒子长度为144(光伏,风电,储能,柴油,燃气轮机,主网的6*24个小时出力)
CostFunction = @Fun;nVar = 144;VarMin = lower_bound;
VarMax = upper_bound;name='微电网优化';numOfObj = 2;
部分内容源自网络,侵权联系删除!
欢迎感兴趣的小伙伴关注并私信获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!