群体智能优化算法-算术优化算法(Arithmetic Optimization Algorithm, AOA,含Matlab源代码)

摘要

算术优化算法(Arithmetic Optimization Algorithm, AOA)是一种新颖的群体智能优化算法,灵感来源于加、减、乘、除四种基本算术运算。在优化过程中,AOA 通过乘除操作实现全局探索,通过加减操作强化局部开发,兼顾了算法的全局搜索能力和局部收敛速度。本文系统介绍了 AOA 的核心机制、数学建模,并提供完整的 MATLAB 代码,包含详细中文注释,适合用于科学研究、函数测试与工程优化等场景。

一、算法原理详解

1.1 AOA 设计思想

AOA 将群体智能算法的搜索过程类比为一组算术计算,个体的位置更新由四种算术行为控制:

  • 加法 & 减法 → 小范围微调 → 强化开发能力
  • 乘法 & 除法 → 大范围变动 → 增强探索能力

整个搜索行为在不同阶段由控制因子逐步转变为开发导向,提升全局收敛性能。

1.2 核心数学模型与公式

(1)加速函数 MOA(Modulation of Arithmetic)

用于动态调节算术行为执行概率。其数学形式为:

(2)概率比 MOP(Math Optimizer Probability)

用于控制乘除(探索)和加减(开发)的选择:

α:指数控制因子,一般取值为 5

(3)位置更新策略

探索阶段(乘除)公式:

开发阶段(加减)公式:

二、AOA 完整 MATLAB 实现

Matlab 复制代码
function [Best_FF,Best_P,Conv_curve]=AOA(N,M_Iter,LB,UB,Dim,F_obj)
% 算术优化算法 AOA 实现
% N         :种群大小
% M_Iter    :最大迭代次数
% LB, UB    :变量上下界
% Dim       :问题维度
% F_obj     :目标函数句柄

% 初始化最优解记录
Best_P = zeros(1,Dim);
Best_FF = inf;
Conv_curve = zeros(1,M_Iter); % 收敛曲线记录

% 初始化种群
X = initialization(N,Dim,UB,LB);
Xnew = X;

Ffun = zeros(1,N);      % 当前适应度值
Ffun_new = zeros(1,N);  % 更新适应度值

% 参数设定
MOP_Max = 1;
MOP_Min = 0.2;
Alpha = 5;      % 控制 MOP 的下降曲率
Mu = 0.499;     % 缩放系数

% 初始适应度评估
for i = 1:N
    Ffun(i) = F_obj(X(i,:));
    if Ffun(i) < Best_FF
        Best_FF = Ffun(i);
        Best_P = X(i,:);
    end
end

% 主迭代过程
for C_Iter = 1:M_Iter
    % 更新加速函数和概率因子
    MOP = 1 - ((C_Iter)^(1/Alpha) / (M_Iter)^(1/Alpha));
    MOA = MOP_Min + C_Iter*((MOP_Max - MOP_Min)/M_Iter);

    for i = 1:N
        for j = 1:Dim
            r1 = rand();
            if size(LB,2) == 1
                % 所有变量统一上下界
                base = (UB - LB)*Mu + LB;
                if r1 < MOA
                    if rand() > 0.5
                        Xnew(i,j) = Best_P(j)/(MOP+eps) * base;
                    else
                        Xnew(i,j) = Best_P(j)*MOP * base;
                    end
                else
                    if rand() > 0.5
                        Xnew(i,j) = Best_P(j) - MOP * base;
                    else
                        Xnew(i,j) = Best_P(j) + MOP * base;
                    end
                end
            else
                % 每个变量单独上下界
                base = (UB(j) - LB(j))*Mu + LB(j);
                if r1 < MOA
                    if rand() > 0.5
                        Xnew(i,j) = Best_P(j)/(MOP+eps) * base;
                    else
                        Xnew(i,j) = Best_P(j)*MOP * base;
                    end
                else
                    if rand() > 0.5
                        Xnew(i,j) = Best_P(j) - MOP * base;
                    else
                        Xnew(i,j) = Best_P(j) + MOP * base;
                    end
                end
            end
        end

        % 边界处理
        Xnew(i,:) = min(max(Xnew(i,:), LB), UB);

        % 适应度评估并更新个体
        Ffun_new(i) = F_obj(Xnew(i,:));
        if Ffun_new(i) < Ffun(i)
            X(i,:) = Xnew(i,:);
            Ffun(i) = Ffun_new(i);
        end

        % 更新全局最优
        if Ffun(i) < Best_FF
            Best_FF = Ffun(i);
            Best_P = X(i,:);
        end
    end

    % 记录收敛曲线
    Conv_curve(C_Iter) = Best_FF;
end
end

%% 初始化函数
function X = initialization(N,Dim,UB,LB)
B_no = size(UB,2);
if B_no == 1
    X = rand(N,Dim).*(UB-LB)+LB;
else
    for i = 1:Dim
        X(:,i) = rand(N,1).*(UB(i)-LB(i))+LB(i);
    end
end
end

三、总结

算术优化算法(AOA)以基本的加、减、乘、除行为为核心设计灵感,通过引入概率控制函数(MOP)与加速调节因子(MOA),实现了从全局搜索到局部收敛的自然过渡。相比传统元启发式方法,AOA 结构简洁、易于实现且具有优越的全局优化能力,非常适合函数测试、工程建模和科学研究中的参数优化任务。本文详细阐述了其工作机制、数学模型及 MATLAB 实现,适合用于学术论文实验支撑、优化算法框架扩展等应用。

相关推荐
AngelPP8 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年8 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼9 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS9 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区10 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈10 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang11 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx
颜酱12 小时前
单调栈:从模板到实战
javascript·后端·算法
shengjk112 小时前
NanoClaw 深度剖析:一个"AI 原生"架构的个人助手是如何运转的?
人工智能