- 遗传算法教程
- 遗传算法 – 首页
- 遗传算法 – 简介
- 遗传算法 – 基础知识
- 基因型表示
- 遗传算法 – 种群
- 遗传算法 – 适应度函数
- 遗传算法 – 父代选择
- 遗传算法 – 交叉
- 遗传算法 – 突变
- 幸存者选择
- 终止条件
- 生命周期适应模型
- 有效实现
- 高级主题
- 应用领域
- 进一步阅读
- 遗传算法资源
- 遗传算法 - 快速指南
- 遗传算法 - 资源
- 遗传算法 - 讨论
基因型表示
在实现遗传算法时,最重要的决定之一是决定我们将用来表示解决方案的表示方法。已经观察到,不正确的表示会导致遗传算法的性能下降。
因此,选择合适的表示方法,对表型和基因型空间之间的映射进行适当的定义,对于遗传算法的成功至关重要。
在本节中,我们将介绍一些遗传算法中最常用的表示方法。但是,表示方法高度依赖于具体问题,读者可能会发现其他表示方法或此处提到的表示方法的混合可能更适合他的问题。
二进制表示
这是遗传算法中最简单和最广泛使用的表示方法之一。在这种表示方法中,基因型由位串组成。
对于一些问题,当解空间由布尔决策变量(是或否)组成时,二进制表示是自然的。例如,考虑0/1背包问题。如果有n个物品,我们可以用一个n个元素的二进制字符串来表示一个解,其中第x个元素表示是否选择(1)或不选择(0)第x个物品。
对于其他问题,特别是那些处理数字的问题,我们可以用它们的二进制表示来表示这些数字。这种编码的问题是不同的位具有不同的意义,因此突变和交叉算子可能产生不希望的结果。这可以通过使用**格雷编码**在一定程度上解决,因为一位的变化不会对解产生巨大的影响。
实值表示
对于我们想使用连续变量而不是离散变量来定义基因的问题,实值表示是最自然的。然而,这些实值或浮点数的精度受限于计算机。
整数表示
对于离散值的基因,我们不能总是将解空间限制为二进制的“是”或“否”。例如,如果我们想编码四个方向——北、南、东和西,我们可以将它们编码为**{0,1,2,3}**。在这种情况下,整数表示是可取的。
排列表示
在许多问题中,解由元素的顺序表示。在这种情况下,排列表示是最合适的。
这种表示的一个经典例子是旅行商问题 (TSP)。在这种问题中,旅行商必须游览所有城市,每个城市恰好访问一次,然后返回起始城市。必须使行程的总距离最小化。这个问题的解自然是一个所有城市的排序或排列,因此对这个问题使用排列表示是有意义的。