the bad news
-
定义:盲目搜索目标解在巨大搜索的空间里,几乎不可能成功,就像大海捞针。就算是代表同一个元素,但是因为表示形式不同,搜索的空间也同样巨大。
-
解决办法是需要利用问题和结构信息:
-
启发式与元启发式:GA/DE/PSO/SA/ACO 等,通过选择、交叉/变异、信息素、速度更新等逐步偏向更优区域
-
局部改进:2-opt/3-opt、梯度/拟牛顿、CMA-ES 等在有结构时快速细化
-
先验与约束:缩小可行域、合理初始化、变量缩放与降维
-
并行与代理:批量评估、多岛模型、贝叶斯优化/代理模型减少昂贵评估次数
-
FLOPS
-
定义:指的是单精/双精浮点运算每秒,也就是原始算力
-
面临问题:
-
指数级搜索空间:前面说的NP-hard或高维优化,即使EFLOPS也难以穷举
-
成本不止算力:数据搬运、缓存/带宽、分布式通信、I/O 会成为瓶颈
-
目标函数昂贵:一次评估可能要跑复杂仿真/训练模型,单次就耗时
-
-
工程应对:
-
并行化:批评估、种群算法天然并行(异步/岛模型),利用多核/GPU/集群
-
算法层优化:减少评估次数比提升每次速度更关键。用启发式、局部搜索、早停、剪枝
-
代理/多保真:Bayesian/高斯过程、随机特征、低保真仿真加速筛选,再用高保真精修
-
内存与数据布局:向量化、混合精度、减少数据复制,提高算力利用率
-
复杂度管理:降维、问题分解、参数化设计,尽量把指数问题"变小"
-
一点交叉
-
定义:在遗传算法中,交叉是用来模拟生物遗传过程中染色体之间基因组合的操作,目的是产生新的个体(下一代)。而一点交叉的具体做法是,在两个父代染色体的同一位置(交叉点)切开,然后交换切点后的基因段,从而生成两个新的子代。
-
实现过程:
-
任选两个父代染色体
-
随机产生一个交叉点
-
以该点为界,左侧来自父本A,右侧来自父本B(或反之),拼接成子代
-
-
作用:
-
重组父代的"基因片段",把各自的优良部分组合到一起,产生潜在更优的解
-
比无性复制更能探索新的组合结构
-
遗传算子
-
选择:
-
作用:把搜索偏向"更有前景"的个体,强化利用
-
风险:过强会降低遗传多样性,导致早熟收敛
-
调参:降低锦标赛规模/精英数;引入随机保留
-
-
交叉:
-
作用:重组优秀"基因块"(Building Blocks),是GA的主要搜索动力,促进在解空间内做有意义的大步跳跃
-
对多样性的影响:本身中性,取决于与选择/编码配合
-
实务:选与编码匹配的交叉(实数SBX、排列PMX/OX等),pc常取0.6--0.9
-
-
变异:
-
作用:增加多样性、打破同质化,迫使算法探索当前焦点之外的区域
-
风险:过大像随机搜索,过小难以逃离局部最优风险:过大像随机搜索,过小难以逃离局部最优
-
调参:pm通常较小(如每位1/L或0.05--0.2),可自适应随代数或多样性调节
-
核心的平衡在于,选择提高利用,变异提高探索,交叉在二者间搭桥重组信息。一般会选择的经验策略是:前期弱选择+高交叉/略高变异促探索;后期加强选择、降低变异促收敛;配合精英保留与多样性监控/岛模型以稳健收敛