Вот функция, называемая кроссовером, которая принимает двух родителей и точку кроссовера. У родителей должны быть списки целых чисел одинаковой длины. Точка пересечения - это точка, до которой происходит обмен генами, как определено в статье, с которой вы связаны. Он возвращает двух потомков родителей.
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]
]