注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。
鹦鹉优化器(Parrot optimizer,PO),这是一种高效的元启发式算法,其灵感来自于在驯养的鹦鹉中观察到的觅食、停留、交流和对陌生人的恐惧行为。这些行为被集成在四个不同的公式中,以便于寻找最优解。传统的元启发式算法遵循单独的探索和开发阶段,与之相反,PO群体中的每个个体在每次迭代期间随机表现出这四种行为中的一种。这一方法可以更准确地反映在驯化的鹦鹉中观察到的行为随机性,并显著提高了种群多样性。该方法不同于传统的勘探开采两阶段结构,在保证解决方案质量的同时,有效降低了陷入局部最优的风险。PO的随机结构将其与传统算法区分开来,使其特别适合于避免局部最优,并适用于现实世界的问题解决,特别是在医疗领域。
该成果于2024年发表在医学领域2区SCI期刊“Computers in Biology and Medicine”上,目前被引81次。
1.算法原理
绿颊锥尾鹦鹉是一种很受欢迎的鹦鹉物种,由于其吸引人的特征,因此是宠物主人的热门选择。以前的研究和育种工作表明,绿颊锥尾鹦鹉表现出四种不同的行为特征:觅食,停留,交流和害怕陌生人。这些行为如图所示,在现实世界的背景下,形成了设计PO的动机的基础。
(1)种群初始化
所提出的PO的初始化公式,考虑到一个群体的大小N,最大迭代数Maxiter,和搜索空间下限lb和上限,可以表示为:
式中rand(0,1)为[0,1]范围内的随机数,Xi0为表示在初始阶段中的第i位置。
(2)觅食行为
在觅食行为中,它们主要通过观察食物的位置或考虑主人的位置来估计食物的大致位置,然后向各自的位置飞去。因此,位置运动遵循如下公式:
在式中,Xti表示当前位置,Xt+1i表示后续更新的位置。Xtmean表示鹦鹉在当前种群内的平均位置,Levy(D)表示列维分布,用于描述鹦鹉的飞行。Xbest表示从初始化到当前搜索到的最佳位置,它也表示主机的当前位置。t表示当前的迭代次数。(Xtt-Xbest)·Leve(drm)表示基于个人相对于所有者的位置而进行的移动, 表示观察整个人群的位置,以进一步确定食物的方向。该过程如图所示。
当前群的平均位置,由Xtmean所示,用以下公式表示:
根据下式中的规则可以得到Levy分布,其中赋值为1.5。
(3)停留行为
鹦鹉是一种高度社会化的生物,它的停留行为主要包括突然飞到主人身体的任何部位,在那里静止一段时间。该过程如图所示。这个过程可以表示为:
其中ones(1,dim)表示维度为dim的全1向量。Xbeast·Levy(dim)表示飞向宿主的过程,rand(0,1)·ones(1,dim)表示随机停在宿主身体某个部位的过程。
(4)沟通行为
鹦鹉是天生的社会性动物,其特点是群体内的密切交流。这种沟通行为包括飞向鸟群和不飞向鸟群的沟通。在PO中,假设这两种行为发生的概率相等,并使用当前种群的平均位置来象征群体的中心。该过程如图所示。这个过程可以表示为:
其中, 表示个体加入鹦鹉群体进行交流的过程, 表示个体在交流后立即飞走的过程。这两种行为都是可行的,因此,在[0,1]范围内使用随机生成的P来实现。
(5)害怕陌生人的行为
一般来说,鸟类对陌生人表现出天然的恐惧,鹦鹉也不例外。它们与不熟悉的个体保持距离,与主人一起寻找安全环境的行为如图所示,其公式表达如下所示:
其中 表示向主人飞去的过程, Мах表示远离陌生人的过程。
所提出的PO算法伪代码如图所示。
PO利用了探索和利用的优势,使其能够有效地导航搜索空间,同时收敛到最优解决方案,PO算法流程图如图所示。
2.结果展示
3.MATLAB核心代码
%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 鹦鹉优化器(Parrot optimizer,PO)
function [avg_fitness_curve, Best_pos, Best_score, curve, search_history, fitness_history] = PO(N, Max_iter, lb, ub, dim, fobj)
% BestF: Best value in a certain iteration
% WorstF: Worst value in a certain iteration
% GBestF: Global best fitness value
% AveF: Average value in each iteration
if (max(size(ub)) == 1)
ub = ub .* ones(1, dim);
lb = lb .* ones(1, dim);
end
%% Initialization
X0 = initialization(N, dim, ub, lb); % Initialization
X = X0;
% Compute initial fitness values
fitness = zeros(1, N);
for i = 1:N
fitness(i) = fobj(X(i, :));
end
[fitness, index] = sort(fitness); % sort
GBestF = fitness(1); % Global best fitness value
AveF = mean(fitness);
for i = 1:N
X(i, :) = X0(index(i), :);
end
curve = zeros(1, Max_iter);
avg_fitness_curve = zeros(1, Max_iter);
GBestX = X(1, :); % Global best position
X_new = X;
search_history = zeros(N, Max_iter, dim);
fitness_history = zeros(N, Max_iter);
%% Start search
for i = 1:Max_iter
if mod(i,100) == 0
display(['At iteration ', num2str(i), ' the fitness is ', num2str(curve(i-1))]);
end
avg_fitness_curve(i) = AveF;
alpha = rand(1) / 5;
sita = rand(1) * pi;
for j = 1:size(X, 1)
St = randi([1, 4]);
% foraging behavior
if St == 1
X_new(j, :) = (X(j, :) - GBestX) .* Levy(dim) + rand(1) * mean(X) * (1 - i / Max_iter) ^ (2 * i / Max_iter);
% staying behavior
elseif St == 2
X_new(j, :) = X(j, :) + GBestX .* Levy(dim) + randn() * (1 - i / Max_iter) * ones(1, dim);
% communicating behavior
elseif St == 3
H = rand(1);
if H < 0.5
X_new(j, :) = X(j, :) + alpha * (1 - i / Max_iter) * (X(j, :) - mean(X));
else
X_new(j, :) = X(j, :) + alpha * (1 - i / Max_iter) * exp(-j / (rand(1) * Max_iter));
end
% fear of strangers' behavior
else
X_new(j, :) = X(j, :) + rand() * cos((pi *i )/ (2 * Max_iter)) * (GBestX - X(j, :)) - cos(sita) * (i / Max_iter) ^ (2 / Max_iter) * (X(j, :) - GBestX);
end
% Boundary control
for m = 1:N
for a = 1:dim
if (X_new(m, a) > ub(a))
X_new(m, a) = ub(a);
end
if (X_new(m, a) < lb(a))
X_new(m, a) = lb(a);
end
end
end
% Finding the best location so far
if fobj(X_new(j, :)) < GBestF
GBestF = fobj(X_new(j, :));
GBestX = X_new(j, :);
end
end
% Update positions
for s = 1:N
fitness_new(s) = fobj(X_new(s, :));
end
for s = 1:N
if (fitness_new(s) < GBestF)
GBestF = fitness_new(s);
GBestX = X_new(s, :);
end
end
X = X_new;
fitness = fitness_new;
% Sorting and updating
[fitness, index] = sort(fitness); % sort
for s = 1:N
X0(s, :) = X(index(s), :);
end
X = X0;
curve(i) = GBestF;
Best_pos = GBestX;
Best_score = curve(end);
search_history(:, i, :) = X;
fitness_history(:, i) = fitness;
end
%% Levy search strategy
function o = Levy(d)
beta = 1.5;
sigma = (gamma(1 + beta) *sin(pi * beta / 2) / (gamma((1 + beta) / 2) * beta * 2^((beta - 1) / 2)))^(1 / beta);
u = randn(1, d) * sigma;
v = randn(1, d);
step = u ./ abs(v).^(1 / beta);
o = step;
end
end
微信公众号搜索:淘个代码,获取更多免费代码
%禁止倒卖转售,违者必究!!!!!
%唯一官方店铺:https://mbd.pub/o/author-amqYmHBs/work
%代码清单:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
4.参考文献
[1]Lian J, Hui G, Ma L, et al. Parrot optimizer: Algorithm and applications to medical problems[J]. Computers in Biology and Medicine, 2024, 172: 108064.
完整代码获取
后台回复关键词:
TGDM819
获取更多代码:
或者复制链接跳转:
https:
相关知识
蚁群算法+Dijkstra算法=二维路径规划,基于蚁群算法的机器人路径规划,matlab源码.rar资源
鸟叫声识别matlab
Matlab代码生成
粒子群优化:[xMin,yMin]=pso(fun,np,lb,ub);
Python和MATLAB交互的基本操作
===奈===
DNW最新驱动烧写工具dnw
kmeans算法在matlab中的使用
自动点击器
目标
网址: 2024高被引算法——鹦鹉优化器,MATLAB代码免费获取 https://m.mcbbbk.com/newsview539691.html
上一篇: 朋友们记住,食物多样性,是宠物身 |
下一篇: 【毕业设计】基于机器视觉的学生课 |