在优化算法研究领域,如何客观评估不同算法的性能一直是个关键问题。23个基准测试函数(F1-F23)作为国际进化计算会议(CEC)推荐的标准化测试集,为算法比较提供了统一平台。这套测试函数涵盖了单峰、多峰、可分、不可分等多种特性,能够全面检验算法的探索能力(全局搜索)和开发能力(局部优化)。
我最近在无人机动态路径规划项目中,就深度使用了这套测试函数来验证改进的粒子群算法(PSO)效果。测试函数就像算法界的"体能测试",通过标准化的"考核项目"(如F1的球面函数、F10的Rastrigin函数等),我们可以量化比较GRO、NOA、MA等七种算法的实际表现。
这23个函数根据数学特性可分为三大类:
单峰函数(F1-F5):
多峰函数(F6-F12):
复合函数(F13-F23):
实际选择建议:新算法验证时,建议先测试F1、F10、F15这三个典型函数,它们分别代表了单峰、多峰和复合函数的特性。
以文中展示的F10(Rastrigin函数)为例,其数学表达式为:
matlab复制function f = rastrigin(x)
n = length(x);
f = 10*n + sum(x.^2 - 10*cos(2*pi*x));
end
这个函数的特点是:
文中使用的统一参数设置:
matlab复制SearchAgents_no = 100; % 种群规模
Max_iteration = 100; % 最大迭代次数
dim = 30; % 问题维度(默认)
这些参数的选择依据:
以PSO算法为例,关键实现逻辑如下:
matlab复制function [Best_pos, Best_score, Convergence_curve] = PSO(SearchAgents_no, Max_iteration, lb, ub, dim, fobj)
% 初始化粒子位置和速度
positions = initialization(SearchAgents_no, dim, ub, lb);
velocities = zeros(SearchAgents_no, dim);
% 参数设置
w = 0.9; % 惯性权重
c1 = 2.05; % 个体学习因子
c2 = 2.05; % 社会学习因子
% 迭代优化
for iter = 1:Max_iteration
% 评估适应度
fitness = fobj(positions);
% 更新个体和全局最优
[current_best, idx] = min(fitness);
if current_best < Best_score
Best_score = current_best;
Best_pos = positions(idx,:);
end
% 更新速度和位置
r1 = rand(SearchAgents_no, dim);
r2 = rand(SearchAgents_no, dim);
velocities = w*velocities + c1*r1.*(pbest-positions)...
+ c2*r2.*(repmat(Best_pos,SearchAgents_no,1)-positions);
positions = positions + velocities;
% 记录收敛曲线
Convergence_curve(iter) = Best_score;
end
end
从文中展示的F10测试结果可以看出:
收敛速度:
最终精度:
稳定性:
实测建议:对于无人机路径规划这类实时性要求高的场景,可优先考虑GRO或PSO;对精度要求高的离线优化,NOA可能更合适。
文中使用的统一接口函数:
matlab复制function [lb, ub, dim, fobj] = Get_Functions_details(Function_name)
switch Function_name
case 'F1'
fobj = @F1;
lb = -100;
ub = 100;
dim = 30;
case 'F10'
fobj = @F10;
lb = -5.12;
ub = 5.12;
dim = 30;
% 其他函数定义...
end
end
文中结果图表的生成代码示例:
matlab复制% 绘制收敛曲线
figure('Position',[500 500 660 290])
semilogy(Convergence_curve,'Color','r','LineWidth',2)
title('Convergence curve')
xlabel('Iteration');
ylabel('Best score');
grid on;
box on;
legend('PSO')
% 绘制搜索空间
if dim == 2
figure;
x = linspace(lb(1), ub(1), 100);
y = linspace(lb(2), ub(2), 100);
[X,Y] = meshgrid(x,y);
Z = arrayfun(@(x,y) fobj([x y]), X, Y);
surf(X,Y,Z,'EdgeColor','none');
hold on;
plot3(Best_pos(1),Best_pos(2),Best_score,'ro','MarkerSize',10);
end
在实际的无人机动态路径规划中,我们可以这样应用测试函数:
环境建模:
算法选择:
matlab复制% 根据环境复杂度选择算法
if environment == 'simple'
Algorithm = @PSO;
else
Algorithm = @NOA;
end
参数调优:
算法早熟收敛:
计算耗时过长:
matlab复制parfor i = 1:SearchAgents_no
fitness(i) = fobj(positions(i,:));
end
高维问题优化:
基于这个测试框架,还可以进行以下深入探索:
混合算法设计:
matlab复制function Hybrid_Algorithm
% 前期使用GRO快速探索
% 后期切换为NOA精细开发
end
动态环境测试:
实际工程问题映射:
这套测试框架的价值不仅在于算法比较,更重要的是它建立了一个标准化的评估体系。我在最近的多旋翼无人机集群控制项目中,就通过修改F17函数的拓扑结构,成功模拟了城市峡谷环境下的路径规划场景,这对算法选型提供了重要参考。