一、阿尔法进化算法
阿尔法进化(Alpha Evolution,AE)算法是2024年提出的一种新型进化算法,其核心在于通过自适应基向量和随机步长的设计来更新解,从而提高算法的性能。以下是AE算法的主要步骤和特点:
主要步骤
初始化:在搜索空间中随机生成一组候选解,并评估其质量。
Alpha算子:通过采样候选解构建进化矩阵,并通过矩阵的对角线或加权操作估计种群状态。为了增强每一代估计的相关性,设计了两个进化路径来积累估计结果并实现基向量的自适应。
自适应步长:通过复合差分操作构建自适应步长,用于估计问题的梯度,从而加速AE的收敛。
随机步长:通过衰减因子α自适应调整基于搜索空间生成的随机步长,以平衡探索与开发。
边界约束与选择策略:使用“减半距离”方法确保解在搜索空间内,并通过贪婪选择策略将成功进化的解加入下一代。
特点
新颖的Alpha算子:AE算法仅使用一个Alpha算子来更新解,该算子实现了基向量的自适应,并集成了多种进化信息的提取和利用技术。
无特殊超参数:AE算法没有特殊的超参数,代码实现紧凑,易于理解和应用。
非隐喻算法:AE算法不依赖于隐喻,其数学模型直接呈现,避免了隐喻带来的复杂性。
快速收敛与高质量解:AE算法在多序列比对和工程设计问题中表现出快速收敛和高质量解的能力,具有广泛的应用前景。
AE算法通过其独特的Alpha算子和自适应机制,成功解决了传统进化算法中的诸多问题,在多个基准测试和实际应用中表现出色,证明了其在优化算法领域的重要价值。
参考文献:
[1]Gao H, Zhang Q. Alpha evolution: An efficient evolutionary algorithm with evolution path adaptation and matrix generation. Engineering Applications of Artificial Intelligence, 2024, 137: 109202.
二、移动机器人路径规划及栅格地图环境搭建
移动机器人路径规划是移动机器人研究的核心领域之一,旨在为机器人从起点到目标点生成一条安全、无碰撞且最优的路径。路径规划根据环境信息的已知程度,分为全局路径规划和局部路径规划。全局路径规划假设环境信息已知,适用于静态环境;局部路径规划则适用于环境信息未知或部分已知的动态环境。随着机器人技术的发展,路径规划算法不断演进,从传统的栅格法和人工势场法,发展到现代的智能优化算法,如遗传算法、粒子群优化算法(PSO)、麻雀搜索算法(SSA)、灰狼优化算法和鲸鱼优化算法等。
- 栅格法:将环境划分为二维或三维的栅格,机器人在栅格间移动。该方法简单直观,但存储需求随空间增大而剧增,决策速度下降。
- 人工势场法:通过模拟引力和斥力引导机器人移动,但容易陷入局部最优解和死锁现象。
- 智能优化算法:如蚁群算法通过模拟蚂蚁释放信息素的行为,能够找到最优路径,但存在收敛速度慢的问题。改进的蚁群算法通过引入跳点搜索和信息素更新策略,提高了收敛速度和路径平滑度。麻雀搜索算法基于麻雀觅食行为,具有结构简单、收敛速度快的优点,适用于路径优化问题。
栅格地图是路径规划中常用的环境表示方法,通过将工作空间划分为二维栅格来简化环境建模。每个栅格用序号标识,无障碍物的栅格为可行栅格(标记为0),有障碍物的栅格为不可行栅格(标记为1)。栅格的尺寸根据障碍物尺寸和安全距离设置。通过障碍物膨胀,可以确保机器人在路径规划时避开障碍物。
在20x20的栅格环境中,每个栅格的坐标通过以下公式计算:
x=mod(Ni/N)−0.5
x = \text{mod}(N_i / N) - 0.5
x=mod(Ni/N)−0.5
y=N−ceil(Ni/N)+0.5
y = N - \text{ceil}(N_i / N) + 0.5
y=N−ceil(Ni/N)+0.5
其中,NiN_iNi 是栅格的序号,NNN 是每列的栅格数量。栅格中心位置作为其在坐标系中的坐标。路径规划问题转化为在栅格地图上寻找从起始点到目标点的有序栅格子集,这些栅格子集的中心连线即为规划路径。
参考文献:
[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/2
for j=1:20
m=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;