2024年SCI群智能优化算法:北极海鹦优化算法,含MathType公式、word伪代码、visio的流程图、matlab代码。

一、背景

北极海鹦优化算法(Arctic Puffin Optimization, APO),这是一种受北极海鹦生存和捕食行为启发的元启发式优化算法。

二、算法原理

APO由空中飞行(探索)和水下觅食(开发)阶段组成。

1、空中飞行(探索)阶段,北极海鹦依靠独特的飞行和觅食策略来应对充满挑战的生存。在日常生活中,它们必须在海洋和空气之间灵活地适应,满足它们的营养需求,适应多样化的环境。在空中导航时,海鹦采用两种关键策略来应对不同的情况,第一种策略是空中搜索,而第二种策略是潜入水中寻找猎物。

(1)空中搜索:北极海鹦通常以编队或群体的方式进行协调飞行,这种协作行为提高了飞行效率,并为合作狩猎提供了机会。引入Levy飞行和速度因子机制,增强了算法跳出局部最优的能力,提高了收敛速度。

(2)俯冲捕食:俯冲是北极海鹦捕食时的关键策略,因为它们会迅速改变飞行方向以加快食物捕获。为了在各种场景下获得最优结果,算法选择将两个阶段生成的候选位置合并为新的解决方案。然后根据适应度对这些解决方案进行排序,并选择前N个个体形成新的种群。方程描述如下:

2、水下觅食(开发)阶段,采用协同和自适应变化因子等策略,确保算法能够有效地利用当前最优解并引导搜索方向。

(1)聚集觅食:它们经常采取集体策略,聚集在水面附近的鱼群周围。这种合作捕食行为提高了捕猎效率和成功率。

(2)加强搜索:随着捕食的进行,北极海鹦可能会在一段时间后感觉到当前觅食区域的食物资源枯竭或耗尽。为了继续满足它们的营养需求,它们必须改变它们在水下的位置,寻找更多的鱼或其他水下食物来源。这一阶段的位置更新方程如下:

(3)躲避捕食者:这一策略被用来描述北极海鹦在发现附近的捕食者时的行为。它们用一种特殊的声音或叫声来警告其他海鹦,表明危险的存在。

海鹦在水下觅食时采用了不同的策略,包括收集饲料、激烈搜索和躲避捕食者。在不同的条件下,这些策略可能导致不同的觅食结果。该算法选择将三个不同位置方程中的候选位置合并为一个新的解,以在各种情况下获得最优结果。根据适应度对解进行排序,选出最优的N个个体。方程描述如下:

三、在APO算法中,北极海鹦在迭代的初始阶段总是倾向于频繁的空中飞行,以实现全局搜索,而在迭代的后期,它更倾向于频繁的潜水觅食,以进行局部开发。这种搜寻机制的灵感来自北极海鹦的生活习惯。在早期,北极海鹦更倾向于寻找合适的觅食水域,而在后期,它则专注于潜水寻找食物。基于这种行为模式,APO算法设计了一个行为过渡系数B,实现了从全局搜索到局部利用的平滑过渡。

通过行为转换因子实现了勘探阶段和开发阶段之间的动态转换,有效地平衡了全局搜索和局部开发。

为了验证APO算法的先进性和适用性,将其与九种先进的优化算法进行了比较。在CEC2017、CEC2019和CEC2022三个测试集中,APO算法分别在72%、70%和75%的情况下优于其他被比较算法。同时,Wilcoxon符号秩检验结果和Friedman秩均值统计证明了APO算法的优越性。此外,在13个现实世界的工程问题中,APO在85%的测试用例中优于其他比较算法,证明了它在解决复杂的现实世界优化问题方面的潜力。

%%有需要的友友们关注 面包多 和 微信公众号 :一个专业的算法研究员,获取更多!

好的,以下是一段简单的 Matlab 智能算法代码,其中种分为两类: ```matlab function [bestSol, bestFitness] = PSO(populationSize, lowerBound1, upperBound1, lowerBound2, upperBound2) % populationSize: 种大小 % lowerBound1, upperBound1: 种1的取值范围 % lowerBound2, upperBound2: 种2的取值范围 % 初始化种1和种2 pop1 = randi([lowerBound1, upperBound1], [populationSize, 1]); pop2 = randi([lowerBound2, upperBound2], [populationSize, 1]); % 初始化速度 velocity1 = zeros(populationSize, 1); velocity2 = zeros(populationSize, 1); % 计算每个个体的适应度值 fitness = calculateFitness(pop1, pop2); % 初始化最优位置和适应度值 bestPos1 = pop1; bestPos2 = pop2; bestFitness = fitness; % 循环迭代 for i = 1:1000 % 更新速度和位置 w = 0.8 - 0.7 * i / 1000; % 惯性权重 c1 = 2; % 个体认知系数 c2 = 2; % 体社会系数 r1 = rand(populationSize, 1); r2 = rand(populationSize, 1); velocity1 = w * velocity1 + c1 * r1 .* (bestPos1 - pop1) + c2 * r2 .* (bestPos1 - pop1); velocity2 = w * velocity2 + c1 * r1 .* (bestPos2 - pop2) + c2 * r2 .* (bestPos2 - pop2); pop1 = pop1 + velocity1; pop2 = pop2 + velocity2; % 限制位置在取值范围内 pop1(pop1 < lowerBound1) = lowerBound1; pop1(pop1 > upperBound1) = upperBound1; pop2(pop2 < lowerBound2) = lowerBound2; pop2(pop2 > upperBound2) = upperBound2; % 计算每个个体的适应度值 fitness = calculateFitness(pop1, pop2); % 更新最优位置和适应度值 replaceIdx = fitness < bestFitness; bestPos1(replaceIdx, 1) = pop1(replaceIdx, 1); bestPos2(replaceIdx, 1) = pop2(replaceIdx, 1); bestFitness(replaceIdx, 1) = fitness(replaceIdx, 1); end % 返回适应度最优的个体和适应度值 [bestFitness, bestIdx] = min(bestFitness); bestSol = [bestPos1(bestIdx, 1), bestPos2(bestIdx, 1)]; end function fitness = calculateFitness(pop1, pop2) % 计算每个个体的适应度值 fitness = abs(pop1 .* sin(pop2) - 1); end ``` 其中,种1的取值范围为 [lowerBound1, upperBound1],种2的取值范围为 [lowerBound2, upperBound2],种大小为 populationSize。calculateFitness 函数是适应度函数,用于计算每个个体的适应度值。PSO 函数是粒子优化算法的主函数,用于进行迭代优化,最终返回适应度最优的个体和适应度值。 需要注意的是,本算法代码中并没有判断种大小是否符合要求,需要在调用 PSO 函数之前对种大小进行判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值