Как выполнить кроссовер в 2-мерном массиве - алгоритм geneti c - PullRequest
2 голосов
/ 06 января 2020

У меня есть следующие две хромосомы, которые представлены в виде двумерного массива.

// First chromosome
[
  [ 12 45 23 ]
  [ 34 01 89 ]
  [ 33 90 82 ]
]

// Second chromosome
[
  [00 45 89 ]
  [00 00 34 ]
]

Ограничения на хромосому заключаются в том, что каждый массив в массиве хромосом должен оставаться вместе. Например, в первой хромосоме [ 12 45 23 ] должны оставаться вместе. Имея это в виду, я полагаю, что способ выполнить кроссовер с вышеуказанной структурой хромосомы - это случайный выбор горизонтальной точки кроссовера. например, следующее:

// First produced off-spring
[
  [ 12 45 23 ] // First chromosome
  [ 00 00 34 ] // Second chromosome
]

// Second produced off-spring
[
  [ 00 45 89 ] // Second chromosome
  [ 34 01 89 ] // First chromosome
  [ 33 90 82 ] // First chromosome
]

Является ли это правильным способом выполнения мутации в двумерном массиве хромосом, строки которого должны оставаться нетронутыми? Если это так, имеет ли этот метод заданное имя c? Или это подпадает под One-point кроссовер?

1 Ответ

1 голос
/ 31 января 2020

имеет ли этот метод заданное имя c? Или это относится к одноточечному кроссоверу?

В различных работах о алгоритмах переменной длины geneti c это называется кроссовер с одной точкой .

Для переменных Длина хромосомного пересечения одной точки часто предлагается в более общем виде: вы можете выбрать отдельную точку пересечения для каждой хромосомы. Например,

C1 = [ A1, A2, A3, A4, A5, A6]

C2 = [ B1, B2, B3, B4]

Выбрав точку пересечения 1 для C1 и 3 для C2, вы получите:

C1 = [ A1 | A2, A3, A4, A5, A6]

C2 = [ B1, B2, B3 | B4]


C1' = [A1 B4]
C2' = [B1, B2, B3, A2, A3, A4, A5, A6]

Это позволяет длине хромосомы начать расти. В зависимости от конкретной проблемы c это может быть требование или просто вздутие живота (в обоих случаях вам может потребоваться учитывать это в функции пригодности).

Это правильный способ выполнения мутации в двумерном массиве хромосом какие строки должны оставаться нетронутыми?

Это простой метод (поэтому хороший). Унифицированный кроссовер - это еще один простой подход.

Синапсинг кроссовера переменной длины: значимый кроссовер для геномов переменной длины (Бенджамин Хатт и Кевин Уорвик, IEEE Сделки по эволюционным вычислениям , том 11, № 1, февраль 2007 г.) описывает другие интересные (более сложные) возможности.

Кроссовер best очень , специфика проблемы c.

...