Разница между этими двумя видами генотипа

В чем разница между использованием генотипа с N (произвольное > 0 число) хромосом с 1 (одним) геном и генотипом с 1 (одной) хромосомой с N (одинаковое число) генов?

В коде:

// 3 chromosomes with 1 gene each
Genotype.of(
    DoubleChromosome.of(0,1),
    DoubleChromosome.of(0,1),
    DoubleChromosome.of(0,1)
)

против

// 1 chromosome with 3 genes each
Genotype.of(
    DoubleChromosome.of(
       DoubleGene.of(0,1),
       DoubleGene.of(0,1),
       DoubleGene.of(0,1)
    )
)

Мой вопрос не о том, чтобы получить значения внутри функции eval, а о том, может ли она каким-то образом изменить генетический алгоритм (результат или эволюция).

ОБНОВЛЕНИЕ

Я использую библиотеку Jenetics.


person Dyorgio    schedule 19.04.2017    source источник
comment
Пожалуйста, добавьте библиотеку, которую вы используете, в описание.   -  person RonaldFindling    schedule 19.04.2017
comment
Привет, ребята, я пытался поставить его как тег (jenetics), но stackoverflow просит 1500 репутации, чтобы создать новый :).   -  person Dyorgio    schedule 19.04.2017
comment
Ваши операторы рекомбинации и мутации могут обрабатывать эти две ситуации по-разному.   -  person RonaldFindling    schedule 19.04.2017


Ответы (2)


Когда вы разрабатываете свой генетический алгоритм, вам нужно сопоставить ваши «гены» с одной или несколькими хромосомами. Похоже, ваш вопрос звучит так: «Каков эффект наличия нескольких хромосом?»

Во время фазы размножения новый (дочерний) геном создается из двух существующих (родительских) геномов. Вообще говоря, для каждой хромосомы вы делаете следующее:

  1. Выберите, с какой родительской хромосомы начать.
  2. Пройдите линейно вниз по хромосоме, копируя биты (или любой другой ваш кодон) в создаваемую дочернюю хромосому.
  3. В каждом бите переверните случайное число, чтобы увидеть, следует ли вам «перекреститься» с другой родительской хромосомой в качестве источника для копии.
  4. По мере копирования каждого бита переверните другое случайное число, чтобы увидеть, следует ли «мутировать» бит.

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

Если у вас очень низкий (или нулевой) уровень кроссинговера и у вас только одна хромосома, то каждый ребенок, скорее всего, будет копией одного из родителей или другого. Как правило, этого следует избегать, так как это устраняет важный компонент генетического смешения, который может значительно улучшить производительность генетического алгоритма.

Если у вас две хромосомы, то с вероятностью 50% ребенок будет копией одного из родителей и с вероятностью 50% будет половинкой.

Если у вас десять хромосом, то вероятность того, что ребенок будет копией одного из родителей, составляет один из 512.

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

Если у вас есть один «ген» на хромосому, то вы получите случайное смешивание родительских генов в каждом поколении. Это означает, что ваш генетический алгоритм не может отбирать хорошие комбинации генов, находящихся в одной и той же хромосоме. Как правило, этого следует избегать, так как это устраняет важный компонент генетического смешения, который может значительно улучшить производительность генетического алгоритма.

Мой совет — следовать примеру природы и использовать число хромосом в диапазоне от 5 до 50. Вы можете попробовать изменить число хромосом и посмотреть, как это повлияет на производительность вашего приложения.

person Rob    schedule 19.04.2017
comment
Самый полный ответ, спасибо! - person Dyorgio; 19.04.2017

Разница между этими двумя генотипами заключается в разрешенном диапазоне создаваемых двойных генов. В первой версии генам трех хромосом разрешено иметь разные диапазоны (которых на самом деле у них нет). Во втором варианте генотипы создают одну хромосому длиной 3, где все гены вынуждены иметь все одинаковый числовой диапазон (диапазон первого гена). Еще одно отличие состоит в том, что операции кроссинговера выполняются только на хромосомах с одинаковым индексом или числовым диапазоном.

Если ваши двойные гены имеют одинаковый числовой диапазон, то вторая версия обычно является лучшим выбором. Вы можете создать эту версию более осознанно:

Genotype.of(DoubleChromosome.of(0.0, 1.0, 3));
person Franz Wilhelmstötter    schedule 19.04.2017
comment
Хороший ответ, возобновленный, но с важной информацией, спасибо! - person Dyorgio; 19.04.2017