我试图自己实现遗传算法,优化两个向量。存在边界条件,其中a总是大于b。矢量的条目在1到15的范围内。 我的实现适用于1个向量,但遗传算法没有收敛2个向量。在物理模型中测试向量,其给出标准偏差,其应该在0处最小。可以达到该值并且我试图用我写的遗传算法找到它。
我可以将问题分解为重组和突变: 当重组或突变b时,有可能获得大于a。测试矢量的物理模型此时不再有意义,所以适应值下降,虽然之前很好。
对于突变,我可以用坏样式解决问题,只允许保持b小于a的值。对于重组虽然我不知道如何解决这个问题而不打破遗传算法的想法。
e.g。父母是:
a1 = 1,1,9,9和a2 = 9,9,1,1。
b1 = 1,3,1,3和b2 = 3,1,3,1
A1' = 1,1,1,1和a2' = 9,9,9,9
B1' = 1,3,3,1和b2' = 3,1,1,3
然后b1'大于a1'。
算法收敛到一个点,它会跳回到低适应度水平,因为解a和b看起来彼此非常相似,所以算法收敛到某一点,失败然后重新开始。
我认为我在某个地方错过了这一点,但无法找到它。