我正在尝试一种遗传搜索算法,并在随机建立初始种群之后,然后选择前两个最适合的条目,我需要对其进行“配对”(带有一些随机突变)以创建64“孩子们”。交叉部分,在这里说明:
似乎很容易理解,但是我似乎无法弄清楚如何在Python中实现它。如何实现两个整数的相交?
def crossover(a, b, index):
return b[:index] + a[index:], a[:index] + b[index:]
应该比James的解决方案快很多,因为这可以让Python完成所有工作!
def crossover(a, b, crossover_point):
a1 = a[:]
b1 = b[:]
for i in range(crossover_point):
a1[i], b1[i] = b1[i], a1[i]
return [a1, b1]
这是一些演示其用法的代码。它创建了一个包含两个长度为10的列表的填充,一个列表只有零,而另一个列表只有一个。它在第4点越过它们,并将子代添加到总体中。
def test_crossover(): a = [0]*10 b = [1]*10 population = [a,b] population += crossover(a,b,4) return population print (test_crossover())
上面的输出是:
[ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1] ]