【Matlab】智能优化算法_人工大猩猩部队优化算法GTO
- 1.背景介绍
- 2.数学模型
- 2.1 勘探阶段
- 2.2 开采阶段
- 2.2.1 跟随银背
- 2.2.2 成年女性比赛
- 3.文件结构
- 4.算法流程图
- 5.伪代码
- 6.详细代码及注释
- 6.1 boundaryCheck.m
- 6.2 GTO.m
- 6.3 initialization.m
- 6.4 main.m
- 6.5 ObjectiveFunction.m
- 7.运行结果
- 8.参考文献
1.背景介绍
大猩猩和其他类人猿一样,有感情,制造和使用工具,建立牢固的家庭纽带,思考自己的过去和未来。一些研究人员认为,大猩猩也有内心的感情或宗教倾向。平均而言,大猩猩在白天会进行休息、旅行和吃饭等活动。大猩猩的饮食因物种而异。山地大猩猩主要是草食性动物,以树叶、茎、果核和树枝等物质为食,而水果在它们的食物中只占很小的一部分。
大猩猩以群体形式生活,称为 “部队”,由一只成年雄性大猩猩或银背大猩猩群体(见图2)和几只成年雌性大猩猩及其后代组成。然而,也有一些群体,包括几只雄性大猩猩。银背大猩猩的寿命通常超过12年,因青春期背上长出银色毛发而得名。
此外,银背大猩猩有巨大的犬齿,在青春期会再次出现。雄性和雌性大猩猩都有从出生地迁徙的倾向。大猩猩通常会迁徙并转移到新的群体。而且,雄性大猩猩往往会放弃自己的群体,通过吸引迁徙的雌性大猩猩而形成新的群体。然而,雄性大猩猩有时会留在它们出生时所在的群体,并被纳入银背大猩猩群体。如果银背大猩猩死亡,这些大猩猩可能主宰群体或与银背大猩猩一起主宰群体。
另一方面,雄性大猩猩为争夺成年雌性大猩猩而展开激烈竞争。在只有一只大猩猩生活的群体中,雌性大猩猩和后代会分散并为自己寻找新的群体。如果没有银背大猩猩保护小大猩猩,小大猩猩可能会成为杀婴行为的受害者,从而试图加入新的群体来解决这个问题。
银背大猩猩是群体的核心,它能做出所有决定,调解争斗,决定群体的行动,引导大猩猩寻找食物来源,并负责群体的安全福祉。被称为 "黑背 "的年轻雄性大猩猩跟随银背大猩猩,充当群体的后备保护者。银背大猩猩和雌性大猩猩之间的联系构成了大猩猩社会生活的核心。雄性大猩猩的社会关系很差,尤其是在有几只雄性大猩猩的群体中,等级分明。此外,在这些群体中,雄性大猩猩为寻找配偶而展开激烈的竞争。
尽管雄性山地大猩猩群体中的雄性大猩猩倾向于通过玩耍、梳理毛发、呆在一起形成友好关系,有时也会发生同性性行为,但在稳定的群体中很少发生极端暴力事件。然而,当两个山地大猩猩群体相遇时,银背大猩猩会用它们的犬齿在对手的身体上造成很深的伤口和裂缝。雄性大猩猩并不勤于照顾新生儿,但在与其他大猩猩建立联系方面发挥着作用。银背大猩猩与新生儿之间有着强有力的支持关系,并保护它们免受群体内的入侵。大猩猩已知有25种不同的鸣声,其中许多主要用于群体交流。被归类为呼噜声和犬吠声的鸣声最常在旅行时听到,表示群体成员的存在。尖叫和吼叫是银背大猩猩经常发出的警告信号。
本文提供了一种名为GTO的新算法,利用猩猩部队的行为来解决优化问题。
2.数学模型
在本节中,受大猩猩群体行为的启发,我们提供了一种新的元启发式算法,称为GTO,其中提出了具体的数学机制,以充分解释探索和开发两个阶段。在GTO算法中,根据大猩猩的行为模拟了五种不同的算子用于优化操作(探索和利用)。
在探索阶段使用了三种不同的操作方法:迁移到一个未知的地方,以增加GTO的探索。第二个操作者,即向其他猩猩迁移,增加了探索和开发之间的平衡。探索阶段的第三个操作符,即向已知位置迁移,可显著提高GTO搜索不同优化空间的能力。另一方面,在开发阶段使用了两个算子,这大大提高了开发阶段的搜索性能。在GTO中,探索和利用的阶段转换过程采用了不同的方法,如图3所示,图3是GTO算法中优化操作过程的概览。
GTO通常遵循以下几条规则来寻找解决方案:
- GTO算法的优化空间包含三种类型的解,其中X称为大猩猩的位置向量,GX为每个阶段创建的大猩猩候选位置向量,如果其性能优于当前解,则进行操作。最后,银背是每次迭代中找到的最佳解决方案。
- 考虑到优化操作所选择的搜索代理数量,整个种群中只有一个银背。
- X、GX、银背三种解准确地模拟了大猩猩在自然界中的社会生活。
- 大猩猩可以通过寻找更好的食物来源或在一个公平和强大的群体中定位来提高自己的力量。在GTO算法中,每次迭代都会产生解,称为GX。如果找到的解决方案是新的 (GX),它将取代当前解决方案 (X)。否则,它将保留在内存中 (GX)。
- 大猩猩的集体生活倾向使它们无法单独生活。因此,它们以群体的形式寻找食物,并继续在银背首领的领导下生活,由银背首领做出所有群体决策。在制定方案阶段,假定种群中最差的方案是大猩猩群体中最弱的成员,大猩猩试图远离最差的方案,向最佳方案(银背)靠拢,从而改善所有大猩猩的处境。
考虑到猩猩在寻找食物时的群体生活和群体共同生活的基本概念,鉴于GTO在许多优化问题中的独特性,该算法可以得到广泛的应用。
GTO算法采用多种机制进行优化操作,具体如下。
2.1 勘探阶段
在本小节中,我们将对GTO中探索阶段的机制进行研究。如果我们考虑到大猩猩群体生活的性质,我们可以得出这样的结论:大猩猩在自然界中以群体的形式生活,在银背大猩猩的统治下,它们服从银背大猩猩;有时大猩猩会离开它们的群体。在离开群体时,大猩猩会迁移到自然界中不同的地方,它们可能在过去遇到过,也可能没有遇到过。在GTO算法中,所有大猩猩都被视为候选解,每个优化运算阶段的最佳候选解都被视为银背大猩猩。我们在探索阶段使用了三种不同的机制,即向未知位置迁移、向已知位置迁移以及向其他大猩猩迁移。这三种机制中的每一种都根据一般程序进行选择。
参数p用于选择向未知地点迁移的机制。当r和p<时,选择第一种机制;当r和p≥0.5时,选择向其它鞘氨醇迁移的机制;当r和p<0.5时,选择向已知位置迁移的机制。根据所使用的机制,每种机制都为GTO算法提供了很好的能力。第一种机制使算法能够很好地监控整个问题空间,第二种机制提高了GTO的探索性能,最后,第三种机制加强了GTO逃离局部最优点的能力。等式(1)用于模拟探索阶段的三种机制。
在等式(1)中,GX(t + 1)是下一次迭代时的大猩猩候选位置向量。X(t)为大猩猩当前位置向量。此外,r1、r2、r3和rand是每次迭代更新的0到1的随机值。p是优化操作前必须给定的参数,取值范围为0-1;该参数决定了选择迁移机制到未知位置的概率。UB和LB分别代表变量的上限和下限。Xr是从整个种群中随机选择的大猩猩群体中的一个成员,GXr.随机选择的大猩猩候选位置向量之一,包括每个阶段更新的位置。最后,C、L和H分别用公式(2)、(4)和(5)计算。
在公式(2)中,It为当前迭代值,MaxIt为执行优化操作的总迭代值,F通过公式(3)计算。式(3)中,cos表示余弦函数,r4为每次迭代更新的0到1的随机值。根据图5,在公式(2)中,优化操作的早期阶段会产生在较大区间内突然变化的值,但在最后阶段该变化区间会减小。L用公式(4)计算,其中l为-1和1范围内的随机值。公式(4)用于模拟银背领导力。在现实世界中,银背大猩猩由于在群体领导的早期阶段缺乏足够的经验,可能无法在寻找食物或控制群体方面做出正确的决策;但是,银背大猩猩在获得足够的经验后,其领导力会变得非常稳定。图5显示了使用公式(2)和(4)的两个独立实现所产生的值的变化。
此外,在公式(1)中,H是通过公式(5)计算的,而在公式(5)中,Z是通过公式(6)计算的,其中Z是问题维数和-C, C范围内的随机值。
图6说明了在探索阶段搜索代理矢量的位置是如何变化的。
在探索阶段结束时,进行分组操作。在探索阶段结束时,计算所有GX解的代价,如果代价为GXt Xt()<(),则将GX(t)解作为X(t)解。因此,该阶段产生的最佳解也被视为银背解。
2.2 开采阶段
在GTO算法的开发阶段,应用了跟随银背大猩猩和争夺成年雌性大猩猩这两种行为。银背大猩猩领导一个群体,做出所有决定,决定群体的行动,并指挥大猩猩寻找食物来源。它还负责群体的安全和福利,群体中的所有大猩猩都要服从银背大猩猩的所有决定。另一方面,银背大猩猩可能会衰弱、衰老并最终死亡,群体中的黑背大猩猩可能会成为群体领袖,或者其他雄性大猩猩可能会与银背大猩猩交战并统治群体。正如利用阶段的两种机制所描述的,可以利用公式(2)中的C值选择跟随银背大猩猩或竞争成年雌性大猩猩。如果C W≥,则选择 "跟随银背 "机制,但如果C W<,则选择 "竞争 "成年雌性。W是优化操作前需要设置的参数。
2.2.1 跟随银背
银背大猩猩刚成立不久,年轻而健康,猩猩群中的其他雄性大猩猩也都很年轻,很好地跟随银背大猩猩。它们也会听从银背的命令,到各个地区寻找食物来源,并跟随银背。此外,大猩猩成员可以影响所有成员的行动。当选择C W≥值时,选择该策略。方程(7)用于模拟这种行为。图7也用来说明这一机制。
在公式(7)中,X(t)为大猩猩位置向量,Xsilverback为银背大猩猩位置向量(最佳解)。此外,L用公式(4)计算,M用公式(8)计算。在公式(8)中,GXi(t)表示每只候选大猩猩在迭代t中的矢量位置,N表示大猩猩的总数,g也用公式(9)估计,在公式(9)中,L也用公式(4)计算。
2.2.2 成年女性比赛
如果C< W ,则第二种机制被用于开发阶段。一段时间后,当年轻的大猩猩进入青春期时,它们会与群体中的其他雄性大猩猩争夺成年雌性,这种争夺往往是暴力的。这种争斗可持续数天,并涉及群体成员。等式(10)用于模拟这种行为。
在公式(10)中,Xsilverback为银背位置矢量(最佳解),X(t)为当前大猩猩位置矢量。Q是模拟冲击力,用公式(11)计算。在公式(11)中,r5为0至1的随机值。确定冲突中暴力程度的系数向量通过公式(12)计算得出。在公式(12)中,β是优化操作前的给定值参数,E用公式(13)估值,同时用于模拟暴力对解决方案维度的影响。如果rand≥0.5,E的值将等于正态分布中的随机值和问题的维数,但如果rand<0.5,E将等于正态分布中的随机值。图 8 用于说明解的变化情况。
在开发阶段结束时,进行群体形成操作,估计所有GX解的成本,如果GX(t)的成本<X(t),则将GX(t)解作为X(t)解,并将整个群体中获得的最佳解视为银背。
3.文件结构
boundaryCheck.m % 边缘检测
GTO.m % 人工大猩猩部队优化算法
initialization.m % 初始化
main.m % 主函数
ObjectiveFunction.m % 目标函数
4.算法流程图
5.伪代码
6.详细代码及注释
6.1 boundaryCheck.m
function [ X ] = BoundaryCheck(X, lb, ub)
for i=1:size(X,1)
FU=X(i,:)>ub;
FL=X(i,:)<lb;
X(i,:)=(X(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;
end
end
6.2 GTO.m
function [Silverback_Score,Silverback,convergence_curve]=GTO(pop_size,max_iter,lower_bound,upper_bound,variables_no,fobj)
% initialize Silverback
Silverback=[];
Silverback_Score=inf;
%Initialize the first random population of Gorilla
X=initialization(pop_size,variables_no,upper_bound,lower_bound);
convergence_curve=zeros(max_iter,1);
for i=1:pop_size
Pop_Fit(i)=fobj(X(i,:));%#ok
if Pop_Fit(i)<Silverback_Score
Silverback_Score=Pop_Fit(i);
Silverback=X(i,:);
end
end
GX=X(:,:);
lb=ones(1,variables_no).*lower_bound;
ub=ones(1,variables_no).*upper_bound;
%% Controlling parameter
p=0.03;
Beta=3;
w=0.8;
%%Main loop
for It=1:max_iter
a=(cos(2*rand)+1)*(1-It/max_iter);
C=a*(2*rand-1);
%% Exploration:
for i=1:pop_size
if rand<p
GX(i,:) =(ub-lb)*rand+lb;
else
if rand>=0.5
Z = unifrnd(-a,a,1,variables_no);
H=Z.*X(i,:);
GX(i,:)=(rand-a)*X(randi([1,pop_size]),:)+C.*H;
else
GX(i,:)=X(i,:)-C.*(C*(X(i,:)- GX(randi([1,pop_size]),:))+rand*(X(i,:)-GX(randi([1,pop_size]),:))); %ok ok
end
end
end
GX = boundaryCheck(GX, lower_bound, upper_bound);
% Group formation operation
for i=1:pop_size
New_Fit= fobj(GX(i,:));
if New_Fit<Pop_Fit(i)
Pop_Fit(i)=New_Fit;
X(i,:)=GX(i,:);
end
if New_Fit<Silverback_Score
Silverback_Score=New_Fit;
Silverback=GX(i,:);
end
end
%% Exploitation:
for i=1:pop_size
if a>=w
g=2^C;
delta= (abs(mean(GX)).^g).^(1/g);
GX(i,:)=C*delta.*(X(i,:)-Silverback)+X(i,:);
else
if rand>=0.5
h=randn(1,variables_no);
else
h=randn(1,1);
end
r1=rand;
GX(i,:)= Silverback-(Silverback*(2*r1-1)-X(i,:)*(2*r1-1)).*(Beta*h);
end
end
GX = boundaryCheck(GX, lower_bound, upper_bound);
% Group formation operation
for i=1:pop_size
New_Fit= fobj(GX(i,:));
if New_Fit<Pop_Fit(i)
Pop_Fit(i)=New_Fit;
X(i,:)=GX(i,:);
end
if New_Fit<Silverback_Score
Silverback_Score=New_Fit;
Silverback=GX(i,:);
end
end
convergence_curve(It)=Silverback_Score;
fprintf("In Iteration %d, best estimation of the global optimum is %4.4f \n ", It,Silverback_Score );
end
6.3 initialization.m
% This function initialize the first population of search agents
function [ X ]=initialization(N,dim,ub,lb)
Boundary_no= size(ub,2); % numnber of boundaries
% If the boundaries of all variables are equal and user enter a signle
% number for both ub and lb
if Boundary_no==1
X=rand(N,dim).*(ub-lb)+lb;
end
% If each variable has a different lb and ub
if Boundary_no>1
for i=1:dim
ub_i=ub(i);
lb_i=lb(i);
X(:,i)=rand(N,1).*(ub_i-lb_i)+lb_i;
end
end
6.4 main.m
clear all
close all
clc
% Population size and stoppoing condition
pop_size=30;
max_iter=100;
% Define your objective function's details here
fobj = @ObjectiveFunction;
variables_no=10;
lower_bound=-100; % can be a vector too
upper_bound=100; % can be a vector too
[Silverback_Score,Silverback,convergence_curve]=GTO(pop_size,max_iter,lower_bound,upper_bound,variables_no,fobj);
figure
% Best optimal values for the decision variables
subplot(1,2,1)
parallelcoords(Silverback)
xlabel('Decision variables')
ylabel('Best estimated values ')
box on
% Best convergence curve
subplot(1,2,2)
plot(convergence_curve);
title('Convergence curve of GTO')
xlabel('Current_iteration');
ylabel('Objective value');
box on
6.5 ObjectiveFunction.m
function o = ObjectiveFunction(x)
% change this file according to your objective function
o=sum(x.^2);
end
7.运行结果
8.参考文献