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

2024-04-27 10:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试验一种遗传搜索算法,在随机构建初始种群,然后选择前两个最合适的条目后,我需要将它们“配对”(使用一些随机变异)以创建64个 “孩子们”。交叉部分,此处解释:

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

看起来很容易理解,但我似乎不知道如何在Python中实现它。如何实现两个整数的交叉


Tags: tohttpscomexample孩子条目交叉introduction
2条回答
def crossover(a, b, index):
    return b[:index] + a[index:], a[:index] + b[index:]

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

这是一个名为crossover的函数,它包含两个父节点和一个交叉点。父项应该是相同长度的整数列表。交叉点是基因交换之前的点,正如你链接到的文章中所定义的那样。 它返回父母的两个子女

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点跨越它们,并将这些儿童添加到人口中

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]
]

相关问题 更多 >