Machine learning 遗传算法如何利用数值数据进化出解?

Machine learning 遗传算法如何利用数值数据进化出解?,machine-learning,numeric,genetic-algorithm,Machine Learning,Numeric,Genetic Algorithm,我熟悉字符串或文本上下文中的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) Child

我熟悉字符串或文本上下文中的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-空间中的点(每个轴是一个基因):

通过为后代切换双亲的轴来应用交叉是否合适

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维中最小化Rasigigin函数的问题:在每个维度中搜索空间是代码> [-512, 512 ] < /代码>,并且适应度函数是Rasigigin函数。我不知道我在这里描述的操作符如何帮助找到更合适的染色体

值得一提的是,精英选择和群体初始化似乎很简单,我唯一的困惑是交叉和变异算子

悬赏更新 正如我在这里所描述的,我使用变异和交叉率为连续的数值数据实现了遗传算法。优化问题是二维的Styblinski-Tang函数,因为它很容易作图。我也使用标准的精英和锦标赛选择策略

我发现总体最佳适应度确实很好地收敛到一个解,而平均适应度并不是

在这里,我绘制了十代人的搜索空间:黑点是候选解决方案,红色的“x”是全局最优解:

正如我所描述的交叉算子似乎工作得很好,但是变异算子(将染色体的x或y位置都随机化,或者两者都随机化)似乎创建了交叉线和交叉图案填充图案

我在50维中运行以延长收敛时间(因为在两维中它在一代中收敛),并绘制了它:

在这里,y轴表示解决方案与全局最优值的接近程度(因为最优值是已知的),它只是实际输出/预期输出的一小部分。这是一个百分比。绿线是人口最好的(约96-97%的目标),蓝线是人口平均数(波动65-85%的目标)

这验证了我的想法:变异算子并没有真正最好地影响种群,但它确实意味着种群平均值永远不会收敛,并且会上下波动

所以我的悬赏问题是除了基因的随机化,还有什么变异算子可以使用


补充一点:我问这个问题是因为我对使用遗传算法优化神经网络权重以训练网络而不是反向传播感兴趣。如果您知道这方面的任何信息,任何详细说明的来源都可以回答我的问题。

我想您可以采用许多不同的方法,这取决于您的特定用例

对我来说,你的基因随机化似乎并不是特别错误。尽管更微妙的方法可能是只添加或删除预定义的
n
(或范围),而不是将其更改为全新的随机数


本文中,他们使用了一个随机生成器:例如,你可以考虑使用多项式变异,这是非常流行的算法中的默认算子和一些其他实数编码遗传算法。我也广泛地使用它。您可以找到它的完整描述(参见第2节)和python实现(搜索

mutPolynomialBounded

本质上,多项式概率分布用于扰动父解附近的解。它有一个参数η,控制突变株与亲本接近的可能性。突变体与亲本相似的可能性随着η的降低而降低。[20,100]是η的常见范围


你也可以考虑使用非均匀变异算子,其中,随着世代数的增加,变异的解决方案更接近父母而产生更好的收敛性。是一个例子(第21页)。

这不是一个糟糕的想法:与其将一个轴随机分配到整个搜索空间中的任何位置,不如在半径内设置一个位置。我认为,这应该是一个一般性的评论,而不是对这个陈述良好且详细的问题的回答。该问题自那时起已被编辑;请看历史。那很有趣!我尝试了我发现的两种不同的非均匀变异算子:一种变异率随着时间的推移而降低,另一种正如你所描述的。我想随着时间的推移,突变的程度应该会降低,因为早期的突变确实会促进多样性,但当找到最佳值时,就不需要了。后代中的低(或无)突变可能会使种群平均适应度也接近最优。对。另一种保持多样性的方法是多种群遗传算法;这里不是你想要的变异算子,但仍然有防止过早收敛的类似目的。一个实数编码版本和演示示例
ChildA = [12, 58, 59, 11] (1st gene mutated)
ChildB = [65, 89, 34, 54] (2nd and 3rd genes mutated)