2024年最新算法:青蒿素优化算法(Artemisinin Optimization Algorithm, AOA)原理介绍

青蒿素优化算法(Artemisinin Optimization Algorithm, AOA)是2024年提出的一种受青蒿素抗疟疾特性启发的元启发式优化算法。青蒿素是一种从中草药青蒿中提取的化合物,因其在治疗疟疾方面的显著效果而闻名。AOA算法的设计者将青蒿素的这一特性抽象为优化策略,用于解决工程和科学中的优化问题。

1.算法原理

青蒿素优化算法的核心思想是模拟青蒿素在体内的分布和作用机制,通过模仿其在对抗疟疾时的搜索和攻击策略来寻找问题的最优解。算法中的每个解被视为一个"青蒿素分子",而搜索空间则相当于疟疾病原体所在的环境。

2.算法描述:

  • 搜索代理(Search Agents):在AO算法中,每个搜索代理代表了一个潜在的解决方案,它们在解空间中搜索最优解。
  • 适应度评估(Fitness Evaluation):根据问题的具体目标,评估每个搜索代理的性能。
  • 全面消除策略(Comprehensive Elimination Strategy) :通过模拟药物扩散,引导搜索代理进行全局探索,以快速识别解空间中的潜在区域。
  • 局部清除策略(Local Clearance Strategy) :在全面消除后,算法转向局部搜索,以精细化搜索过程并提高解的质量。

  • 后期巩固策略(Post-Consolidation Strategy) :为了应对可能的复发,通过特定的机制增强算法的多样性,避免过早收敛。

  • 概率系数(Probabilistic Coefficient):引入概率系数来模拟患者对药物的不同反应,增加算法的适应性和灵活性。

  • 信息交叉(Information Crossover):在后期巩固阶段,通过信息交叉机制,增强搜索代理的探索能力,以逃离局部最优。

3.算法流程:

  1. 初始化阶段(Initialization Phase)

    • 随机初始化一组搜索代理(agents),这些代理构成了算法的解空间。
    • 评估每个代理的适应度(fitness),并找出当前最优解。
  2. 全面消除阶段(Comprehensive Elimination Phase)

    • 模拟青蒿素在治疗初期的高剂量给药,以快速减少疟原虫数量。
    • 更新搜索代理的位置,模拟药物在人体内的扩散,调整搜索步长。
  3. 局部清除阶段(Local Clearance Phase)

    • 模拟治疗中后期降低药物剂量,以清除剩余的疟原虫。
    • 通过更新策略,使算法在已知区域内进行精确解的搜索,增强局部开发能力。
  4. 后期巩固阶段(Post-Consolidation Phase)

    • 考虑到疾病复发的可能性,引入策略以增强算法逃离局部最优的能力。
    • 通过信息交叉(information crossover)等机制,防止算法陷入局部最优。
  5. 迭代更新(Iteration Update)

    • 在每次迭代中,根据上述三个阶段的策略更新搜索代理的位置。
    • 评估新的适应度值,并更新最优解。
  6. 终止条件(Termination Condition)

    • 当达到最大迭代次数或其他预设的终止条件时,算法停止。
    • 返回找到的最优解。

4.算法特点

  • 自适应性:AOA算法能够根据搜索进程动态调整搜索策略,以适应不同阶段的优化需求。
  • 鲁棒性:由于其模仿的青蒿素作用机制,AOA算法在面对复杂和多变的优化问题时表现出较好的鲁棒性。
  • 简单性:算法的实现相对简单,易于编码和调整,适用于各种优化问题。

5.核心代码

bash 复制代码
%--------------------------------------------------------------------------
% 🌿🦟 Artemisinin Optimization (AO) 🦟🌿
% Artemisinin Optimization based on Malaria Therapy: Algorithm and Applications to Medical Image Segmentation

% 📚 Reference:
% Chong Yuan, Dong Zhao, Ali Asghar Heidari, Lei Liu, Yi Chen, Zongda Wu, Huiling Chen,
% "Artemisinin Optimization based on Malaria Therapy: Algorithm and Applications to Medical Image Segmentation",
% Displays, Elsevier, 2024.
function [Leader_pos,bestfitness,Convergence_curve]=AO(fobj,lb,ub,dim,N,MaxFEs)
% Initialization parameters
FEs=0;
it=1;
%% Initialization of the solution set
pop=initialization(N,dim,ub,lb);
%Calculate the fitness value of the initial solution set
for i=1:N
    Fitness(i)=fobj(pop(i,:));
    FEs=FEs+1;
end
[fmin,x]=min(Fitness);
%Container
New_pop=zeros(N,dim);
Fitnorm=zeros(1,N);
Convergence_curve=[];
%Record the current optimal solution
best=pop(x,:);
bestfitness=fmin;
%% Main loop
while FEs<=MaxFEs
    
    K= 1-((FEs)^(1/6)/(MaxFEs)^(1/6));
    E =1*exp(-4*(FEs/MaxFEs));
    %
    for i=1: N
        Fitnorm(i)= (Fitness(i)-min(Fitness))/(max(Fitness)-min(Fitness));
        for j=1:dim
            if rand<K
                if rand<0.5
                    New_pop(i,j) = pop(i,j)+E.*pop(i,j)*(-1)^FEs;
                else
                    New_pop(i,j) = pop(i,j)+E.*best(j)*(-1)^FEs;
                end
            else
                New_pop(i,j)=pop(i,j);
            end
            if rand<Fitnorm(i)
                A=randperm(N);
                beta=(rand/2)+0.1;
                New_pop(i,j)=pop(A(3),j)+beta.*(pop(A(1),j)-pop(A(2),j)); 
            end
        end
        
        New_pop(i,:)=Mutation(New_pop(i,:),pop(i,:),best,dim);
        New_pop(i,:)=Transborder_reset(New_pop(i,:),ub,lb,dim,best);
        
        tFitness=fobj(New_pop(i,:));
        FEs=FEs+1;
        if tFitness<Fitness(i)
            pop(i,:)= New_pop(i,:);
            Fitness(i)=tFitness;
        end
    end
    
    [fmin,x]=min(Fitness);
    if fmin<bestfitness
        best=pop(x,:);
        bestfitness=fmin;
    end
    
    Convergence_curve(it)=bestfitness;
    Leader_pos=best;
    it=it+1;
end
end

6.参考文献

[1] Yuan C , Zhao D , Heidari A A ,et al.Artemisinin optimization based on malaria therapy: Algorithm and applications to medical image segmentation[J].Displays, 2024, 84.DOI:10.1016/j.displa.2024.102740.

相关推荐
闻缺陷则喜何志丹10 分钟前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
Lenyiin29 分钟前
01.02、判定是否互为字符重排
算法·leetcode
鸽鸽程序猿44 分钟前
【算法】【优选算法】宽搜(BFS)中队列的使用
算法·宽度优先·队列
Jackey_Song_Odd1 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
乐之者v1 小时前
leetCode43.字符串相乘
java·数据结构·算法
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
古希腊掌管学习的神2 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
云边有个稻草人2 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
半盏茶香2 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法