Python: 如何实现两个整数的交叉?

Python: how to implement crossover of two integers?

我正在试验一种遗传搜索算法,在随机构建初始种群,然后选择最适合的两个条目后,我需要 'mate' 它们(带有一些随机突变)来创建 64 'children'。交叉部分,在这里解释:

https://towardsdatascience.com/introduction-to-genetic-algorithms-including-example-code-e396e98d8bf3

似乎很容易理解,但我似乎无法弄清楚如何在 Python 中实现它。如何实现两个整数的交叉?

这是一个名为交叉的函数,它需要两个 parents 和一个交叉点。 parents 应该是相同长度的整数列表。交叉点是基因交换之前的点,如您链接到的文章中所定义。 它returnsparents的两个后代。

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 的列表组成的群体,一个只有 0,另一个只有 1。它在第 4 点将它们交叉,并将 children 添加到总体中。

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]
]
def crossover(a, b, index):
    return b[:index] + a[index:], a[:index] + b[index:]

应该比 James 的解决方案快很多,因为这个让 Python 完成所有工作!