我在字符串或文本的上下文中熟悉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个空间中的点表示的染色体(每个轴是一个基因):
ParentA = [19, 58, 21, 54]
ParentB = [65, 21, 59, 11]
通过为后代交换父母双方的轴来应用交叉是否合适?
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)
我只是不确定如何将遗传算法应用于这样的数字数据。我知道我需要通用航空,但不知道如何应用运营商。例如,考虑使二维Rastrigin函数最小化的问题:搜索空间在每个维度上为[-512, 512]
,而适应度函数为Rastrigin函数。我不知道我在这里描述的操作员如何帮助找到更适合的染色体。
就其价值而言,精英选择和种群初始化似乎很简单,我唯一的困惑是交叉和变异算子。
我已经在这里描述了使用突变和交叉率对连续的数值数据进行遗传算法的实现。优化问题是二维的Styblinski-Tang函数,因为它易于绘制。我也在使用标准的精英和锦标赛选择策略。
我发现总体上的最佳适应度确实可以很好地收敛到一个解决方案,但平均适应度并不是真的。
[这里,我已经绘制了十代的搜索空间:黑点是候选解决方案,红色'x'是全局最优值:]]
正如我所描述的,交叉算子似乎工作得很好,但是突变算子(将染色体的x或y位置中的一个或两个都随机化)似乎会产生十字准线和交叉影线图案。
我在50个维度上进行了试验以延长收敛时间(因为在二维中它收敛了一代,所以绘制了它:
这里y轴表示解与全局最优解有多接近(因为已知最优解),所以它只是分数actual output / expected output
。这是一个百分比。绿线是最佳人群(约96-97%的目标),蓝线是平均人口(波动65-85%的目标)。
这证实了我的想法:变异算子并没有真正影响总体,但是确实意味着总体平均值永远不会收敛,并且会上下波动。
所以我对悬赏金的问题是,除了基因随机化之外,还可以使用哪些突变算子?
只需添加:
之所以问这个问题,是因为我对使用GA优化神经网络权重来训练网络来代替反向传播感兴趣。如果您对此有所了解,那么任何详细的资料来源也会回答我的问题。我在字符串或文本的上下文中熟悉GA,但对数字数据不熟悉。对于字符串,我了解如何应用交叉和突变:ParentA = abcdef ParentB = uvwxyz使用one -...
我想您可以采取许多不同的方式,这取决于您的特定用例。