咨询服务热线:400-123-4567
发布日期:2024-04-15 12:41:01阅读:次
现代优化算法建议用Matlab实现,视频资料少,文字资料是很多的啊。需要学会基本原理,调试先从简单实例开始调试,没问题了,再借助Matlab里帮助研究如何调参数。
建模书推荐:
1.《数学建模》(美)Frank R.Giordano 等著 叶其孝 姜启源 等译 2.《数学模型》 : 姜启源 这两本侧重引导怎么一步步分析问题,建立数学模型。 3. 《数学建模算法与应用》司守奎,电子版更全面, 4. 我们正在编写的《数学建模与数学实验》,吴刚,张敬信等,即将出版 这两本侧重建模算法的计算机编程实现,应该说我们的书更优秀,敬请期待! 可以关注我的知乎专栏·「数学建模与数学实验」- https://zhuanlan.zhihu.com/ZhangJingxin?utm_source=qq&utm_medium=social 会陆续贴部分内容
我建议不要看蚁群算法,我们用C++写的算法,一个星期调试好后,Debug用了一年的时间。其中输入敏感很大程度上阻碍了算法优化进展,因为完全不知道错误是由输入引发的。举个例子直线上100个随机点无法计算,直线上100个等距点可以计算。然而平面上100个随机点计算是没有问题的,至今我们不能理解为什么直线上100个随机点无法计算的问题。
其次,蚁群算法后期收敛很慢,10000次迭代可能8000次都是停滞在局部优解。100个点规模的问题,计算一般需要几分钟(单核)才能做到比较好的结果。后期速度慢是蚁群算法很大的一个缺点。
遗传 神经网络的资料更多,应用也更加广泛应该学习这两个。
沙丁鱼优化算法(Sardine optimization algorithm, SOA)由Zhang HongGuang等人于2023年提出,该算法模拟沙丁鱼的生存策略,具有搜索能力强,求解精度高等特点。
沙丁鱼主要摄食浮游生物,沙丁鱼摄食的浮游生物种类如下:细菌、腔肠动物、软体动物、原生动物、十足目、幼小藤壶、鱼卵、甲藻、桡足类等。沙丁鱼的季节饵料组成随水文条件而变化。在上升流剧烈的时期,饵料组成以浮游植物为主;而在上升流微弱的时期,饵料组成以浮游动物为主。沙丁鱼是滤食动物,它们通过鳃过滤海水,捕获通过鳃的浮游生物。另外沙丁鱼拥有透镜眼,透镜眼大大提高了分辨率和图像亮度。因此它们也可以利用自己的视力追踪在水中过滤的猎物。除了和大多数鱼类一样借助较快的游动速度逃离外,沙丁鱼也会利用群体行为以躲避捕猎者。例如遇到捕食沙丁鱼的海豚时,沙丁鱼则以聚成大群的方式来对抗海豚的捕食;在没有外部威胁或障碍物时,鱼群常常会聚成接近球形的形态,以便协同躲避。
参考文献:Zhang, H., Tang, M., Liu, Y. et al. Sardine Optimization Algorithm with Agile Locality and Globality Strategies for Real Optimization Problems. Arab J Sci Eng 48, 9787–9825 (2023). https://doi.org/10.1007/s13369-022-07350-y
23个测试函数简介
测试集:23组基本测试函数简介及图像(提供python代码)_IT猿手的博客-CSDN博客
参考文献:
[1]Yao X, Liu Y, Lin G M. Evolutionary programming made faster[J]. IEEE transactions on evolutionary computation, 1999, 3(2):82-102.
(1)部分代码
close all
clear ;
clc;
SearchAgents_no=20; % 种群数量
Function_name='F1'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper) 设定适应度函数
Max_iteration=100; % Maximum numbef of iterations 设定最大迭代次数
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name); %设定边界以及优化函数
%% Executing SOA algorithm
[BestIndividual,BestFitness,curve]=SOA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj); %开始优化
figure
plot(curve,'Color','r','linewidth',2.5)
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
axis tight
grid on
box on
legend('SOA')
display(['The best solution obtained by SOA is ', num2str(BestIndividual)]);
display(['The best optimal value of the objective funciton found by SOA is ', num2str(BestFitness)]);
(2)部分结果
很多小伙伴在刚刚接触元启发式算法时常常存在许多困惑,今天我将用最通俗的语言给各位初学的小伙伴快速了解元启发式算法。
百度百科上给元启发式算法的定义为——元启发式算法(MetaHeuristic Algorithm)是启发式算法的改进,它是随机算法与局部搜索算法相结合的产物[1]。对于启发式的概念很多小伙伴又会冒出许多????,在这里我想给他一个高度凝练的定义即——一种模拟自然种群生活/基因进化思想/天文地理现象的贪心算法,包含探索和开发两个阶段,常用于解决工程中的复杂问题,通常为求解极小值(非凸)。
当然,在一定范围内也可以称元启发算法为进化计算/优化算法/群智智能。传统且经典的有遗传算法(Genetic Algorithm,GA)、差分进化算法((Differential Evolution Algorithm,DE)、粒子群优化算Ω(Particle Swarm optimization,PSO)、模拟退火算法(Simulated annealing algorithm, SAA);比较新兴的算法如我在之前文章中提到的正余弦算法(Sine Cosine Algorithm,SCA),鲸鱼优化算法(Whale Optimization Algorithm,WOA),蛇优化(Snake Optimizer, SO)等。
算法在执行主公式前需首先初始化一组随机解,通常为一个Population x Dimension的矩阵
其中每一个 称为个体最优Person_best(pbest),每一个个体最有优在目标函数中均对应这一个个体最有值Person_value(pbestval),在初始化的结束前会筛选出一个全局最优Global_best(gbest),以及与其对应的全局最优值Global_value(gbestval)。为了便于画图,本文均采用2维平面去表达粒子位置的变化。
初始化完成后将进入算法主循环迭代,分为探索和开发两个阶段,通常使用一个参数决定算法进行探索或开发。
通常情况下探索和开发使用不同的公式
算法在完成初始化后,进入全局探索状态,随着算法迭代所有粒子在解空间中寻找最有可能的最优解空间,并获取最优位置和最优值。
随着迭代进行,所有粒子均向着全局最优粒子的位置靠近,即红色粒子。
当探索阶段进入尾声,算法则在已找到的局部最优解空间中继续寻找最优值,此时算法进入开发阶段,采用开发阶段的公式对局部最优解空间进行求解,愈发靠近或求得此问题的最优解。
元启发式算法简易的说上是通过随机解并模拟自然种群生活/基因进化思想/天文地理现象的数学模型,通过迭代+贪心思想求解问题的极值。
希望本文可以帮助各位刚刚接触此类研究的小伙伴快速了解,如有不周的地方也请各位老师同学提出宝贵建议、指出本文的问题。最后,祝愿大家科研顺利!论文高中!