赞
踩
徒步优化算法(Hiking Optimization Algorithm,HOA)是一种受徒步旅行经历启发的元启发式优化算法。徒步旅行者试图登顶山峰、丘陵或岩石的过程中,徒步者有意或无意地考虑到地形的陡峭程度,这是一种流行的娱乐活动,它认识到优化问题的搜索景观与徒步旅行者所穿越的山区地形之间的相似性。HOA的数学模型以Tobler徒步函数为前提,该函数通过考虑地形的高程和行走距离来确定徒步者(即agent)的步行速度。在求解优化问题的过程中,利用Tobler徒步函数(THF)来确定徒步者的位置。
该成果于2024年发表在计算机领域一区SCI期刊“Knowledge-Based Systems”上。HOA方法具有出色的迭代优化性能和鲁棒性。
1、算法原理
HOA的数学基础是基于著名的Tobler徒步函数,该函数由美籍瑞士籍地理学家和制图师Waldo Tobler提出。托布勒徒步旅行函数是一个指数函数,它决定了徒步旅行者的速度,考虑到地形或路径的陡峭度或坡度。
托布勒的徒步函数(THF)由下式表示:
其中,wi,t为迭代或时间t时的徒步者速度(即km∕h),Si,t为步道或地形的坡度。另外,斜率Si,t由下式表示:
其中,dℎ和dx分别表示徒步旅行者在海拔和距离上的差异。此外,θ是小径或地形的倾斜角,它位于[0,50◦]内。
HoA利用了徒步旅行者作为一个群体的社会思维和个人徒步旅行者的个人认知能力的好处。徒步旅行者的更新或实际速度是由THF确定的初始速度、领先徒步旅行者的位置、徒步旅行者的实际位置和扫掠系数的函数。因此,徒步旅行者i的当前速度由
其中yi,t是在[0,1]范围内均匀分布的数;Wi,t和Wi,t−1分别表示徒步旅行者i的当前速度和初始速度。βbest是领先徒步旅行者的位置,αi,t是徒步旅行者i的扫描因子(SF),位于[1,3]。SF确保徒步旅行者不会偏离领队徒步旅行者太远,这样他们就可以看到领队徒步旅行者的方向,并接收到领队徒步旅行者的信号。
通过考虑徒步旅行者的速度,由下式给出徒步旅行者βi,t+1的更新位置i:
在包括HOA在内的各种元启发式算法中,智能体的初始设置是显著影响可行解的可达性和收敛速度的关键因素。在这项特殊的研究中,HOA实施了随机初始化技术来初始化其代理的位置。
徒步旅行者位置βi,t的初始化由解的上界Φ2j和下界Φ1j确定,由等式表示:
其中δj是范围[0,1]内的均匀分布数。此外,Φ1j和Φ2j表示优化问题决策变量的jth维的上下界。HOA的探索和开发倾向受一个称为扫描因子(SF)的参数的影响。当SF范围增大时,HOA倾向于更倾向于开发阶段。相反,减小SF范围往往会鼓励在HOA内进入探索性阶段。此外,减小轨道倾斜角的范围会使HOA转向开发阶段。这些因素共同影响了HOA在解决优化问题时的行为和表现。
HOA对应的伪代码过程如下图所示
2、结果展示
3、MATLAB核心代码
- % 徒步优化算法(Hiking Optimization Algorithm,HOA)
- function [Xbest,Best_fitness,Iter_curve] = HOA(pop,maxIter,lb,ub,dim,fobj)
- %% Pre-allocate
- fit = zeros(pop,1); % vectorize variable to store fitness value
- %% Start Tobler Hiking Function Optimizer
- Pop = repmat(lb,pop,1) + repmat((ub-lb),pop,1).*rand(pop,dim); % generate initial position of hiker
- %% Evaluate fitness
- for q = 1:pop
- fit(q) = fobj(Pop(q,:)); % evaluating initial fitness
- end
- %% Main Loop
- for i = 1:maxIter
- [~,ind] = min(fit); % obtain initial fitness
- Xbest = Pop(ind,:); % obtain golbal best position of initial fitness
- Best_fitness = min(fit);
- for j = 1:pop
- Xini = (Pop(j,:)); % obtain initial position of jth hiker
- theta = randi([0 50],1,1); % randomize elevation angle of hiker
- s = tan(theta); % compute slope
- SF = randi([1 2],1,1); % sweep factor generate either 1 or 2 randomly
- Vel = 6.*exp(-3.5.*abs(s+0.05)); % Compute walking velocity based on Tobler's Hiking Function
- newVel = Vel + rand(1,dim).*(Xbest - SF.*Xini) ; % determine new position of hiker
- newPop = Pop(j,:) + newVel; % Update position of hiker
- newPop = min(ub,newPop); % bound violating to upper bound
- newPop = max(lb,newPop); % bound violating to lower bound
- fnew = fobj(newPop); % re-evaluate fitness
- if (fnew < fit(j)) % apply greedy selection strategy
- Pop(j,:) = newPop; % store best position
- fit(j) = fnew; % store new fitness
- end
- end
- Iter_curve(i) = min(fit); % store best fitness per iteration
- end
- end
- 微信公众号搜索:淘个代码,获取更多免费代码
- %唯一官方店铺:https://mbd.pub/o/author-amqYmHBs/work
- %代码清单:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
参考文献
[1]Oladejo S O, Ekwe S O, Mirjalili S. The Hiking Optimization Algorithm: A novel human-based metaheuristic approach[J]. Knowledge-Based Systems, 2024, 296: 111880.
完整代码获取
后台回复关键词:
TGDM811
获取更多代码:
- 或者复制链接跳转:
- https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。