news 2026/7/22 18:18:19

【优化求解】基于混沌精英哈里斯鹰算法求解单目标优化问题CEHHO附matlab代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【优化求解】基于混沌精英哈里斯鹰算法求解单目标优化问题CEHHO附matlab代码

1 简介

针对哈里斯鹰优化(HHO)算法存在的收敛精度低,收敛速度慢,易于陷入局部最优的不足,提出了一种混沌精英哈里斯鹰优化(CEHHO)算法.首先,引入精英等级制度策略,以充分利用优势种群来增强种群多样性以及提升算法收敛速度和精度;其次,利用Tent混沌映射调整算法关键参数;然后,使用一种非线性能量因子调节策略来平衡算法的开发与探索;最后,使用高斯随机游走策略对最优个体施加扰动,并在算法停滞时,利用随机游走策略使算法有效跳出局部最优.通过对20个基准测试函数在不同维度下进行仿真实验,来评估算法的寻优能力.实验结果表明,改进算法的表现优于鲸鱼优化算法(WOA),灰狼优化(GWO)算法,粒子群优化(PSO)算法和生物地理优化(BBO)算法,性能较原始HHO算法有明显提升,验证了改进算法的有效性.

2 部分代码

%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Harris's hawk optimizer: In this algorithm, Harris' hawks try to catch the rabbit.

% T: maximum iterations, N: populatoin size, CNVG: Convergence curve

% To run HHO: [Rabbit_Energy,Rabbit_Location,CNVG]=HHO(N,T,lb,ub,dim,fobj)

function [Rabbit_Energy,Rabbit_Location,CNVG]=HHO(N,T,lb,ub,dim,fobj)

disp('HHO is now tackling your problem')

tic

% initialize the location and Energy of the rabbit

Rabbit_Location=zeros(1,dim);

Rabbit_Energy=inf;

%Initialize the locations of Harris' hawks

X=initialization(N,dim,ub,lb);

CNVG=zeros(1,T);

t=0; % Loop counter

while t<T

for i=1:size(X,1)

% Check boundries

FU=X(i,:)>ub;FL=X(i,:)<lb;X(i,:)=(X(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;

% fitness of locations

fitness=fobj(X(i,:));

% Update the location of Rabbit

if fitness<Rabbit_Energy

Rabbit_Energy=fitness;

Rabbit_Location=X(i,:);

end

end

E1=2*(1-(t/T)); % factor to show the decreaing energy of rabbit

% Update the location of Harris' hawks

for i=1:size(X,1)

E0=2*rand()-1; %-1<E0<1

Escaping_Energy=E1*(E0); % escaping energy of rabbit

if abs(Escaping_Energy)>=1

%% Exploration:

% Harris' hawks perch randomly based on 2 strategy:

q=rand();

rand_Hawk_index = floor(N*rand()+1);

X_rand = X(rand_Hawk_index, :);

if q<0.5

% perch based on other family members

X(i,:)=X_rand-rand()*abs(X_rand-2*rand()*X(i,:));

elseif q>=0.5

% perch on a random tall tree (random site inside group's home range)

X(i,:)=(Rabbit_Location(1,:)-mean(X))-rand()*((ub-lb)*rand+lb);

end

elseif abs(Escaping_Energy)<1

%% Exploitation:

% Attacking the rabbit using 4 strategies regarding the behavior of the rabbit

%% phase 1: surprise pounce (seven kills)

% surprise pounce (seven kills): multiple, short rapid dives by different hawks

r=rand(); % probablity of each event

if r>=0.5 && abs(Escaping_Energy)<0.5 % Hard besiege

X(i,:)=(Rabbit_Location)-Escaping_Energy*abs(Rabbit_Location-X(i,:));

end

if r>=0.5 && abs(Escaping_Energy)>=0.5 % Soft besiege

Jump_strength=2*(1-rand()); % random jump strength of the rabbit

X(i,:)=(Rabbit_Location-X(i,:))-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:));

end

%% phase 2: performing team rapid dives (leapfrog movements)

if r<0.5 && abs(Escaping_Energy)>=0.5, % Soft besiege % rabbit try to escape by many zigzag deceptive motions

Jump_strength=2*(1-rand());

X1=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:));

if fobj(X1)<fobj(X(i,:)) % improved move?

X(i,:)=X1;

else % hawks perform levy-based short rapid dives around the rabbit

X2=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:))+rand(1,dim).*Levy(dim);

if (fobj(X2)<fobj(X(i,:))), % improved move?

X(i,:)=X2;

end

end

end

if r<0.5 && abs(Escaping_Energy)<0.5, % Hard besiege % rabbit try to escape by many zigzag deceptive motions

% hawks try to decrease their average location with the rabbit

Jump_strength=2*(1-rand());

X1=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-mean(X));

if fobj(X1)<fobj(X(i,:)) % improved move?

X(i,:)=X1;

else % Perform levy-based short rapid dives around the rabbit

X2=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-mean(X))+rand(1,dim).*Levy(dim);

if (fobj(X2)<fobj(X(i,:))), % improved move?

X(i,:)=X2;

end

end

end

%%

end

end

t=t+1;

CNVG(t)=Rabbit_Energy;

% Print the progress every 100 iterations

% if mod(t,100)==0

% display(['At iteration ', num2str(t), ' the best fitness is ', num2str(Rabbit_Energy)]);

% end

end

toc

end

% ___________________________________

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

3 仿真结果

4 参考文献

[1]汤安迪, 韩统, 徐登武,等. 混沌精英哈里斯鹰优化算法[J]. 计算机应用, 2021, 41(8):8.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 18:18:18

企业级AI搜索服务落地实录(2024Q2最新压测数据+成本对比表)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;企业级AI搜索服务落地实录&#xff08;2024Q2最新压测数据成本对比表&#xff09; 在2024年第二季度&#xff0c;我们完成了面向金融风控场景的AI搜索服务全链路落地&#xff0c;覆盖千万级文档索引、毫秒级语…

作者头像 李华
网站建设 2026/7/22 18:18:16

【SVM分类】基于支持向量机结合SOM神经网络(SVM-SOM)实现数据分类附matlab代码

​1 简介本文挑选了10个分子描述符,用自组织神经网络和支持向量机的方法分别建立了极光激酶抑制剂的分类模型。这些模型可以很好的将极光激酶抑制剂的选择性划分为三个类别,即:抑制剂对极光激酶A有选择性抑制,抑制剂对极光激酶B有选择性抑制和抑制剂没有明显选择性。两类模型的…

作者头像 李华
网站建设 2026/7/22 18:15:00

Spring Boot 整合 RocketMQ 完全指南

rocketmq-spring-boot-starter 的版本选择与依赖引入 在开始写代码之前&#xff0c;我们面临第一个选择题&#xff1a;用哪个版本的 Starter&#xff1f; 这看似是个小问题&#xff0c;但在 Spring Boot 3.x 时代&#xff0c;版本选不对&#xff0c;项目可能连启动都起不来。 …

作者头像 李华
网站建设 2026/7/22 18:14:32

HighFive并行IO编程:基于MPI的HDF5高性能数据读写技巧

HighFive并行IO编程&#xff1a;基于MPI的HDF5高性能数据读写技巧 【免费下载链接】HighFive HighFive - Header-only C HDF5 interface 项目地址: https://gitcode.com/gh_mirrors/high/HighFive HighFive是一个Header-only的C HDF5接口&#xff0c;它简化了HDF5文件的…

作者头像 李华
网站建设 2026/7/22 18:12:40

Jellium Desktop色彩校准指南:让你的视频显示更准确

Jellium Desktop色彩校准指南&#xff1a;让你的视频显示更准确 【免费下载链接】jellium-desktop An unofficial desktop client for Jellyfin 项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop Jellium Desktop是一款非官方的Jellyfin桌面客户端&am…

作者头像 李华