人工智能 – 在遗传算法中执行向量交叉的最佳方法是什么?

我正在使用遗传算法“学习”草稿/跳棋AI的最佳参数.该参数存储在double的向量中.

[x1 x2 x3 x4 x5 x6 x7 x8 x9]

实际上我使用两种简单的方法进行交叉:一点交叉和两点交叉.不幸的是,在我看来,这种方法还不够好.

例如,如果我有一个遗传池:

[10 20 1]
[30 10 9]
[100 1 10]

如果x1值的理论最优值为50,我就无法通过交叉找到它.我唯一的希望是产生一个x1 = 50的突变,足以传递给下一代.

那么,有一种更好的方法可以使用数组来执行交叉吗?

最佳答案
您似乎遇到了编码问题,而不是交叉问题.如果你想要更多的染色体变异性 – 然后将数据编码为字节序列(甚至是位).
假设你有3个整数参数,那么你可以将它们表示为3 * 4 = 12字节向量:

{114,2,0,214, // first 32-bit int
14,184,220,7, // second 32-bit int
145,2,32,12,  // etc...
}

然后在交叉之后,你的整体会变化很大.你也可以不使用1/2点交叉,但是uniform crossover – 在每个染色体点你会随机决定你将使用什么基因版本.在这种情况下,您将获得更多的可变性.但请记住,交叉过多的可变性也是灾难性的,因为人口中的结果可能永远不会达到最优解,因为甚至次优解也会被交叉操作中的大的随机波动撕裂.稳定进化是这里的主要关键词.

另一种方法 – 不是使用遗传算法,而是改变染色体中所有基因的evolution strategy algorithms.但是,如果不同基因版本的数量不是很大,这种方法是可行的.所以这可能不适合您的浮动/双打问题.

HTH!

转载注明原文:人工智能 – 在遗传算法中执行向量交叉的最佳方法是什么? - 代码日志