遗传算法如何用数值数据演化出解决方案?
How can genetic algorithms evolve solutions with numerical data?
我熟悉字符串或文本上下文中的 GA,但不熟悉数字数据。
对于字符串,我了解如何应用交叉和变异:
ParentA = abcdef
ParentB = uvwxyz
Using one-point crossover:
ChildA = abwxyz (pivot after 2nd gene)
ChildB = uvcdef
Using random gene mutation (after crossover):
ChildA = abwgyz (4th gene mutated)
ChildB = uvcdef (no genes mutated)
对于字符串,我有一个离散的字母表可以使用,但是这些运算符如何应用于连续的数字数据?
例如,染色体表示为4-space中的点(每个轴是一个基因):
ParentA = [19, 58, 21, 54]
ParentB = [65, 21, 59, 11]
通过切换后代的 parents 轴来应用交叉是否合适?
ChildA = [19, 58, 59, 11] (pivot after 2nd gene)
ChildB = [65, 21, 21, 54]
我觉得这似乎不错,但我天真的突变概念,即随机化一个基因,似乎并不正确:
ChildA = [12, 58, 59, 11] (1st gene mutated)
ChildB = [65, 89, 34, 54] (2nd and 3rd genes mutated)
我只是不确定如何将遗传算法应用于这样的数字数据。我知道 GA 需要什么,但不知道如何应用运算符。例如,考虑在 4 维中最小化 Rastrigin 函数的问题:搜索 space 在每个维度中是 [-512, 512]
并且适应度函数是 Rastrigin 函数。我不知道我在这里描述的运算符如何帮助找到更合适的染色体。
就其价值而言,精英选择和种群初始化似乎很简单,我唯一的困惑来自交叉和变异算子。
赏金更新
我使用这里描述的突变和交叉率为连续数值数据实现了 GA。优化问题是二维的Styblinski-Tang函数,因为它很容易作图。我也在使用标准的精英和锦标赛选择策略。
我发现群体最佳适应度确实很好地收敛到一个解,平均适应度却不是。
这里我绘制了十代的搜索 space:黑点是候选解,红色 'x' 是全局最优解:
我所描述的交叉运算符似乎运行良好,但变异运算符(随机化染色体的 x 或 y 位置,或两者都随机化)似乎会产生十字准线和交叉影线模式。
我在 50 个维度上做了一个 运行 以延长收敛时间(因为在两个维度上它会在一代中收敛)并绘制它:
这里的 y-axis 表示解决方案与全局最优解的接近程度(因为最优解是已知的),它只是分数 actual output / expected output
。这是一个百分比。绿线是人口最佳(大约 96-97% 目标),蓝色是人口平均水平(波动 65-85% 目标)。
这验证了我的想法:变异算子并没有真正对种群产生最好的影响,但确实意味着种群平均值永远不会收敛并且上下波动。
所以我的赏金问题是除了基因随机化之外还可以使用哪些突变算子?
补充一下: 我问这个问题是因为我对使用 GA 优化神经网络权重来训练网络代替反向传播很感兴趣。如果您对此有所了解,任何来源的详细信息也可以回答我的问题。
我想您可以采用多种不同的方式,这取决于您的特定用例。
你对基因的随机化对我来说似乎并不是特别错误。尽管更微妙的方法可能是仅添加或删除预定义的 n
(或范围),而不是将其更改为全新的随机数。
在本文中,它们按照您的建议进行变异,使用随机生成器:Genetic Algorithm for Solving Simple Mathematical Equality Problem。
您可以考虑使用多项式变异,这是非常流行的 NSGA-II algorithm and several other real-coded genetic algorithms as well. I have also used it extensively. You can find a full description of it here (see Section 2) and a python implementation here(搜索 mutPolynomialBounded
)中的默认运算符。
本质上,多项式概率分布用于扰动parent附近的解。它有参数 η,控制突变体接近 parent 的可能性。突变体与 parent 相似的可能性随着 η 的降低而降低。 [20, 100] 是 η.
的常见范围
您还可以考虑使用 non-uniform 变异算子,其中,随着代数的增加,变异解的生成更接近 parent 以实现更好的收敛。 Here 是示例(第 21 页)。
我熟悉字符串或文本上下文中的 GA,但不熟悉数字数据。
对于字符串,我了解如何应用交叉和变异:
ParentA = abcdef
ParentB = uvwxyz
Using one-point crossover:
ChildA = abwxyz (pivot after 2nd gene)
ChildB = uvcdef
Using random gene mutation (after crossover):
ChildA = abwgyz (4th gene mutated)
ChildB = uvcdef (no genes mutated)
对于字符串,我有一个离散的字母表可以使用,但是这些运算符如何应用于连续的数字数据?
例如,染色体表示为4-space中的点(每个轴是一个基因):
ParentA = [19, 58, 21, 54]
ParentB = [65, 21, 59, 11]
通过切换后代的 parents 轴来应用交叉是否合适?
ChildA = [19, 58, 59, 11] (pivot after 2nd gene)
ChildB = [65, 21, 21, 54]
我觉得这似乎不错,但我天真的突变概念,即随机化一个基因,似乎并不正确:
ChildA = [12, 58, 59, 11] (1st gene mutated)
ChildB = [65, 89, 34, 54] (2nd and 3rd genes mutated)
我只是不确定如何将遗传算法应用于这样的数字数据。我知道 GA 需要什么,但不知道如何应用运算符。例如,考虑在 4 维中最小化 Rastrigin 函数的问题:搜索 space 在每个维度中是 [-512, 512]
并且适应度函数是 Rastrigin 函数。我不知道我在这里描述的运算符如何帮助找到更合适的染色体。
就其价值而言,精英选择和种群初始化似乎很简单,我唯一的困惑来自交叉和变异算子。
赏金更新
我使用这里描述的突变和交叉率为连续数值数据实现了 GA。优化问题是二维的Styblinski-Tang函数,因为它很容易作图。我也在使用标准的精英和锦标赛选择策略。
我发现群体最佳适应度确实很好地收敛到一个解,平均适应度却不是。
这里我绘制了十代的搜索 space:黑点是候选解,红色 'x' 是全局最优解:
我所描述的交叉运算符似乎运行良好,但变异运算符(随机化染色体的 x 或 y 位置,或两者都随机化)似乎会产生十字准线和交叉影线模式。
我在 50 个维度上做了一个 运行 以延长收敛时间(因为在两个维度上它会在一代中收敛)并绘制它:
这里的 y-axis 表示解决方案与全局最优解的接近程度(因为最优解是已知的),它只是分数 actual output / expected output
。这是一个百分比。绿线是人口最佳(大约 96-97% 目标),蓝色是人口平均水平(波动 65-85% 目标)。
这验证了我的想法:变异算子并没有真正对种群产生最好的影响,但确实意味着种群平均值永远不会收敛并且上下波动。
所以我的赏金问题是除了基因随机化之外还可以使用哪些突变算子?
补充一下: 我问这个问题是因为我对使用 GA 优化神经网络权重来训练网络代替反向传播很感兴趣。如果您对此有所了解,任何来源的详细信息也可以回答我的问题。
我想您可以采用多种不同的方式,这取决于您的特定用例。
你对基因的随机化对我来说似乎并不是特别错误。尽管更微妙的方法可能是仅添加或删除预定义的 n
(或范围),而不是将其更改为全新的随机数。
在本文中,它们按照您的建议进行变异,使用随机生成器:Genetic Algorithm for Solving Simple Mathematical Equality Problem。
您可以考虑使用多项式变异,这是非常流行的 NSGA-II algorithm and several other real-coded genetic algorithms as well. I have also used it extensively. You can find a full description of it here (see Section 2) and a python implementation here(搜索 mutPolynomialBounded
)中的默认运算符。
本质上,多项式概率分布用于扰动parent附近的解。它有参数 η,控制突变体接近 parent 的可能性。突变体与 parent 相似的可能性随着 η 的降低而降低。 [20, 100] 是 η.
的常见范围您还可以考虑使用 non-uniform 变异算子,其中,随着代数的增加,变异解的生成更接近 parent 以实现更好的收敛。 Here 是示例(第 21 页)。