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

#machine-learning #artificial-intelligence #genetic-algorithm

#машинное обучение #искусственный интеллект #генетический алгоритм

Вопрос:

У меня есть общая численность населения X.

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

Я получаю либо x * 2, либо x * 2 (x * 100/10) генов. 10% — это случайные новые гены, которые могут запускаться или не запускаться в зависимости от частоты мутаций.

Проблема в том, что я не знаю, каков наилучший подход для повторного сокращения численности населения до X.

Если ген представляет собой список, должен ли я просто использовать list[::2] (или получить каждый четный элемент индекса из списка)

Какова обычная практика при пересечении генов?

Редактировать:

Пример моего GA с населением 100;

  • Запустите 100 генов в функции пригодности и получите результат. Текущее население: 100
  • Добавьте 10% новых случайных генов. Текущее население: 110
  • Дублируйте верхние 10% генов. Текущее население: 121
  • Удалите 10% худших генов. Текущее население: 108
  • Объедините все возможные гены (без дубликатов). Текущее население: 5778
  • Удаляйте гены из генофонда, пока популяция не будет равна 100. Текущее население: 100
  • Перезапустите функцию пригодности

Что я хочу знать: как мне сделать последний шаг? В настоящее время у меня есть список из 5778 элементов, и я беру по одному каждые 58 или выражаю как len (список) / startpopulation-1

Или я должен использовать ‘while True’ со случайным.delete пока len (list) == 100?

Новые случайные гены должны быть добавлены до или после кроссовера?

Есть ли способ выполнить гауссово умножение элементов с наивысшим рейтингом на наименьший?

например: наивысший рейтинг умножается на n, второй лучший на (n-1), третий на (n-2) …, худший рейтинг умножается на (n-n).

Комментарии:

1. Можете ли вы удалить гены, которые имели наименьшую пригодность на предыдущей итерации?

Ответ №1:

Я действительно не знаю, почему вы так выполняете GA, не могли бы вы дать несколько ссылок?

В любом случае, вот мое типичное решение для реализации функционального метода GA:

  1. Запустите 100 генов в функции пригодности и получите результат.
  2. Случайным образом выберите 2 гена на основе нормализованной функции пригодности (считайте, что это вероятность выбора каждого гена из пула) и перекрестного. Повторяйте этот шаг, пока не получите 90 новых генов (в данном случае 45 раз). Сохраните топ-5 без изменений и дублируйте. Всего генов: 100.
  3. Для 90 новых генов и 5 дубликатов в новом пуле разрешите им мутировать на основе вашей вероятности мутации (обычно 1%). Всего генов: 100.
  4. Повторяйте от 1) до 3) до сходимости или X числа итераций.

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

Удачи!

Комментарии:

1. У меня нет ссылки. Я новичок в GA. Я думал, что это даст лучшее средневзвешенное значение. Но вы ставите этот путь, кажется, намного меньше вычислений. Как вы выполняете нормализацию функции пригодности?

2. @f.rodrigues После вычисления пригодности для каждого гена, просуммируйте все и разделите пригодность каждого гена на [ f_gene=f_gene./sum(f_gene) ] Выбор называется выбором колеса рулетки.