2024年JCR2区新算法:爱情进化算法(LEA),MATLAB代码免费获取

爱情进化算法(Love Evolution Algorithm,LEA)是一种全新的元启发式优化算法,该算法受刺激-价值-角色理论的启发,并在其基础上进行了改进。LEA最引人注目的特点之一是其独特的搜索操作,包括变量间的卷积、交叉以及乘法和除法的变异,具有进化能力强、搜索速度快、寻优能力强的特点。该成果于2024年发表在知名SCI期刊The Journal of Supercomputing上。

b24208b61a9eb203f65599ee22ff7b58.png

在一个头脑风暴的过程中,通常会涉及到三种人,即主持人、问题负责人和一组头脑风暴人员。主持人主要是为了引导头脑风暴过程顺利进行而不带偏见,这意味着一个有主持经验但不了解问题的主持人将是首选;头脑风暴小组是指在主持人的引导下,通过头脑风暴过程实际产生想法的一群人;问题所有者负责在每一轮创意生成中挑选他们认为更好的创意。一般来说,每一个头脑风暴的过程都要经过三轮的想法产生过程,因为经过三轮的想法产生过程,人就会筋疲力尽,效率也就不高了。

刺激-价值-角色(SVR)理论将恋爱分为三个阶段,分别是刺激阶段、价值阶段和角色阶段。刺激阶段包括通过视觉、听觉和非互动手段实现的价值满足。价值阶段包括通过言语互动欣赏的价值。LEA的搜索过程包括三个不同的阶段:刺激阶段、价值阶段和角色阶段,该算法流程图如下。

35667f7a7a8170aa4d176126ad4618b1.png

1、算法原理

(1)初始化

优化问题通常由一组决策变量、约束和目标函数组成。可以假设决策变量的数量为d,并且变量的上限和下限分别为1行和d列。函数求值的最大数量(MaxFE)表示为T。既然恋爱中的人数是两个,那么人口中的人数应该是偶数。这并不妨碍优化,因此为该算法指定偶数个人n是合理的。初始时刻的人口如下:

其中,n是由0和1之间的随机数组成的n行d列的矩阵。那么n是一个n行d列的矩阵。其矩阵形式为

以最小化问题为例,每个人的幸福度为0。数字越小,人们越快乐。然后,历史上最优秀的人的特征被定义为:

其中min(·)是取最小值的函数,find(·)是获取H和min(H)的相等值的索引的函数。

(2)邂逅

考虑到人们相识的随机性以及这种随机性可能能够增加所提出的算法的多样性的事实。在遭遇战中使用随机策略,即,浪漫的伴侣是随机产生的。生成方法如下:

8ddbacd790243ee2c1d7254ca74dd833.png

其中,randperm(d)表示生成1到d的随机整数排列;而randperm和randperm分别是恋爱伴侣A和B的索引。那么,可以将A和B表示为:

显然,Ai和Bi是一对,i = 1,2,...n/2。这样,人口被分为两部分。

(3)刺激阶段

在刺激阶段,双方都受到各自外表、行为和个性的刺激。在这一阶段的理解通常是肤浅的,几乎不可能影响各自的特性。因此,这一阶段不涉及特征的更新。换句话说,没有候选解决方案被更新。

然而,在这一阶段,提出了一个接受度来衡量合作伙伴之间在刺激阶段的契合度。由于这一阶段双方对彼此的认识是肤浅的,没有深入探索“特征”的知识,所以接受度只考虑与目标函数值的接近程度。接受度c定义为:

5013a876a746958a61b21969efca66c8.png

式中rc是n∕2行1列由0.5 ~ 1.5个随机数组成的向量;HA和HB为A和B的幸福度(n∕2行1列);

Max(·)是取最大值的函数,rc确保幸福感差异较小的合作伙伴也有可能进行反思操作,而幸福感差异较大的合作伙伴有可能进入下一阶段。这种操作有利于多样性。当接受度大于0.5时,认为双方分手,进行反思操作;否则,则认为双方继续相爱,进入价值阶段。

(4)反思阶段

分手后,夫妻对第j个特征的反思应该在第j个特征本身。这种行为如下公式定义:

式中 ,表示第i个特征的自反射算子,和均为−1.5 ~ 1.5之间的随机数。第j个特征的增强可能与除第j个特征外的其他特征有关。一个鼓舞人心的例子是,如果一个人性格安静(一个特点),那么他的爱好画(另一个特点)可能是山水画;如果这个人是一个狂热的人物(一个特征),那么他的爱好绘画(另一个特征)可能是疯狂和抽象的。这种行为的公式如下式所示。

其中,z和k是从1到d的随机整数。

6811b49f9a79255b6c3f0bbcc2db561c.png

(5)价值阶段

当接受度小于0.5时,合作伙伴进入价值阶段。价值阶段将考虑更深层次的思想和行为,这涉及到特征的变化。下式使用卷积来定义卷积算子。

由[Aij,Gj]和[Gj,Bij]的卷积得到的卷积算子可以具体表示为:

(6)接受度

在价值阶段之后,定义接受度,以确定哪些情侣能够进入角色阶段。

b253d5cd2abd37484f0255b9eb8151d0.png

(7)角色阶段

角色阶段的激励行为是分配角色和相互补充。双方或多或少都希望对方扮演他们想象中的某个角色。考虑到这种行为,下式中定义了作用于特征的角色算子。

其中h为收敛因子,其定义如下式。

其中hmax和hmin为收敛常数,t为函数求值次数(FEs)。由分析可知,h是一个随t线性递减的函数。


2、结果展示

4cc8dd6b16180869e33409b5126ca5c6.png

3、MATLAB核心代码

function [H_G,G, CV] = LEA (N,MaxFEs,lb,ub,dim,fun)
%% Initialization
CV  = zeros (1, MaxFEs);                 % Convergence curves
[X,lb,ub] = Initialization(N,dim,ub,lb); % Initialize the population
FE = 0;                                  % Number of function evaluations
H =  zeros (N, 1);                       % The happiness degrees
H_G = inf;                               % The best value

for i = 1:N
    H(i) = fun (X(i,:));
    FE = FE+1;
    if H_G>H(i)
        H_G = H(i,:);
        G = X(i,:);                      % The best solution
    end
    CV(FE) = H_G;
end
% Parameter settings
h_max = 0.7;
h_min = 0;
lambda_c = 0.5;
lambda_p = 0.5;
%% Main loop
while FE<MaxFEs
    h = (1-FE/MaxFEs)*(h_max-h_min)+h_min; %Eq. (17)
    %% Encounter
    % Eqs. (4) and (5)
    r = randperm(N);
    A = X(r(1:N/2),:);
    B = X(r(N/2+1:end),:);
    H_A = H(r(1:N/2));
    H_B = H(r(N/2+1:end));
    %% Stimulus phase
    c = Gap_P(H_A,H_B); % Eq. (6)
    mu = sum(sqrt(sum((X-G).^2)/N))/dim + eps; % Eq. (10)
    for i = 1:N/2
        if c(i)<lambda_c
            %% Value phase
            for j = 1:dim
                % Eq. (11)/(12)
                phi1 = G(:,j)*A(i,j);
                phi2 = G(:,j)^2 + A(i,j)*B(i,j);
                phi3 = G(:,j)*B(i,j);
                % Eq. (13)
                rho_A = sqrt((phi2-phi1)^2);
                rho_B = sqrt((phi2-phi3)^2);
                % Eq. (14)
                A(i,j) = rand* A(i,j) + randn*rho_A;
                B(i,j) = rand* B(i,j) + randn*rho_B;
            end
            % Eq. (19)
            FE = FE+1;if FE>MaxFEs;break;end
            [A(i,:),H_A(i),G,H_G,CV]=Update_A_mod(A(i,:),CV,FE,G,H_G,ub,lb,fun);
            FE = FE+1;if FE>MaxFEs;break;end
            [B(i,:),H_B(i),G,H_G,CV]=Update_B_mod(B(i,:),CV,FE,G,H_G,ub,lb,fun);

            p(i) = (rand+0.5)*c(i)*sum(sqrt((A(i,:)-B(i,:)).^2))/(dim*mu); % Eq. (15)
            if p(i)<lambda_p
                %% Role phase
                % Eq. (16)
                xi = A(i,:).*B(i,:);
                xi = (xi-min(xi))/(max(xi)-min(xi) + eps) + h;
                for j = 1:dim
                    % Eq. (18)
                    A(i,j) = G(:,j) + randn*mu*xi(j);
                    B(i,j) = G(:,j) + randn*mu*xi(j);
                end
            else
                %% Reflection operation
                for j = 1:dim
                    % Eq. (7)
                    sA = (3*rand-1.5)*(A(i,j)/(B(i,j) + eps));
                    sB = (3*rand-1.5)*(B(i,j)/(A(i,j) + eps));
                    % Eq. (8)
                    z = randi(dim);
                    k = randi(dim);
                    delta = 0.5*(A(i,z)/(ub(z)-lb(z)) + B(i,k)/(ub(k)-lb(k)));
                    % Eq. (9)
                    A(i,j) = G(:,j) + sA*mu*delta;
                    B(i,j) = G(:,j) + sB*mu*delta;
                end
            end
        else
            %% Reflection operation
            for j = 1:dim
                % Eq. (7)
                sA = (3*rand-1.5)*(A(i,j)/(B(i,j) + eps));
                sB = (3*rand-1.5)*(B(i,j)/(A(i,j) + eps));
                % Eq. (8)
                z = randi(dim);
                k = randi(dim);
                % Eq. (9)
                delta = 0.5*(A(i,z)/(ub(z)-lb(z)) + B(i,k)/(ub(k)-lb(k)));
                A(i,j) = G(:,j) + sA*mu*delta;
                B(i,j) = G(:,j) + sB*mu*delta;
            end
        end
        % Eq. (20)
        FE = FE+1;if FE>MaxFEs;break;end
        [A(i,:),H_A(i),G,H_G,CV]=Update_A_ordinary(A(i,:),CV,FE,G,H_G,ub,lb,fun);
        FE = FE+1;if FE>MaxFEs;break;end
        [B(i,:),H_B(i),G,H_G,CV]=Update_B_ordinary(B(i,:),CV,FE,G,H_G,ub,lb,fun);
    end
    X = [A;B];
    H = [H_A;H_B];
end
end

% Eq. (6)
function p = Gap_P(f1,f2)
p = (0.5+rand(length(f1),1)).*(f1-f2).^2;
p = p./(max(p)+min(p)+eps);
end

% Eq. (20)
function [Ax,Ah,G,hG,CV]=Update_A_ordinary(Ax,CV,FE,G,hG,ub,lb,fun)
AubE = Ax>ub;
AlbE = Ax<lb;
Ax(:,AubE) = ub(AubE);
Ax(:,AlbE) = lb(AlbE);
Ah = fun (Ax);

if hG>Ah
    hG = Ah;
    G = Ax;
end
CV(FE) = hG;
end

% Eq. (20)
function [Bx,Bh,G,hG,CV]=Update_B_ordinary(Bx,CV,FE,G,hG,ub,lb,fun)
BubE = Bx>ub;
BlbE = Bx<lb;
Bx(:,BubE) = ub(BubE);
Bx(:,BlbE) = lb(BlbE);
Bh = fun (Bx);

if hG>Bh
    hG = Bh;
    G = Bx;
end
CV(FE) = hG;
end

% Eq. (19)
function [Ax,Ah,G,hG,CV]=Update_A_mod(Ax,CV,FE,G,hG,ub,lb,fun)
AubE = Ax>ub;
AlbE = Ax<lb;
Ax(:,AubE) = mod(Ax(:,AubE),ub(AubE)+eps)./(ub(AubE)+eps).*(ub(AubE)-lb(AubE)) + lb(AubE);
Ax(:,AlbE) = mod(Ax(:,AlbE),lb(AlbE)+eps)./(lb(AlbE)+eps).*(ub(AlbE)-lb(AlbE)) + lb(AlbE);
Ah = fun (Ax);

if hG>Ah
    hG = Ah;
    G = Ax;
end
CV(FE) = hG;
end

% Eq. (19)
function [Bx,Bh,G,hG,CV]=Update_B_mod(Bx,CV,FE,G,hG,ub,lb,fun)
BubE = Bx>ub;
BlbE = Bx<lb;
Bx(:,BubE) = mod(Bx(:,BubE),ub(BubE)+eps)./(ub(BubE)+eps).*(ub(BubE)-lb(BubE)) + lb(BubE);
Bx(:,BlbE) = mod(Bx(:,BlbE),lb(BlbE)+eps)./(lb(BlbE)+eps).*(ub(BlbE)-lb(BlbE)) + lb(BlbE);
Bh = fun (Bx);

if hG>Bh
    hG = Bh;
    G = Bx;
end
CV(FE) = hG;
end

参考文献

[1] Gao Y, Zhang J, Wang Y, et al. Love Evolution Algorithm: a stimulus–value–role theory-inspired evolutionary algorithm for global optimization[J]. The Journal of Supercomputing, 2024: 1-62.

完整代码获取方式:后台回复关键字:

TGDM866

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值