一、麋鹿群优化算法
1. 算法背景
麋鹿群优化算法(Elephant Herding Optimization, EHO)是2024年提出的一种新型的基于自然启发的群体智能优化算法,由Al-Betar等人于2024年提出。该算法灵感来源于麋鹿的繁殖过程,旨在解决各种优化问题。
2. 算法原理
2.1 算法思想
EHO算法通过模拟麋鹿的繁殖行为,将种群划分为不同的家族,每个家族由一头公麋鹿(bull)和若干母麋鹿(harems)组成。公麋鹿通过战斗争夺领导权,领导权的争夺基于适应度值。每个家族在繁殖季节生成新的后代(calves),这些后代继承了父母的属性。通过这种方式,算法能够在搜索空间中进行有效的探索和开发。
2.2 算法过程
2.2.1 发情期(Rutting Season)
在发情期,麋鹿群被划分为不同的家族。每个家族由一头公麋鹿领导,公麋鹿的选择基于适应度值。具体来说,适应度值最高的公麋鹿将获得最多的母麋鹿。公麋鹿的选择公式如下:
B = arg min j ∈ ( 1 , 2 , … , B ) f ( x j ) B = \arg \min_{j \in (1, 2, \ldots, B)} f(x_j) B=argj∈(1,2,…,B)minf(xj)
其中, B B B 是公麋鹿的数量, f ( x j ) f(x_j) f(xj) 是第 j j j 头公麋鹿的适应度值。
母麋鹿的分配采用轮盘赌选择方法,根据公麋鹿的适应度值进行分配。具体公式如下:
p i = f ( x i ) ∑ j = 1 B f ( x j ) p_i = \frac{f(x_i)}{\sum_{j=1}^{B} f(x_j)} pi=∑j=1Bf(xj)f(xi)
其中, p i p_i pi 是第 i i i 头公麋鹿被选择的概率。
2.2.2 产崽期(Calving Season)
在产崽期,每个家族生成新的后代。后代的生成基于父母的属性,具体公式如下:
x new , j = x bull , j + α ( x harem , j − x bull , j ) x_{\text{new}, j} = x_{\text{bull}, j} + \alpha (x_{\text{harem}, j} - x_{\text{bull}, j}) xnew,j=xbull,j+α(xharem,j−xbull,j)
其中, x new , j x_{\text{new}, j} xnew,j 是新生成的后代, x bull , j x_{\text{bull}, j} xbull,j 是公麋鹿的位置, x harem , j x_{\text{harem}, j} xharem,j 是母麋鹿的位置, α \alpha α 是一个随机数,范围为 [0, 1]。
2.2.3 选择期(Selection Season)
在选择期,所有家族的成员(包括公麋鹿、母麋鹿和后代)被合并,然后选择适应度值最好的个体作为下一代的种群。选择机制采用 ( μ + λ ) (\mu + \lambda) (μ+λ) 选择策略,具体公式如下:
EH = top ( EH temp , EHS ) \text{EH} = \text{top}(\text{EH}_{\text{temp}}, \text{EHS}) EH=top(EHtemp,EHS)
其中, EH temp \text{EH}_{\text{temp}} EHtemp 是合并后的种群, EHS \text{EHS} EHS 是种群大小, top \text{top} top 函数选择适应度值最好的 EHS \text{EHS} EHS 个个体。
3. 算法实现
EHO算法的实现步骤如下:
- 初始化:随机生成初始种群,设置算法参数,包括种群大小(EHS)、最大迭代次数(MaxIter)等。
- 发情期:根据适应度值选择公麋鹿,并分配母麋鹿。
- 产崽期:生成新的后代。
- 选择期:合并所有个体,选择适应度值最好的个体作为下一代种群。
- 迭代:重复上述步骤,直到达到最大迭代次数。
4. 算法特点
EHO算法具有以下特点:
- 全局搜索能力强:通过发情期和产崽期的操作,算法能够在搜索空间中进行广泛的探索。
- 局部搜索能力较弱:由于分离操作的随机性,算法在局部搜索方面表现较弱。
- 参数选择灵活:算法参数如公麋鹿数量(Br)可以根据具体问题进行调整。
参考文献
[1]Al-Betar, M. A., Awadallah, M. A., Braik, M. S., Makhadmeh, S., & Doush, I. A. (2024). Elk Herd Optimizer: A Novel Nature-Inspired Metaheuristic Algorithm. Artificial Intelligence Review, 57(48), 1-56. 链接
二、移动机器人路径规划及栅格地图环境搭建
移动机器人路径规划是移动机器人研究的核心领域之一,旨在为机器人从起点到目标点生成一条安全、无碰撞且最优的路径。路径规划根据环境信息的已知程度,分为全局路径规划和局部路径规划。全局路径规划假设环境信息已知,适用于静态环境;局部路径规划则适用于环境信息未知或部分已知的动态环境。随着机器人技术的发展,路径规划算法不断演进,从传统的栅格法和人工势场法,发展到现代的智能优化算法,如遗传算法、粒子群优化算法(PSO)、麻雀搜索算法(SSA)、灰狼优化算法和鲸鱼优化算法等。
- 栅格法:将环境划分为二维或三维的栅格,机器人在栅格间移动。该方法简单直观,但存储需求随空间增大而剧增,决策速度下降。
- 人工势场法:通过模拟引力和斥力引导机器人移动,但容易陷入局部最优解和死锁现象。
- 智能优化算法:如蚁群算法通过模拟蚂蚁释放信息素的行为,能够找到最优路径,但存在收敛速度慢的问题。改进的蚁群算法通过引入跳点搜索和信息素更新策略,提高了收敛速度和路径平滑度。麻雀搜索算法基于麻雀觅食行为,具有结构简单、收敛速度快的优点,适用于路径优化问题。
栅格地图是路径规划中常用的环境表示方法,通过将工作空间划分为二维栅格来简化环境建模。每个栅格用序号标识,无障碍物的栅格为可行栅格(标记为0),有障碍物的栅格为不可行栅格(标记为1)。栅格的尺寸根据障碍物尺寸和安全距离设置。通过障碍物膨胀,可以确保机器人在路径规划时避开障碍物。
在20x20的栅格环境中,每个栅格的坐标通过以下公式计算:
x = mod ( N i / N ) − 0.5 x = \text{mod}(N_i / N) - 0.5 x=mod(Ni/N)−0.5
y = N − ceil ( N i / N ) + 0.5 y = N - \text{ceil}(N_i / N) + 0.5 y=N−ceil(Ni/N)+0.5
其中, N i N_i Ni 是栅格的序号, N N N 是每列的栅格数量。栅格中心位置作为其在坐标系中的坐标。路径规划问题转化为在栅格地图上寻找从起始点到目标点的有序栅格子集,这些栅格子集的中心连线即为规划路径。
参考文献:
[1]史恩秀,陈敏敏,李俊,等.基于蚁群算法的移动机器人全局路径规划方法研究[J].农业机械学报, 2014, 45(6):5.DOI:CNKI:SUN:NYJX.0.2014-06-009.
[2]朱庆保,张玉兰.基于栅格法的机器人路径规划蚁群算法[J].机器人, 2005, 27(2):5.DOI:10.3321/j.issn:1002-0446.2005.02.008.
[3]曹新亮,王智文,冯晶,等.基于改进蚁群算法的机器人全局路径规划研究[J].计算机工程与科学, 2020, 42(3):7.DOI:CNKI:SUN:JSJK.0.2020-03-027.
三、部分MATLAB及结果
clc
clear
close all
tic
%% 地图
global G S E
G=[0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0; 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0; 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0; 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0; 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0;0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0; 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0; 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0; 0 0 1 0 0 0 0 1 1 0 1 0 1 1 0 0 0 1 0 0; 0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0; 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0; 1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0; 0 0 1 1 0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0;];
for i=1:20/2for j=1:20m=G(i,j);n=G(21-i,j);G(i,j)=n;G(21-i,j)=m;end
end
%%
S = [1 1]; %起点
E = [20 20]; %终点
[ub,dimensions] = size(G);
dim = dimensions - 2;