如何使用遗传算法优化特征集合
遗传算法优化特征集合的使用方法
先决条件
遗传算法是一个高级话题。尽管本文已经准备好考虑到初学者的要求,但读者在开始阅读本文之前应该熟悉编程和基本算法的基础知识。此外,考虑提高数学技能,这将有助于理解示例。
优化简介
优化是提高性能的艺术。在任何给定的过程中,我们会遇到一组输入和输出,如图所示。
优化涉及寻找产生最有利输出结果的输入值。有利的概念可以根据具体的问题而变化,但在数学上,通常涉及通过调整输入参数来最大化或最小化一个或多个目标函数。
让我们考虑 y=f(x);如果 f’(x)=0 在某个点 x=x*,那么最优值(最大或最小值)或拐点存在于那个点。
经过仔细观察,我们发现第一个非零高阶导数通常被表示为’n’,如下所示:
- 如果 n 是奇数,x* 是一个拐点。
- 否则,x* 是一个局部最优点。
基于这个思想的推广…
- 如果下一个高阶导数的值为+ve,x* 是一个局部最小点。
- 如果下一个高阶导数的值为-ve,x* 是一个局部最大点。
例如:
优化原理
考虑下面的约束优化问题:
根据约束的特点,确定了一个可行区域。位于可行区域内的任意点都被视为最优解的潜在候选。位于可行区域边界上的点被归类为边界点。因此,最优解可以是位于可行区域内的自由点或边界点。基于梯度的方法,尤其是基于导数的方法,一直是解决无约束优化问题的传统手段。然而,重要的是要注意它们存在一些限制和缺点。
遗传算法是什么?
在历史长河中,大自然一直为人类提供丰富的灵感。遗传算法(Genetic Algorithms,GAs)是根据自然选择和遗传原理而构建的搜索算法。遗传算法是计算机科学中进化计算的一个子领域。
遗传算法最初由约翰·霍兰德(John Holland)及其在密歇根大学的学生和同事们开发,特别是戴维·E·戈尔德伯格(David E. Goldberg)。自推出以来,遗传算法已被应用于各种优化问题,并取得了很高的成功率。
在遗传算法中,建立了一个潜在解决方案的种群。这些解决方案经历重组和突变的过程,模拟自然遗传的原理,从而产生新的后代。这个迭代的过程跨越多个世代。每个个体或候选解都根据其适应度值进行评估,适应度值通常由其目标函数的性能确定。适应度较高的个体更有可能繁殖并产生更有能力的后代。这符合达尔文的”适者生存“理论。
这样,遗传算法不断演化和改进个体或解决方案的质量,直到达到预定的停止准则。遗传算法在操作中具有一定的随机性,但它们优于简单的随机局部搜索方法,因为它们还利用历史信息来引导对最优解的搜索。
为什么选择遗传算法?
遗传算法能够在很短的时间内提供一个”足够好“的解决方案,特别是在处理大规模问题时,传统算法可能很难提供解决方案。遗传算法提供了一个通用且灵活的框架来解决复杂的优化问题。以下是使用遗传算法的一些优势:
- 多功能性:遗传算法可以应用于各种优化问题,使其成为工程、金融、生物学等各个领域的通用选择。
- 全局搜索:遗传算法擅长探索整个搜索空间,使其能够找到局部搜索算法可能错过的解决方案。这使得它们适用于具有多个局部最优解的问题。
- 无需导数:与许多优化技术不同,遗传算法不需要目标函数的导数,因此可以应用于具有非连续、嘈杂或复杂适应度地形的问题。
- 并行性:遗传算法可以有效地进行并行化,从而在高性能计算系统上加快收敛速度。
- 随机性:遗传算法的随机性确保它们能够逃离局部最优解并更彻底地探索搜索空间。
- 适应性:遗传算法可以随着时间的推移适应和调整其搜索策略,这对于动态或变化的优化问题特别有用。
- 解决方案多样性:遗传算法维护一个多样化的解决方案种群,这有助于找到各种可能的解决方案,并防止过早收敛。
- 可解释性:在某些情况下,遗传算法可以揭示解决方案空间的结构,帮助用户更好地理解问题。
- 组合优化问题:遗传算法非常适用于组合优化问题,例如旅行推销员问题和作业调度。
- 并行演化:遗传算法可以同时进化多个解决方案,这在多目标优化和其他复杂场景中非常有价值。
需要注意的是,虽然遗传算法具有这些优势,但并不总是每个优化问题的最佳选择,其性能也会因问题特性的不同而有所变化。正确的问题分析和算法选择对于实现最佳结果至关重要。
遗传算法术语
- 种群和代数:种群是一组个体的数组。例如,如果种群的大小为100,适应度函数中的变量数为3,则可以用一个100×3的矩阵表示种群。同一个个体可以出现在种群中的多个行中。例如,个体(2, -3, 1)可以出现在数组的多行中。遗传算法在每次迭代中对当前种群进行一系列计算,以产生新的种群。每个连续的种群称为新的代数。
- 父代和子代:为了创建下一代,遗传算法选择当前种群中的某些个体(称为父代),并使用它们来创建下一代的个体(称为子代)。通常,算法更有可能选择适应度值较好的父代。
- 个体:个体是可以应用适应度函数的任何点。个体的适应度函数值是其得分。例如,如果适应度函数为:
- f(x1,x2,x3)=(2×1+1)2+(3×2+4)2+(x3−2)2
- 向量(2, -3, 1),其长度为问题中的变量数,是一个个体。个体(2, –3, 1)的得分为f(2, –3, 1) = 51。
个体有时被称为基因组或染色体,个体的向量条目被称为基因。
- 适应度函数:适应度函数是要优化的函数。对于标准的优化算法,这被称为目标函数。
- 适应度值和最佳适应度值:个体的适应度值是该个体的适应度函数值。种群的最佳适应度值是种群中任何个体的最小适应度值或最大适应度值,具体取决于优化问题。
- 收敛:遗传算法达到满足终止准则的解决方案的点。这可以是最优或接近最优的解决方案。
- 搜索空间:优化问题的所有可能解的集合。
- 多样性:多样性是指种群中个体之间的平均距离。如果平均距离很大,则种群具有高多样性;否则,它具有低多样性。多样性对于遗传算法至关重要,因为它使算法能够搜索更大的空间区域。
- 基因型:染色体的内部表示(例如,二进制或数值字符串)。
- 表型:由染色体表示的实际解决方案。它是通过解码基因型获得的。
- 交叉率:两个父代进行交叉以产生下一代的子代的概率。
- 突变率:基因(或染色体的一部分)在新一代中发生突变的概率。
基本遗传算法(GA):伪代码
基本遗传算法(GA)的详细策略
编码和种群
染色体在搜索空间中对解决方案进行编码
- 通常是由0和1组成的字符串
- 如果l是字符串的长度,则不同染色体(或字符串)的数量为2的l次方
种群
- 一代中的一组染色体
- 种群大小通常是固定的
- 常见的做法是随机选择初始种群。
适应度评估
- 适应度/目标函数与每个染色体相关联。
- 这表示编码解决方案的好坏程度。
- 如果要解决最小化问题,则适应度=1 / 目标 或 适应度= -1 * 目标。
- 如果要解决最大化问题,则适应度=目标。
选择
- 对好的字符串进行更多的复制。
- 对坏的字符串进行较少的复制。
- 比例选择方案。
- 复制次数与适应度成正比。
- 在一定程度上模拟自然选择过程。
- 轮盘赌选择和锦标赛选择是两种经常使用的选择方法。
交叉
- 遗传信息的交换。
- 在随机选择的父染色体之间进行。
- 单点交叉和均匀交叉是最常用的方案。
- 概率操作。
变异
- 遗传结构的随机改变。
- 引入遗传多样性到种群中。
- 探索新的搜索区域。
- 对二进制基因的突变涉及对位的简单否定。
- 对实数编码基因的突变可以有多种方式定义。
- 概率操作。
精英主义
- 一种策略,将最好的个体保留在下一代中。
- 最适应的个体保证在遗传操作(如交叉或变异)之前能够存活并成为下一代的一部分。
- 精英主义确保迄今找到的最佳解决方案不会在进化过程中丢失,并且可以继续对种群做出贡献。
- 它确保稳定的改进和加速的收敛。
终止准则
- 选择、交叉和变异的循环重复多次,直到以下情况之一发生。
- 种群的平均适应度值在几代中保持不变或相对稳定。
- 至少有一个字符串在种群中达到所需的目标函数值。
迭代次数大于某个阈值(最常用)。
遗传算法的变种
- 差分进化(DE):DE是专门为实值优化问题设计的遗传算法变体。它使用基于向量的变异和重组操作。
- 分布估计算法(EDAs):EDAs模型和学习种群中有前途的解的概率分布,并使用该分布生成新的候选解。
- 自适应遗传算法:允许算法根据进化种群的特征调整其遗传算子(变异率、交叉类型),从而实现高效的收敛。
- 聚群算法:这些算法专注于在单次运行中找到多个不同的解决方案,通常用于具有多个峰值或模式的适应度函数空间。
- 多目标进化算法(MOEAs):MOEAs解决具有多个冲突目标的问题。它们旨在找到一组帕累托最优解,代表这些目标之间的权衡。
- 混合算法:将遗传算法与其他优化技术、机器学习模型或领域特定启发式方法集成,以提高性能和鲁棒性。
我希望提供对遗传算法和优化的简要概述。但是,如果您有任何具体问题或需要更详细的信息,请随时在评论中提问。
感谢您的时间和关注!您可以通过Linkedin与我联系。