2024-04-27 10:20:33 发布
网友
我正在试验一种遗传搜索算法,在随机构建初始种群,然后选择前两个最合适的条目后,我需要将它们“配对”(使用一些随机变异)以创建64个 “孩子们”。交叉部分,此处解释:
https://towardsdatascience.com/introduction-to-genetic-algorithms-including-example-code-e396e98d8bf3
看起来很容易理解,但我似乎不知道如何在Python中实现它。如何实现两个整数的交叉
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] ]
应该比James的解决方案快一点,因为这个解决方案让Python完成所有的工作
这是一个名为crossover的函数,它包含两个父节点和一个交叉点。父项应该是相同长度的整数列表。交叉点是基因交换之前的点,正如你链接到的文章中所定义的那样。 它返回父母的两个子女
下面是一些演示其用法的代码。它创建一个由两个长度为10的列表组成的总体,一个列表只有0,另一个列表只有1。它在第4点跨越它们,并将这些儿童添加到人口中
上面的输出是:
相关问题 更多 >
编程相关推荐