2013-12-05 10 views
1

Я в процессе написания небольшой генетической схемы алгоритма в C++. Мои хромосомы кодируются как битовые строки, где каждый ген имеет заданный размер. Каждая хромосома хранит свои гены один за другим в битовой строке. Теперь я ищу для реализации оператора кроссовера.Методика кроссовера в генетическом алгоритме

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

ответ

2

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

+0

Таким образом, я использую границы генов и всегда заменяю целые гены, а не биты. Это достаточно просто. Благодаря! –

+0

Я реализовал его в Python для размещения регуляторов напряжения в оптимальных местах в распределительных сетях с использованием CYME. Однако он был недостаточно эффективным по сравнению с основным «последовательным алгоритмом». – lucas92

+0

Я бы сказал, что это странно. Поправьте меня, если я ошибаюсь, но я бы не сказал, что тело - при воспроизведении - имеет способ узнать, где ген начинается и заканчивается. Поэтому я бы предложил рассматривать наименьшую единицу как аллель, а не ген. – pingul

1

Ответ на этот запрос лучше всего понять, посмотрев на биологические процессы, на которых основана GA.

Предполагая, что вы ищете одноточечный кроссовер, вам понадобится, как показано ниже; кроссоверы влияют на все хромосомы, а не только на «самую маленькую заменяемую единицу».

enter image description here

Подробная информация о более сложных сценариях кроссоверов, таких как многоточечные кроссовер или кольцевых кроссоверов можно найти на ресурсе Википедии here.