#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:
- Запустите 100 генов в функции пригодности и получите результат.
- Случайным образом выберите 2 гена на основе нормализованной функции пригодности (считайте, что это вероятность выбора каждого гена из пула) и перекрестного. Повторяйте этот шаг, пока не получите 90 новых генов (в данном случае 45 раз). Сохраните топ-5 без изменений и дублируйте. Всего генов: 100.
- Для 90 новых генов и 5 дубликатов в новом пуле разрешите им мутировать на основе вашей вероятности мутации (обычно 1%). Всего генов: 100.
- Повторяйте от 1) до 3) до сходимости или X числа итераций.
Примечание: вы всегда хотите сохранить неизменными лучшие гены, например, вы всегда получаете лучшее решение на каждой итерации.
Удачи!
Комментарии:
1. У меня нет ссылки. Я новичок в GA. Я думал, что это даст лучшее средневзвешенное значение. Но вы ставите этот путь, кажется, намного меньше вычислений. Как вы выполняете нормализацию функции пригодности?
2. @f.rodrigues После вычисления пригодности для каждого гена, просуммируйте все и разделите пригодность каждого гена на [ f_gene=f_gene./sum(f_gene) ] Выбор называется выбором колеса рулетки.