✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
许多优化问题可以使用元启发法而不是确定性和启发式方法来解决。本研究提出了一种新颖的基于群体的元启发式算法,称为指数分布优化器(EDO)。EDO的主要灵感来自于基于指数概率分布模型的数学。首先,我们初始化代表多个指数分布模型的随机解决方案群体。每个解中的位置代表指数随机变量。所提出的算法包括两种开发和探索策略的方法。在开发阶段,该算法利用三个主要概念:无记忆特性、引导解和指数随机变量之间的指数方差来更新当前解。为了模拟无记忆特性,我们假设原始群体仅包含获得良好适应度的获胜者。我们构建了另一个称为无记忆的矩阵,以保留新生成的解决方案,而不管它们与原始群体中相应的获胜者相比的适应性如何。因此,无记忆矩阵存储两种类型的解决方案:赢家和输家。根据无记忆特性,我们忽略也不记住这些解决方案之前的历史,因为过去的失败是独立的,对未来没有影响。因此,失败者可以为下次更新新的解决方案做出贡献。我们从指数分布派生的原始总体中选择两个解决方案,以在整个探索阶段更新新的解决方案。此外,除了进化计算大会 (CEC) 2014、CEC 2017、CEC 2020 和 CEC 2022 基准以及六个工程设计问题之外,EDO 还针对经典测试函数进行了测试。EDO 与 CEC 2014、CEC 2017 和 CEC 2020 的获胜者分别为 L-SHADE、LSHADE−cnEpSin 和 AGSK 进行比较。EDO 揭示了令人兴奋的结果,可以成为 CEC 竞赛的强大工具。统计分析证明了所提出的 EDO 在 95% 置信区间的优越性。EDO 揭示了令人兴奋的结果,可以成为 CEC 竞赛的强大工具。统计分析证明了所提出的 EDO 在 95% 置信区间的优越性。EDO 揭示了令人兴奋的结果,可以成为 CEC 竞赛的强大工具。统计分析证明了所提出的 EDO 在 95% 置信区间的优越性。
⛄ 部分代码
%_______________________________________________________________________________________%
% Exponential Distribution Optimizer (EDO) % %
% Developed in MATLAB R2022a %
%_______________________________________________________________________________________%
clc
clear all
NP = 30;
Max_iter=1666;
runs=30;
benchmarksType = 1;
if benchmarksType == 1
maxFunc = 9;
elseif benchmarksType == 2
maxFunc = 15;
elseif benchmarksType == 3
maxFunc = 27;
elseif benchmarksType == 4
maxFunc = 17;
else
exit;
end
time=[];
EDO_algor=zeros(runs, Max_iter);
EDO_algo=zeros(1,runs);
for fn=1:maxFunc
Function_name=strcat('F',num2str(fn));
if benchmarksType == 1
[LB,UB,Dim,F_obj]=unimodalFixedDim(Function_name);
elseif benchmarksType == 2
[LB,UB,Dim,F_obj]=unimodalVariableDim(Function_name);
elseif benchmarksType == 3
[LB,UB,Dim,F_obj]=multimodalFixedDim(Function_name);
elseif benchmarksType == 4
[LB,UB,Dim,F_obj]=multimodalVariableDim(Function_name);
end
fprintf(['benchmark \t',num2str(benchmarksType),'\t','Function_name\t',Function_name]);
for i=1:1:runs
tic()
[EDO_BestFitness,EDO_Bestsol]=EDO(NP,Max_iter,LB,UB,Dim,F_obj);
EDO_time=toc;
time=[time;EDO_time];
EDO_algo(i)=EDO_BestFitness;
end
% performance measures
EDO_std=std(EDO_algo);%EDO
EDO_Mean=mean(EDO_algo);
EDO_best=min(EDO_algo);
EDO_worst=max(EDO_algo);
fprintf('\tEDO\n');
fprintf(['Best\t',num2str(EDO_best,20),'\n']);
fprintf(['Worst\t',num2str(EDO_worst,20),'\n']);
fprintf(['Mean\t',num2str(EDO_Mean,20),'\n']);
fprintf(['STD\t',num2str(EDO_std,20),'\n\n']);
for i=1:runs
fprintf(['\t',num2str(EDO_algo(i),20),'\n']);
end
end
⛄ 运行结果
⛄ 参考文献
Abdel-Basset, M., El-Shahat, D., Jameel, M., & Abouhawwash, M. (2023). Exponential distribution optimizer (EDO): a novel math-inspired algorithm for global optimization and engineering problems. Artificial Intelligence Review, 1-72. DOI: Exponential distribution optimizer (EDO): a novel math-inspired algorithm for global optimization and engineering problems | SpringerLink