Кроссовер двух особей разной длины - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть два человека, которым нужно выполнить кроссовер разной длины.

Люди могут быть такими, но могут быть намного дольше:

0 1 2 2 1 2 0 [0] 1 2 1 2 0 1 2 [0] 1 2 1 2 02 1 [1]

1 2 1 1 0 2 0 [0] 1 2 1 2 0 0 1 [1]

Однако мне нужно сохранить их первоначальную длину после кроссовера.Я также должен убедиться, что каждый 8-й бит (в квадратных скобках) не может быть равен 2. Длина каждого отдельного человека всегда будет кратна 8.

Как я могу выполнить кроссовер для этих лиц без изменения длины иструктура каждого из них?

Я не смог найти решение этой проблемы, поэтому любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 ноября 2018

Полагаю, вы говорите о одноточечном кроссовере .Вы можете сделать что-то вроде этого:

  1. Выберите случайное число от 1 до длины короче человека.Это будет ваша точка пересечения.
  2. Вырезать обоих особей в этой точке.
  3. Поменять их местами, как при обычном пересечении.

Пример:

0 1 2 2 1 2 0 [0] 1 2 1 2 0 1 2 [0] 1 2 1 2 0 2 1 [1]
1 2 1 1 0 2 0 [0] 1 2 1 2 0 0 1 [1]

Более короткая особь имеет длину 16 , поэтому мы генерируем случайное число от 1 до 16 -> например, 9

Точка кроссовера:

                   |
0 1 2 2 1 2 0 [0] 1|2 1 2 0 1 2 [0] 1 2 1 2 0 2 1 [1]
1 2 1 1 0 2 0 [0] 1|2 1 2 0 0 1 [1]
                   |

Поменять местами подразделы после точки:

                   |
0 1 2 2 1 2 0 [0] 1|2 1 2 0 0 1 [1]
1 2 1 1 0 2 0 [0] 1|2 1 2 0 1 2 [0] 1 2 1 2 0 2 1 [1]
                   |

Это позволяет сохранить длину обоих индивидуумов и сохранить правило «без скобок в скобках».

...