Я просто хочу спросить, как работает процесс обучения в генетическом алгоритме. Как значения весов и смещений объединяются для создания нового поколения? Я хочу, чтобы машина проехала по трассе без столкновений. Что мне делать после того, как я инициализировал две машины с разным весом и смещением и выбрал лучшую? Я создаю новое поколение и надеюсь, что оно будет лучше предыдущего? Заранее спасибо!
В основном у меня есть простая сеть с нейронами, связями, весами и смещениями. У меня есть функция, которая инициализирует (выбирает случайным образом) веса и смещения. На входе я получил 5 лучей, брошенных с интервалом 45 градусов на переднюю часть автомобиля, а на выходе - от -1 до 1 для левого и правого. У меня есть счетчик, который усредняет расстояние до окружающих объектов и дает обратную связь, если генератор работает нормально. Но как я должен учить сеть. Прошу прощения, если мне кажется, что я почти не исследовал, но я действительно застрял, и нет хорошего объяснения.
Мне кажется, вы описываете искусственную нейронную сеть, а не генетический алгоритм.
Как упоминалось ранее, это действительно открытый вопрос.
Давайте начнем с популяции размером 50. После оценки пригодности каждого генома в популяции мы можем отсортировать их в порядке убывания в зависимости от их оценки. Исходя из этого, мне лично нравится выбирать 3-5 лучших исполнителей для автоматического включения в следующее поколение. Это может вызвать преждевременное схождение в долгосрочной перспективе, поскольку наиболее эффективные участники теоретически бессмертны (до тех пор, пока их не узурпирует более эффективный геном), но, учитывая, что у нас все еще есть 45 мест, которые нужно заполнить, есть место для оценки других комбинаций.
Затем вам понадобится один или несколько алгоритмы выбора, чтобы выбрать родителей для 45 потомков. У каждого алгоритма есть свой метод выбора родителей, но большинство из них предназначены для того, чтобы дать геномам с более высокой степенью пригодности больше шансов быть выбранными.
С двумя родителями мы готовы к кроссоверу. Есть разные способы сделать это, но, как правило, вам нужно выбрать наиболее подходящего из двух родителей, перебрать его гены и, если у меньшего родителя один и тот же ген, случайным образом выбрать один из двух (в противном случае просто скопируйте более подходящий ген). Конечно, вы можете скопировать весь ген или пойти глубже и рандомизировать внутренние свойства гена между ними.
После кроссинговера вы применяете мутации, который случайным образом изменяет свойства генов потомства. Это жизненно важно, поскольку позволяет нам (случайным образом) перемещаться по пространству поиска проблемы, которую вы пытаетесь оптимизировать.
Думайте об этом как об объединении наиболее приспособленных геномов прошлого поколения для опробования новых комбинаций, которые еще предстоит протестировать. Есть несколько способов сделать это, и лучшее решение для этого потребует некоторого тестирования и настройки.
Похоже, вы пытаетесь применить это к нейронной сети, поэтому я рекомендую прочитать оригинальный документ NeuroEvolution of Augmenting Topology (NEAT), если вы еще этого не сделали.
Это очень широко; у вас есть несколько вопросов. Если вас больше всего беспокоит переход, покажите, что вы пробовали и в чем конкретно вам нужна помощь. Вы изучали генетические алгоритмы?