Я пытаюсь реализовать пересечение на основе унифицированного порядка, в котором должна использоваться логика перемешивания, например:
Initial:
a =[5, 1, 4, 6, 7, 8, 2, 3]
b =[6, 7, 5, 2, 8, 3, 4, 1]
Произвольно выбирайте позиции, которые больше не будут меняться. Оставшиеся позиции заполняются отсутствующими элементами, скопированными в порядке их появления в другом родительском элементе
a' =[ , 7, , 2, 8, , , 1]
b' =[ , 1, , 6, 7, , , 3]
Начиная со второго сайта кроссовера значения, которые еще не присутствуют в потомке от альтернативного родительского элемента (родитель, отличный от того, чьи значения копируются потомством в начальной фазе) в порядке их появления:
a = [5, 7, 4, 2, 8, 6, 3, 1]
b = [5, 1, 2, 6, 7, 8, 4, 3]
Я пытался реализовать это, но мой код не может содержать фиксированный индекс.
cross.py
import random
def uniformCrossover(indA, indB):
"""
Your Uniform Crossover Implementation
"""
crossprob = 0.1
size = min(len(indA), len(indB))
for i in range(size):
if random.random() < crossprob:
indA[i], indB[i] = indB[i], indA[i]
return indA, indB
a,b = uniformCrossover([5, 1, 4, 6, 7, 8, 2, 3], [6, 7, 5, 2, 8, 3, 4, 1])