KnEA(Knee-point-driven Evolutionary Algorithm)简介

前言

提醒:

文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。

其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。
内容由AI辅助生成,仅经笔者审核整理,请甄别食用。

文章目录


KnEA(Knee-point-driven Evolutionary Algorithm)是一种针对超多目标优化问题(4个及以上目标)的高效算法,其核心在于通过识别拐点解(Knee Points)引导选择压力,平衡收敛性与多样性。以下从数学原理、关键公式到算法流程进行详细解析。

一、拐点解的数学定义与识别

1. 拐点的几何特征

拐点解是Pareto前沿上的"最凹点",其特点是:改进任一目标会导致其他多个目标显著恶化 。数学上,拐点解可通过目标空间中的梯度变化到超平面的距离来识别。

2. 自适应邻域搜索策略

KnEA采用自适应邻域策略动态调整搜索范围,避免手动设置参数。邻域大小由以下公式确定:
R g j = ( f max , g j − f min , g j ) ⋅ r g R_g^j = \left(f_{\text{max},g}^j - f_{\text{min},g}^j\right) \cdot r_g Rgj=(fmax,gj−fmin,gj)⋅rg

其中:

  • R g j R_g^j Rgj为第 g g g代第 j j j个目标的邻域半径;
  • f max , g j f_{\text{max},g}^j fmax,gj和 f min , g j f_{\text{min},g}^j fmin,gj为当前代第 j j j个目标的极值;
  • r g r_g rg为自适应缩放因子,随迭代更新:
    r g = r g − 1 ⋅ e − 1 − t g − 1 / T M r_g = r_{g-1} \cdot e^{-\frac{1 - t_{g-1}/T}{M}} rg=rg−1⋅e−M1−tg−1/T
    这里, T T T为预设参数(控制拐点比例), M M M为目标数, t g − 1 t_{g-1} tg−1为前一代拐点解占非支配解的比例。该公式确保当拐点比例不足时,邻域半径急剧缩小以聚焦搜索。
3. 拐点识别的核心公式

对于当前非支配解 x i x_i xi,计算其到极端直线 (由两个极值解确定的超平面)的距离:
d i = ∣ A ⋅ f ( x i ) + B ∣ ∥ A ∥ d_i = \frac{\left|A \cdot f(x_i) + B\right|}{\|A\|} di=∥A∥∣A⋅f(xi)+B∣

其中:

  • A A A和 B B B由极值解确定的超平面方程系数;
  • f ( x i ) f(x_i) f(xi)为解 x i x_i xi的目标向量。
    距离最大的解被视为当前邻域的拐点。

二、选择策略的三级比较机制

KnEA通过三级锦标赛选择实现高效筛选,公式化比较逻辑如下:

1. 第一级:支配关系

若解 a a a支配解 b b b(即 a a a的所有目标不劣于 b b b且至少一个目标更优),则选择 a a a;否则进入下一级。

2. 第二级:拐点优先级

若 a a a是拐点而 b b b不是,则选择 a a a;反之选择 b b b。若两者同为拐点或非拐点,则进入第三级。

3. 第三级:加权距离比较

计算解 a a a和 b b b的加权距离:
D ( p ) = ∑ j = 1 k 1 rank ( d p , j ) D(p) = \sum_{j=1}^k \frac{1}{\text{rank}(d_{p,j})} D(p)=j=1∑krank(dp,j)1

其中:

  • d p , j d_{p,j} dp,j为解 p p p到第 j j j近邻的欧氏距离;
  • rank ( d p , j ) \text{rank}(d_{p,j}) rank(dp,j)为距离的排序(距离越小,排名越高)。
    选择加权距离较大的解,以确保多样性。

三、算法流程与公式化步骤

1. 初始化

随机生成初始种群 P 0 P_0 P0,计算每个个体的目标值 f ( x i ) f(x_i) f(xi)。

2. 选择与遗传操作
  • 二进制锦标赛选择 :每次随机选2个个体,按三级比较规则生成 N N N个子代。
  • 交叉与变异:采用模拟二进制交叉(SBX)和多项式变异,公式与NSGA-II类似。
3. 非支配排序与拐点识别
  • 合并父代与子代,进行非支配排序,得到多个前沿 F 1 , F 2 , ... F_1, F_2, \dots F1,F2,...。
  • 对每个前沿,使用自适应邻域公式识别拐点解。
4. 环境选择
  • 优先保留拐点解,若数量不足 N N N,则从非拐点解中选择加权距离较大的补充:
    Selected = arg ⁡ max ⁡ x ∈ F last D ( x ) \text{Selected} = \arg\max_{x \in F_{\text{last}}} D(x) Selected=argx∈FlastmaxD(x)
    其中 F last F_{\text{last}} Flast为最后一个未被完全选中的前沿。

四、关键公式总结与应用场景

公式类型 核心公式 作用
邻域半径自适应调整 R g j = ( f max , g j − f min , g j ) ⋅ r g R_g^j = \left(f_{\text{max},g}^j - f_{\text{min},g}^j\right) \cdot r_g Rgj=(fmax,gj−fmin,gj)⋅rg 动态缩小搜索范围,聚焦拐点
拐点距离计算 d i = ∣ A ⋅ f ( x i ) + B ∣ ∣ A ∣ d_i = \frac{|A \cdot f(x_i) + B|}{|A|} di=∣A∣∣A⋅f(xi)+B∣ 量化解的拐点程度,识别局部拐点
加权距离比较 D ( p ) = ∑ j = 1 k 1 rank ( d p , j ) D(p) = \sum_{j=1}^k \frac{1}{\text{rank}(d_{p,j})} D(p)=∑j=1krank(dp,j)1 评估解的多样性,作为非拐点解的选择依据
环境选择策略 Selected = arg ⁡ max ⁡ x ∈ F last D ( x ) \text{Selected} = \arg\max_{x \in F_{\text{last}}} D(x) Selected=argmaxx∈FlastD(x) 补充非拐点解以维持种群多样性

五、算法优势与数学解释

  1. 选择压力增强:通过拐点优先级打破非支配解的平局,避免传统算法因非支配解过多导致的选择失效。
  2. 多样性隐式维护:加权距离基于邻域密度,天然倾向于选择分布稀疏的解,无需额外拥挤距离计算。
  3. 计算复杂度降低 :自适应邻域策略减少了对全局信息的依赖,时间复杂度为 O ( M N 2 ) O(MN^2) O(MN2)( M M M为目标数, N N N为种群规模),显著低于NSGA-III的 O ( M N 3 ) O(MN^3) O(MN3)。

六、参数设置与实践建议

  • 参数 T T T :通常设为0.1~0.3,控制拐点解占非支配解的比例。若目标数多(如 M ≥ 8 M \geq 8 M≥8),可适当增大 T T T以增加拐点数量。
  • 邻域半径初始值 r 0 r_0 r0:建议设为0.5,随迭代逐步缩小。
  • 加权距离的近邻数 k k k :一般取 k = 3 k=3 k=3,平衡局部与全局信息。
相关推荐
笙囧同学2 小时前
基于大数据技术的疾病预警系统:从数据预处理到机器学习的完整实践(后附下载链接)
大数据·网络·机器学习
paopaokaka_luck2 小时前
婚纱摄影管理系统(发送邮箱、腾讯地图API、物流API、webSocket实时聊天、协同过滤算法、Echarts图形化分析)
vue.js·spring boot·后端·websocket·算法·echarts
白熊1883 小时前
【大模型LLM】梯度累积(Gradient Accumulation)原理详解
人工智能·大模型·llm
愚戏师3 小时前
机器学习(重学版)基础篇(算法与模型一)
人工智能·算法·机器学习
F_D_Z4 小时前
【PyTorch】图像多分类项目部署
人工智能·pytorch·python·深度学习·分类
OEC小胖胖5 小时前
渲染篇(二):解密Diff算法:如何用“最少的操作”更新UI
前端·算法·ui·状态模式·web
找不到、了5 小时前
Java排序算法之<归并排序>
算法·排序算法
香蕉可乐荷包蛋5 小时前
排序算法 (Sorting Algorithms)-Python示例
python·算法·排序算法
Sylvia-girl5 小时前
排序查找算法,Map集合,集合的嵌套,Collections工具类
java·算法·排序算法
TT哇5 小时前
【分治】归并排序——排序数组(medium)
java·算法·排序算法