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

问题描述 投票:-1回答:2

我正在尝试一种遗传搜索算法,并在随机建立初始种群之后,然后选择前两个最适合的条目,我需要对其进行“配对”(带有一些随机突变)以创建64“孩子们”。交叉部分,在这里说明:

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

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

python genetic-algorithm
2个回答
1
投票
def crossover(a, b, index): return b[:index] + a[index:], a[:index] + b[index:]
应该比James的解决方案快很多,因为这可以让Python完成所有工作!

0
投票
这里是一个称为交叉的函数,需要两个父对象和一个交叉点。父级应为长度相同的整数列表。交叉点是交换基因之前的点,如您链接的文章所定义。它返回父母的两个后代。

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

© www.soinside.com 2019 - 2024. All rights reserved.