苔藓生长优化算法(The Moss Growth Optimization,MGO)是受自然环境中苔藓生长规律的启发而提出的。MGO算法首先通过一种称为确定风向的机制来确定种群的进化方向,该机制采用了一种划分种群的方法。从藓类植物的无性繁殖、有性繁殖和营养繁殖中得到启发,提出了孢子扩散搜索和双繁殖搜索两种新的搜索策略,分别用于探索和开发。最后,最后,隐生机制改变了传统元启发式算法直接修改个体解的方法,避免了算法陷入局部最优。
该成果于2024年发表在计算机领域2区SCI期刊“Journal of Computational Design and Engineering”上。
1、算法原理
(1)风向测定
苔藓的生长受到风的影响,主要是因为风在孢子的传播中起着至关重要的作用。由于风向的重要性,MGO开发了一种创新的机制,称为“风向测定”。这种机制利用大多数个体与最优个体之间的位置关系,来决定种群中所有个体的进化方向。这种进化方向有效地帮助MGO避免陷入局部最优解决方案。应该注意的是,MGO算法将单个苔藓个体视为搜索代理。该算法的种群由所有苔藓个体组成。通过依赖于MGO算法所做的以下假设来模拟风向:1.风向在整个迭代中保持不变。2.假设moss个体表示解空间内的位置,则当前最佳候选位置对应于最优解中的当前moss个体。3.风的方向总是从苔藓数量较多的地区吹向最有利生长环境中的个体苔藓。
人口中最特殊的个体X是 。本文采用第j维值作为阈值,并将所有个体的j维值与之进行比较。公式如下: 。其中,t是第i个苔藓个体的第j个粒子,k是苔藓个体的维度。然后,选择具有较大数目的成员的集合,如公式所示:
其中function count()表示计算给定集合中的苔藓个体数量。
多次除法后得到的集合见公式所示:
式中,dn表示被除的次数,本文中dn的值设为dim/4,且不小于1。pj表示第j个随机数,符合范围(1,2,...dim),并满足以下公式:
对风进行了简要的模拟,风总是从区域divX到最特殊的个体Mbest,如图所示。
风的方向的精确计算公式如下:
其中,Dwind代表计算出的风向,其与个体具有相同的维度。变量“num”表示“dirX”中的总种群个数。
其中,“dirX”表示相对于“Mbest”将“divX”内的个体分散的距离的集合。
(2)孢子扩散搜索
MGO的探索阶段涉及孢子传播搜索。在有大量风的情况下,孢子的传播以高度不可预测的方式发生,导致相当长的传播距离。在稳定的风力条件下,孢子能够传播更长的距离,而在湍流条件下,它们往往会分散在较短的距离内。大多数孢子在稳定的风条件下分散,而一小部分在湍流条件下分散。最后,随着风力减弱,孢子开始在更靠近苔藓的地方定居。进行建模以模拟孢子通过风的传播特性,如图所示。
孢子的位置由下式确定。这两个步骤的大小差别很大。这允许个体进行随机选择,以防止固定步长在早期阶段导致收敛缓慢而在后期阶段无法收敛,从而确保种群多样性。
其中,“Mnewi”表示通过第i个苔藓个体的孢子传播获得的新苔藓。r1是一个随机数,在(0,1)范围内,而d1是一个常数参数,在本文中设置为0.2。如果r1>d1,孢子在稳定的风条件下分散,而它们在湍流条件下分散。Step1表示在稳定风条件下孢子传播的距离,如方程式所示。Step2代表在湍流风条件下孢子传播的距离,如方程式所示:
其中w是一个常数参数,设置为2。r2是一个随机向量在(0,1)范围内,它具有和Dwind相同的维数。E是风的强度,它随着迭代的进行而减小,如方程所示:
其中,r3是范围(0,1)中的随机向量,在等式中示出:
其中,FES表示当前求值计数,而MaxFES表示最大迭代次数。
其中,β代表以divX为单位的种群与以X为单位的种群的比例。
战斗行为在数学上用以下方式表示:
(3)双传播搜索
MGO的开发阶段涉及双重繁殖搜索,它模拟有性生殖和营养生殖,通过有性生殖和营养生殖产生新的个体,这些个体靠近原始个体。应该注意的是,当使用双传播搜索时,必须满足条件C<0.8。在有性生殖过程中,个体基因被用作解决方案,允许新个体从当前和最好的个体获得基因。在营养繁殖过程中,苔藓个体的碎片可以发育成新的个体,这被认为是一种新的解决方案。碎片的传播与孢子的传播相似,也受风的影响。与孢子传播相比,双传播搜索的方法允许苔藓在更有限的区域内繁殖,但它有利于快速识别苔藓的最佳栖息地。
对双传播搜索进行模拟,如图所示。
新藓类植物个体的位置由公式定义、该方法与传统MAs的不同之处在于,它增加了仅改变单个维度的方法的比例,增强了整体局部探索能力。
其中,Mnewi表示第i个新个体,Mnewi,j表示第j个粒子,j是一个不超过个体最大维数的随机数。当前的最优个体由Mbest表示。r4是一个随机数,在(0,1)范围内的。如果是有性繁殖,则在有性繁殖阶段模拟双繁殖搜索,而在营养繁殖阶段则采用不同的计算方法进行模拟。
然后,act计算是否使用了Mbest,如等式所示,其中,r5是在(0,1)范围内的随机向量,其维数与Mbest相同。
其中,r6是在(0,1)范围内的随机数,E是风的强度。
下图显示了MGO的伪代码。
MGO对应的流程图如下图所示
2、结果展示
3、MATLAB核心代码
% 苔藓生长优化算法(The Moss Growth Optimization,MGO)
function [best_M,Convergence_curve]=MGO(SearchAgents_no,MaxFEs,lb,ub,dim,fobj)
%% Initialization
FEs=0;
best_cost=inf; %change this to -inf for maximization problems
best_M = zeros(1,dim);
M=initialization(SearchAgents_no,dim,ub,lb); %Initialize the set of random solutions
costs = zeros(1,SearchAgents_no);
for i=1:SearchAgents_no
costs(i)=fobj(M(i,:)) ;
FEs=FEs+1;
if costs(i)<best_cost
best_M=M(i,:);
best_cost = costs(1,i);
end
end
Convergence_curve=[];
it=1;
rec = 1;
w = 2;
rec_num = 10;
divide_num = dim/4;
% divide_num = min(SearchAgents_no/4, dim/4);
d1 = 0.2;
newM = zeros(SearchAgents_no, dim);
newM_cost = zeros(1, SearchAgents_no);
rM = zeros(SearchAgents_no,dim,rec_num); %record history positions
rM_cos = zeros(1,SearchAgents_no,rec_num);
%% Main Loop
while FEs<MaxFEs
calPositions = M;
div_num = randperm(dim);
%Divide the population and select the regions with more individuals based on the best
for j=1:max(divide_num,1)
th = best_M(div_num(j));
index = calPositions(:,div_num(j)) > th;
if sum(index) < size(calPositions, 1)/2 %choose the side of the majority
index = ~index;
end
calPositions = calPositions(index,:);
end
D = best_M - calPositions; %Compute the distance from individuals to the best
D_wind = sum(D, 1)/size(calPositions, 1); %Calculate the mean of all distances
beta = size(calPositions, 1) / SearchAgents_no;
gama = 1/sqrt(1-power(beta,2));
step = w * (rand(size(D_wind))-0.5) * (1-FEs/MaxFEs);
step2 = 0.1*w*(rand(size(D_wind))-0.5)* (1-FEs/MaxFEs)*(1+1/2*(1+tanh(beta/gama))*(1-FEs/MaxFEs));
step3 = 0.1*(rand()-0.5) * (1-FEs/MaxFEs);
act =actCal(1 ./ 1 + (0.5 - 10*(rand(size(D_wind)))));
if rec == 1 %record the first generation of positions
rM(:,:,rec) = M;
rM_cos(1,:,rec) = costs;
rec = rec + 1;
end
for i=1:SearchAgents_no
newM(i,:) = M(i,:);
%Spore dispersal search
%Update M using Eq.(6)
if rand()>d1
newM(i,:) = newM(i,:) + step .* D_wind;
else
newM(i,:) = newM(i,:) + step2 .* D_wind;
end
if rand() < 0.8
% Dual propagation search
%Update M using Eq.(11)
if rand() > 0.5
newM(i,div_num(1)) = best_M(div_num(1)) + step3 * D_wind(div_num(1));
else
newM(i,:) = (1-act) .* newM(i,:)+act .* best_M;
end
end
%Boundary absorption
Flag4ub=newM(i,:)>ub;
Flag4lb=newM(i,:)<lb;
newM(i,:)=(newM(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
newM_cost(i)=fobj(newM(i,:));
FEs=FEs+1;
% Cryptobiosis mechanism
rM(i,:,rec) = newM(i,:);
rM_cos(1,i,rec) = newM_cost(i);
if newM_cost(i)<best_cost
best_M=newM(i,:);
best_cost=newM_cost(i);
end
end %End for
rec = rec + 1;
% Cryptobiosis mechanism
if rec > rec_num || FEs>=MaxFEs
[lcost,Iindex] = min(rM_cos, [] ,3);
for i=1:SearchAgents_no
M(i,:) = rM(i,:,Iindex(i));
end
costs = lcost;
rec = 1;
end
Convergence_curve(it)=best_cost;
it=it+1;
end
end
function [act] = actCal(X)
act = X;
act(act>=0.5) = 1;
act(act<0.5) = 0;
end
微信公众号搜索:淘个代码,获取更多免费代码
%禁止倒卖转售,违者必究!!!!!
%唯一官方店铺:https:
%代码清单:https:
参考文献
[1]Zheng B, Chen Y, Wang C, et al. The Moss Growth Optimization (MGO): concepts and performance[J]. Journal of Computational Design and Engineering, 2024: qwae080.
完整代码获取
后台回复关键词:
TGDM817
获取更多代码:
或者复制链接跳转:
https:
'相关知识
【优化覆盖】基于matlab入侵杂草和花授粉混合算法无线传感器覆盖优化问题【含Matlab源码 1328期】
花授粉优化算法及代码实现
鲜花分类算法
基于花授粉算法优化实现SVM数据分类
改进的花朵授粉算法程序(Matlab)资源
实现花卉分类的 MATLAB 代码及实例
【优化求解】基于动态全局搜索和柯西变异改进的花授粉算法matlab源码
MATLAB植物虫害识别
【中科院1区】花朵授粉算法FPA
CMOFPA:多目标花授粉算法
网址: 2024年最新优化算法——苔藓生长优化算法,原理详解,MATLAB代码免费获取 https://m.huajiangbk.com/newsview1055088.html
上一篇: 藻 |
下一篇: 沉香生长环境条件及特点 |