Предотвращение инбридинга и монокультуры в генетическом алгоритме (вопрос новичка) - PullRequest
6 голосов
/ 26 сентября 2011

Я пишу генетический алгоритм. Мое население быстро развивает монокультуру. Я использую небольшую популяцию (32 человека) с небольшим количеством дискретных генов (24 гена на человека) и методом перекрестного спаривания в одной точке. Объедините это со стратегией выбора колеса рулетки, и легко увидеть, как все генетическое разнообразие теряется всего за несколько десятков поколений.

То, что я хотел бы знать, каков соответствующий ответ? У меня нет академических знаний по ГА, и мне на ум приходит только несколько решений:

  1. Используйте большее население. (Медленно)
  2. Используйте проверки во время выполнения, чтобы предотвратить размножение. (Медленно)
  3. Используйте больше точек пересечения. (не очень эффективно)
  4. Увеличьте количество мутаций.

Какие уместные ответы на ситуацию?

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Я бы посмотрел на большую популяцию, 32 человека - очень маленькая популяция. Я обычно запускаю ГА с населением, по крайней мере, в диапазоне хромосом ^ 2 (по опыту), чтобы получить хорошее начальное распределение людей.

Возможный способ ускорить процесс с большей популяцией - порождать различные потоки (по 1 на человека, возможно, партиями) при выполнении функции фитнеса (обычно самая дорогая часть GA).

Предполагая, что население составляет 32, а система с четырьмя ядрами порождает потоки порциями по 8 (2 потока на процессор будут хорошо чередоваться), и вы сможете работать примерно на 4 * быстрее.

Поэтому, если у вас есть ограничение по времени работы вашей GA, это может быть решением.

3 голосов
/ 26 сентября 2011

Вы можете добавить к этому:

  • выбор турнира вместо колеса рулетки
  • многопопуляционная схема с островным разделением, с миграцией
  • перезапускает
  • Включение идей из оценки алгоритмов распределения ( EDA ) (повторная выборка области, близкой к перспективным областям для введения новых людей)
...