多项式变异(Polynomial Mutation)是一种连续变量的变异算子,广泛应用于进化算法(如 NSGA-II、MOEA/D)中。
其主要思想是:
通过一个可调的多项式分布实现“小扰动概率高,大扰动概率低”的变异机制,
以维持种群多样性并防止早熟收敛。
设个体的第 i 个决策变量为 xi,定义域为 [xi(L),xi(U)]。
变异操作为:
xi′=xi+δi⋅(xi(U)−xi(L))
其中 δi 是根据多项式分布生成的扰动因子,满足 δi∈[−1,1]。
扰动因子 δ 应满足以下条件:
- 对称性:正负方向等概率;
- 有界性:δ∈[−1,1];
- 可调性:通过参数控制扰动大小分布。
为此,选择如下形式的分布函数:
f(δ)∝(1−∣δ∣)ηm,δ∈[−1,1]
其中 ηm 为分布指数(mutation distribution index),
控制分布的尖锐程度。
归一化条件:
∫−11f(δ)dδ=1
由对称性,有:
2∫01C(1−δ)ηmdδ=1
解得归一化系数:
C=2ηm+1
于是 PDF 为:
p(δ)=2ηm+1(1−∣δ∣)ηm,δ∈[−1,1]

由定义:
F(δ)=∫−1δp(t)dt
F(δ)=21(1+δ)ηm+1
F(δ)=1−21(1−δ)ηm+1
由此可得整体的分段形式:
F(δ)=⎩⎨⎧21(1+δ)ηm+1,1−21(1−δ)ηm+1,δ∈[−1,0],δ∈[0,1].
令 u∼U(0,1) 为均匀随机数,
根据 u=F(δ) 反解得到 δ。
u=21(1+δ)ηm+1⇒δ=(2u)ηm+11−1
u=1−21(1−δ)ηm+1⇒δ=1−[2(1−u)]ηm+11
δ=⎩⎨⎧(2u)1/(1+ηm)−1,1−[2(1−u)]1/(1+ηm),u<0.5,u≥0.5.

为保证 xi′ 不超出可行域 [xi(L),xi(U)],可采用简单裁剪:
xi′=min(max(xi′,xi(L)),xi(U)).
这种方式直接截断越界结果,简单可靠。
但当 xi 靠近边界时,可行扰动区间明显不对称,
仍然按原始对称分布采样会造成无效扰动比例高。
为在靠近边界时仍保持正确分布与对称采样概率,
NSGA-II 在每个变量上重新计算可行扰动范围,并对分布进行条件化。
设:
δ1=xi(U)−xi(L)xi−xi(L),δ2=xi(U)−xi(L)xi(U)−xi.
则扰动 δ 的可行范围为:
δ∈[−δ1,δ2].
原始分布 p(δ)∝(1−∣δ∣)ηm 被截到 [−δ1,δ2]。
归一化常数为:
Z=1−21[(1−δ1)ηm+1+(1−δ2)ηm+1].
左、右两侧概率质量分别为:
pleft=2Z1−(1−δ1)ηm+1,pright=1−pleft.
令 u∼U(0,1),若 u<pleft,则 δ∈[−δ1,0];
否则 δ∈[0,δ2]。
左侧:
u′=pleftu,δ=[(1−δ1)ηm+1+(1−(1−δ1)ηm+1)u′]ηm+11−1.
右侧:
u′=prightu−pleft,δ=1−[(1−δ2)ηm+1+(1−(1−δ2)ηm+1)(1−u′)]ηm+11.
这样可确保:
- 当 xi 靠近边界时,有效扰动自动压缩;
- 当 xi 处于中间区间时,恢复到标准多项式变异分布。
实际中常用的 NSGA-II 实现,将条件截断的采样写成一个紧凑形式。
设:
mut_pow=ηm+11,δ1=xi(U)−xi(L)xi−xi(L),δ2=xi(U)−xi(L)xi(U)−xi.
随机生成 u∼U(0,1),则扰动 Δq 的计算为:
Δq=⎩⎨⎧[2u+(1−2u)(1−δ1)ηm+1]mut_pow−1,1−[2(1−u)+2(u−0.5)(1−δ2)ηm+1]mut_pow,u≤0.5,u>0.5.
最终得到变异后的变量:
xi′=xi+Δq⋅(xi(U)−xi(L)),
并进行边界裁剪(防止舍入误差或极端边界情况):
xi′=min(max(xi′,xi(L)),xi(U)).
✅ 该形式与严格推导的条件截断采样等价,
其中 δ1、δ2 自动约束可行变异范围,
从而实现数值稳定、结构简单的多项式变异。
| 参数 | 含义 | 典型取值 | 影响 |
|---|
| ηm | 变异分布指数 | 10~50 | 控制扰动幅度分布 |
| Pm | 变异概率 | 1/n 或 0.1 | 控制变异频率 |
| δ1,δ2 | 相对边界位置 | (0,1) | 控制可行变异范围 |
function x_new = polynomial_mutation(x, lower, upper, eta_m, p_m)
n = numel(x);
x_new = x;
for i = 1:n
if rand < p_m
xl = lower(i); xu = upper(i);
delta1 = (x(i) - xl) / (xu - xl);
delta2 = (xu - x(i)) / (xu - xl);
u = rand; mut_pow = 1 / (eta_m + 1);
if u <= 0.5
xy = 1 - delta1;
val = 2*u + (1 - 2*u)*xy^(eta_m + 1);
deltaq = val^mut_pow - 1;
else
xy = 1 - delta2;
val = 2*(1 - u) + 2*(u - 0.5)*xy^(eta_m + 1);
deltaq = 1 - val^mut_pow;
end
x_new(i) = x(i) + deltaq * (xu - xl);
x_new(i) = min(max(x_new(i), xl), xu);
end
end
end
| 项目 | 内容 |
|---|
| 核心思想 | 小变异多,大变异少 |
| 扰动控制 | 通过 ηm 调整分布陡峭度 |
| 生成方式 | 逆变换采样(Inverse Transform Sampling) |
| 边界处理 | min–max 裁剪(或更高级的条件截断) |
| 常见用途 | 连续变量优化(NSGA-II、MOEA/D 等) |