基于对立非洲秃鹫优化算法求解单目标优化问题(OAVOA)含Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

非洲秃鹫优化算法(AVOA)是AbdollahzadehB等[12]于2021年受非洲秃鹫觅食和导航行为启发而提出的一种新型元启发式优化算法,具有寻优能力强、收敛速度快等优点。AVOA是受非洲秃鹫觅食和导航行为启发提出的一种元启发式优化算法。AVOA数学描述如下。

a)确定最佳秃鹫。AVOA通过计算种群所有秃鹫适应度,选择最优和次优适应度对应的秃鹫作为最优秃鹫和次优秃鹫位置,其他秃鹫利用式(3)向最优和次优秃鹫移动。

式中Ri(t)—除最优、次优秃鹫外的其他秃鹫位置;BestV1、BestV2—最优秃鹫和次优秃鹫位置;L1、L2—介于0和1之间待测量参数,其和为1;pi—选择最佳秃鹫的概率;fi—其他秃鹫适应度;t—当前迭代次数;其他参数意义同上。

b)秃鹫饱食率。秃鹫经常觅食,若它们处于饱食状态,则拥有较高能量,这使得它们可以在更广阔的区域觅食;若处于饥饿状态,则没有足够的能量飞行和在更强壮的秃鹰附近觅食。饱食率数学描述为:

式中F—秃鹫饱食率;T—最大迭代次数;z—-1和1之间的随机数;h—-2和2之间的随机数;rand1—0和1之间的随机数;w—控制勘探过程参数,随着w值增大,算法进入勘探阶段的概率增大,反知概率减小。

c)探索阶段。秃鹫具有很高的视觉能力和较好的觅食能力。在AVOA中,秃鹫通过式(5)随机搜寻不同区域。

式中Pi(t+1)—第t+1次迭代秃鹫位置;Pi(t)—第t次迭代秃鹫位置;X—秃鹫随机移动的地方,以保护食物免受其他秃鹫夺取,X=2×rand,rand表示0和1之间的随机数;P1—探索阶段选择参数;rand2、rand3、randP1—0和1之间的随机数;ub、lb—搜索空间上、下限值;其他参数意义同上。

d)开发阶段。AVOA中,开发阶段分为开发一阶段和开发二阶段2种策略,并通过开发阶段选择参数P2、P3决定采用何种策略进行位置更新。开发第一阶段秃鹫位置更新描述如下:

式中rand4、rand5、rand6、randP2—0和1之间的随机数;P2—开发第一阶段更新策略选择参数;其他参数意义同上。

开发第二阶段秃鹫位置更新描述如下:

式中BestV1(t)、BestV2(t)—第t次迭代最优、次优秃鹫位置;randP3—0和1之间的随机数;P3—开发第二阶段更新策略选择参数;Levy(d)—随即游走,其每一步方向完全随机而各向同性,步长为重尾分布;其他参数意义同上。

⛄ 部分代码

% Opposition African Vultures Optimization Algorithm (OAVOA) version 1.0

% B. Jena, M. K. Naik, R. Panda, and A. Abraham, 

% 鈥淎 novel minimum generalized cross entropy-based multilevel segmentation 

% technique for the brain MRI/Dermoscopic images,鈥�Comput. Biol. Med., p. 106214, 2022, 

% doi: https://doi.org/10.1016/j.compbiomed.2022.106214.

%_____________________________________________________________________________________________________

clearvars

close all

clc

disp('OAVOA is tracking the problem');

N=30; % Number of slime mould

Function_name='F3'; % Name of the test function that can be from F1 to F23 

MaxIT=500; % Maximum number of iterations

[lb,ub,dim,fobj]=Get_Functions_details(Function_name); % Function details

Times=21; %Number of independent times you want to run the OAVOA

display(['Number of independent runs: ', num2str(Times)]);

for i=1:Times

[Destination_fitness(i),bestPositions(i,:),Convergence_curve(i,:)]=OAVOA(N,MaxIT,lb,ub,dim,fobj);

display(['The optimal fitness of OAVOA is: ', num2str(Destination_fitness(i))]);

end

[bestfitness,index]=min(Destination_fitness);

disp('--------Best Fitness, Average Fitness, Standard Deviation and Best Solution--------');

display(['The best fitness of OAVOA is: ', num2str(bestfitness)]);

display(['The average fitness of OAVOA is: ', num2str(mean(Destination_fitness))]);

display(['The standard deviation fitness of OAVOA is: ', num2str(std(Destination_fitness))]);

display(['The best location of OAVOA is: ', num2str(bestPositions(index,:))]);

figure('Position',[284   214   660   290])

%Draw search space

subplot(1,2,1);

func_plot(Function_name);

title('Test function')

xlabel('x_1');

ylabel('x_2');

zlabel([Function_name,'( x_1 , x_2 )'])

grid off

%Draw objective space

subplot(1,2,2);

semilogy(Convergence_curve(index,:),'LineWidth',3);

xlabel('Iterations');

ylabel('Best fitness obtained so far');

legend('OAVOA');

box on;

axis tight;

grid off;

⛄ 运行结果

⛄ 参考文献

[1] Chastikova V A ,  Ostapov D S . HYBRID OPTIMIZING GRIFFON-VULTURE ALGORITHM BASED ON SWARM INTELLIGENCE MECHANISMS[J]. Polythematic Online Scientific Journal of Kuban State Agrarian University, 2014(100).

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用MATLAB编写基于对立学习的差分进化算法的代码: ``` % 差分进化算法 % 基于对立学习的差分进化算法 % 初始化参数 popsize = 50; % 种群大小 maxgen = 100; % 最大迭代次数 F = 0.5; % 缩放因子 CR = 0.9; % 交叉概率 dim = 10; % 变量维数 % 初始化种群 pop = rand(popsize, dim); % 迭代 for gen = 1:maxgen % 对立学习 opp_pop = 1 - pop; % 计算适应度 fitness = zeros(popsize, 1); opp_fitness = zeros(popsize, 1); for i = 1:popsize fitness(i) = obj_func(pop(i, :)); opp_fitness(i) = obj_func(opp_pop(i, :)); end % 求出每个个体的最优邻居 best_pop = zeros(popsize, dim); best_fitness = zeros(popsize, 1); for i = 1:popsize % 找到个体i的最优邻居 best_idx = i; best_val = fitness(i); for j = 1:popsize if j ~= i && fitness(j) > best_val best_idx = j; best_val = fitness(j); end end best_pop(i, :) = pop(best_idx, :); best_fitness(i) = best_val; end % 差分进化 for i = 1:popsize % 随机选择三个个体 idx = randperm(popsize, 3); a = pop(idx(1), :); b = pop(idx(2), :); c = pop(idx(3), :); % 生成新个体 new_pop = best_pop(i, :) + F * (a - opp_pop(i, :)) + F * (b - c); % 交叉 j_rand = randi(dim); % 随机选择一个维度 for j = 1:dim if j == j_rand || rand < CR pop_new(i, j) = new_pop(j); else pop_new(i, j) = pop(i, j); end end end % 更新种群 pop = pop_new; end % 输出最优解 [best_fitness, best_idx] = max(fitness); best_solution = pop(best_idx, :); disp(['最优解:', num2str(best_solution)]); ``` 其中,`obj_func` 表示目标函数,需要根据具体问题进行修改。请注意,在实际应用中,需要根据具体问题进行参数的调整,以获得更好的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值