【智能优化算法】爱情进化算法(Love Evolution Algorithm,LEA)

文摘   2024-08-14 22:02   湖南  

爱情进化算法(Love Evolution Algorithm,LEA)是期刊“The Journal of Supercomputing”的2024年智能优化算法

01.引言

爱情进化算法(LEA)是一种受刺激-价值-角色理论启发的新型进化算法。LEA的优化过程包括刺激、价值和作用三个阶段。

02.优化算法的流程

恋爱是一个人在其一生中能够自主、自愿、自由地建立的亲密关系,是异性或同性之间爱慕的一种表达。1970年,美国心理学家Murstein提出了一种影响深远的人际关系心理学理论:刺激-价值-角色(stimulus-value-role, SVR)理论[7]。SVR理论将恋爱(婚姻选择)分为三个阶段,分别是刺激阶段、价值阶段和角色阶段。刺激阶段包括通过视觉、听觉和非互动手段实现的价值满足。价值阶段包括通过言语互动欣赏的价值。角色阶段包括夫妻双方在相互分配的角色中发挥作用的能力。

在每一段关系中,无论是失败还是成功,双方都或多或少地发生了变化。这种变化可能是积极的,也可能是消极的。然而,不可否认的是,在寻找爱情的道路上,我们在思想、观念等方面或多或少都取得了进步。SVR理论提供了一个重要的视角为我们解释相遇-相爱-相处的分析路径。这也启发了恋爱的过程与元启发式算法的优化过程有一些相似之处。不同的人有不同的气质、个性、爱好等等。在本文中,这些被统一称为一个人的特征。然后,将某一特征抽象为某一维度的变量。显然,夫妻双方在恋爱过程中的幸福感与这些特征密切相关。因此,一个人所拥有的全部特征被抽象成一个候选解决方案。这些特征的结合影响着一个人的方方面面,决定着一个人的幸福。因此,幸福度将某一特定人的问题抽象为某一特定候选解的目标函数值。在恋爱的过程中,人的性格会进步。因此,历史上最优秀人物的特征被比喻为最佳解决方案。然后,一个特定的最佳特性可以被比作最佳解的一个特定变量。受支持向量回归理论的启发,本文算法的优化过程分为三个阶段:刺激阶段、值阶段和角色阶段。不可避免地,分手会在这三个阶段发生。分手后,双方都会反思和改进。这种情况被抽象为反射操作。优化过程结构如图所示。

03.论文中算法对比图

04.本代码效果图





05.部分代码

function [H_G,G, CV] = LEA (N,MaxFEs,lb,ub,dim,fun)%% InitializationCV  = zeros (1, MaxFEs);                 % Convergence curves[X,lb,ub] = Initialization(N,dim,ub,lb); % Initialize the populationFE = 0;                                  % Number of function evaluationsH =  zeros (N, 1);                       % The happiness degreesH_G = inf;                               % The best valuefor 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 settingsh_max = 0.7;h_min = 0;lambda_c = 0.5;lambda_p = 0.5;%% Main loopwhile 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];endend% 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;endCV(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;endCV(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;endCV(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;endCV(FE) = hG;end
下载链接:https://mbd.pub/o/bread/ZpmZm5Zy
或点击阅读原文

MATLAB科研小白
信号处理方向在校博士研究生,目前专研于MATLAB算法及科学绘图等,熟知各种信号分解算法、神经网络时序预测算法、数据拟合算法以及滤波算法。提供一个可以相互学习相互进步的平台
 最新文章