Как сделать кроссовер в генетическом алгоритме

Я просто хочу спросить, как работает процесс обучения в генетическом алгоритме. Как значения весов и смещений объединяются для создания нового поколения? Я хочу, чтобы машина проехала по трассе без столкновений. Что мне делать после того, как я инициализировал две машины с разным весом и смещением и выбрал лучшую? Я создаю новое поколение и надеюсь, что оно будет лучше предыдущего? Заранее спасибо!

Это очень широко; у вас есть несколько вопросов. Если вас больше всего беспокоит переход, покажите, что вы пробовали и в чем конкретно вам нужна помощь. Вы изучали генетические алгоритмы?

Carcigenicate 05.08.2018 17:47

В основном у меня есть простая сеть с нейронами, связями, весами и смещениями. У меня есть функция, которая инициализирует (выбирает случайным образом) веса и смещения. На входе я получил 5 лучей, брошенных с интервалом 45 градусов на переднюю часть автомобиля, а на выходе - от -1 до 1 для левого и правого. У меня есть счетчик, который усредняет расстояние до окружающих объектов и дает обратную связь, если генератор работает нормально. Но как я должен учить сеть. Прошу прощения, если мне кажется, что я почти не исследовал, но я действительно застрял, и нет хорошего объяснения.

William Bomb 05.08.2018 17:55

Мне кажется, вы описываете искусственную нейронную сеть, а не генетический алгоритм.

Matt Cremeens 06.08.2018 15:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
370
1

Ответы 1

Как упоминалось ранее, это действительно открытый вопрос.

Давайте начнем с популяции размером 50. После оценки пригодности каждого генома в популяции мы можем отсортировать их в порядке убывания в зависимости от их оценки. Исходя из этого, мне лично нравится выбирать 3-5 лучших исполнителей для автоматического включения в следующее поколение. Это может вызвать преждевременное схождение в долгосрочной перспективе, поскольку наиболее эффективные участники теоретически бессмертны (до тех пор, пока их не узурпирует более эффективный геном), но, учитывая, что у нас все еще есть 45 мест, которые нужно заполнить, есть место для оценки других комбинаций.

Затем вам понадобится один или несколько алгоритмы выбора, чтобы выбрать родителей для 45 потомков. У каждого алгоритма есть свой метод выбора родителей, но большинство из них предназначены для того, чтобы дать геномам с более высокой степенью пригодности больше шансов быть выбранными.

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

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

Думайте об этом как об объединении наиболее приспособленных геномов прошлого поколения для опробования новых комбинаций, которые еще предстоит протестировать. Есть несколько способов сделать это, и лучшее решение для этого потребует некоторого тестирования и настройки.

Похоже, вы пытаетесь применить это к нейронной сети, поэтому я рекомендую прочитать оригинальный документ NeuroEvolution of Augmenting Topology (NEAT), если вы еще этого не сделали.

Другие вопросы по теме