在工业自动化领域,机械臂轨迹规划是一个经典优化问题。传统方法如多项式插值、样条曲线等虽然稳定可靠,但在处理多自由度、多约束条件时往往难以获得全局最优解。2016年Mirjalili提出的鲸鱼优化算法(WOA)因其结构简单、参数少、收敛快等特点,在连续优化问题中展现出独特优势。
赵晶团队针对机械臂时间最优轨迹规划这一特定场景,发现标准WOA存在两个明显缺陷:一是随机初始化容易导致种群多样性不足;二是固定参数难以平衡探索与开发。他们提出的IWOA算法通过Tent混沌映射和非线性参数改进,使算法性能获得显著提升。
标准WOA的随机初始化采用MATLAB的rand函数:
matlab复制% 传统随机初始化
positions = rand(searchAgents_no,dim).*(ub-lb)+lb;
改进后的Tent混沌初始化核心代码如下:
matlab复制function positions = initialization_tent(searchAgents_no,dim,ub,lb)
% Tent混沌映射参数
mu = 0.5; % 混沌参数,0.5时遍历性最佳
x = rand(); % 初始随机种子
% 生成混沌序列
sequence = zeros(searchAgents_no, dim);
for i = 1:searchAgents_no
for j = 1:dim
x = tent_map(x, mu);
sequence(i,j) = x;
end
end
% 映射到解空间
positions = sequence.*(ub-lb)+lb;
end
function y = tent_map(x, mu)
if x < mu
y = x/mu;
else
y = (1-x)/(1-mu);
end
end
关键点:mu参数控制混沌序列的遍历均匀性,经过测试mu=0.5时能获得最佳的种群分布特性。相比随机初始化,混沌序列能使初始解更均匀覆盖整个搜索空间。
标准WOA的位置更新公式:
matlab复制D = abs(C.*X_rand - X(i,:));
X(i,:) = X_rand - A.*D;
IWOA引入指数衰减权重:
matlab复制% 非线性权重计算
w = w_max*(w_min/w_max)^(t/Tmax);
% 改进后的位置更新
D = abs(C.*X_rand - w.*X(i,:));
X(i,:) = X_rand - A.*D;
权重系数设计考虑:
原始WOA使用固定概率p=0.5决定包围或螺旋行为:
matlab复制if p < 0.5
% 包围猎物
else
% 螺旋更新
end
IWOA改进为对数衰减概率:
matlab复制p = 1 - log10(1 + 9*t/Tmax); % 从1衰减到0.1
这种设计使得:
代码集成了23个标准测试函数,分为三类:
| 类型 | 函数编号 | 特点 |
|---|---|---|
| 单峰函数 | F1-F7 | 测试收敛速度 |
| 多峰函数 | F8-F13 | 测试全局搜索能力 |
| 复合函数 | F14-F23 | 测试复杂地形适应性 |
matlab复制% 通用参数
searchAgents_no = 30; % 种群规模
Max_iter = 500; % 最大迭代次数
% IWOA特定参数
w_max = 0.9; % 最大惯性权重
w_min = 0.2; % 最小惯性权重
以F8(多峰函数)为例:

Tent混沌参数μ测试:
权重衰减曲线对比:
六自由度机械臂关节空间轨迹表示为:
matlab复制theta(t) = a0 + a1*t + a2*t^2 + a3*t^3
优化目标是最小化运动时间:
code复制min T
s.t. |θ'(t)| ≤ θ'_max
|θ''(t)| ≤ θ''_max
matlab复制penalty = 1e6*(max(0, abs(theta_dot) - theta_dot_max) + ...);
fitness = T + penalty;
matlab复制% 每个个体包含所有路径点的多项式系数
individual = [a0_1, a1_1, a2_1, a3_1, ..., a0_n, a1_n, a2_n, a3_n]
现象:种群过早收敛
解决方法:
matlab复制x = tent_map(x,mu) + 1e-6*randn();
现象:收敛曲线出现剧烈波动
调整策略:
matlab复制w = w_max*exp(-5*t/Tmax);
matlab复制% 添加相邻路径点位置约束
constraint = abs(theta(t_end) - theta_next(t_start));
在实际机械臂项目中,我们通过以下参数设置获得了最佳效果:
matlab复制pop_size = 50; % 稍大种群规模
max_iter = 1000; % 增加迭代次数
w_max = 0.8; % 较保守的初始权重
chaos_mu = 0.45; % 略低于理论最优值
这些调整基于大量实验数据,建议读者根据具体问题特性进行参数调优。一个实用的技巧是先用小规模测试快速确定参数范围,再进行精细调节。