Единая основанная на заказе реализация кроссовера - PullRequest
2 голосов
/ 17 октября 2019

Я пытаюсь реализовать пересечение на основе унифицированного порядка, в котором должна использоваться логика перемешивания, например:

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...