Техника кроссовера в генетическом алгоритме

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

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

1

Решение

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

2

Другие решения

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

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

введите описание изображения здесь

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

1

По вопросам рекламы [email protected]