演化计算是什么?模仿生物进化来求解优化问题
演化计算(Evolutionary Computation),也叫进化计算,是一类模仿生物进化过程来求解优化和搜索问题的计算方法。它借鉴了达尔文进化论中“物竞天择、适者生存”的思想:维护一群候选的解,让表现好的解有更多的机会“繁殖后代”,通过遗传和变异产生新的解,经过一代又一代的演化,逐步找到越来越好的答案。
基本的流程
演化计算的方法虽然各有不同,但大体遵循相似的流程。初始化:随机生成一群候选解,叫作种群,每个候选解叫作一个个体。评估:用一个适应度函数来评价每个个体的好坏,适应度就是要优化的目标,比如路线的总长度、设计方案的性能。选择:根据适应度挑选出一部分个体作为“父母”,适应度越高的个体被选中的机会越大,常用的方式有轮盘赌选择、锦标赛选择等。产生后代:通过交叉,把两个父代个体的部分信息组合起来产生新的个体;通过变异,对个体进行小的随机改变,引入新的可能性。更新种群:用新产生的个体替换种群中的部分或全部个体。重复以上步骤,直到找到足够好的解,或达到预定的代数。
主要的分支
遗传算法:由美国密歇根大学的约翰·霍兰德在 20 世纪 60 至 70 年代发展起来,他在 1975 年出版了《自然与人工系统中的适应》。遗传算法通常把解编码成二进制字符串等形式,强调交叉在产生新解中的作用。进化策略:由德国的 Ingo Rechenberg 和 Hans-Paul Schwefel 在 20 世纪 60 年代提出,最初用于工程设计中的实验优化,主要处理实数参数,强调变异,并能让变异的幅度本身也随演化自适应地调整。CMA-ES 是其中非常成功的现代算法。进化规划:由 Lawrence Fogel 在 20 世纪 60 年代提出,最初用于演化有限状态机。遗传编程:由 John Koza 在 20 世纪 90 年代推广,演化的对象不是参数,而是计算机程序或数学表达式本身,常用树结构来表示。此外,差分进化、粒子群优化、蚁群算法等群体智能方法,也常被归入广义的演化计算或自然启发式算法的范畴。
优点和局限
演化计算的优点是:不需要目标函数可导,甚至不需要知道它的数学形式,只要能对一个候选解打分即可;适合处理多峰的问题,同时维护一群解,不容易陷入单个局部最优;可以处理离散、连续和混合类型的变量,以及组合优化问题;还天然适合并行计算。它的局限在于:需要大量地评估适应度,当每次评估都很昂贵时代价很高;通常不能保证找到全局最优解;参数,比如种群大小、交叉和变异的概率,需要调节;在可以求导的高维问题上,往往不如梯度下降高效。
应用
演化计算被用于工程设计,比如美国宇航局在 2006 年用演化算法设计了一款卫星天线,形状奇特但性能优良;调度和排班、路径规划;机器人的控制策略;以及在人工智能中,用于神经网络的结构搜索、超参数优化,演化神经网络的权重和拓扑结构,比如 NEAT 方法。2017 年,OpenAI 的研究者还展示了进化策略可以作为强化学习的一种可扩展的替代方法。近年来,也有研究把大语言模型与演化算法结合起来,用大模型来生成和改进候选的程序或方案。