Ответы пользователя по тегу Генетические алгоритмы
  • Как сделать нейросетку для генетического 2D алгоритма?

    @imageman
    Рекуррентные сети
    https://qudata.com/ml/ru/NN_RNN_Torch.html - довольно сносное описание.
    Объясню "на пальцах":
    а) на вход нейросети подаются N блоков (фиксированной длинны), к примеру для N ботов это будут координаты x,y поэтому у нас будет вектор [N , 2]
    б) у нас есть некое внутреннее состояние нейросети (почти всегда инициализируется нолями) которое задается всегда определенным образом перед каждым запуском. Это массив длинной K (например 10). *** В твоем случае в самом начале в этот массив можно записать свои собственные координаты, какие-то дополнительные параметры (например число ботов).
    в) сеть состоит из двух частей - рекуррентная (перебирает по очереди вход) и финальная часть, которая на основе внутреннего состояния дает окончательный вывод (прогноз, результат).

    Теперь чуть подробнее. Рекуррентная часть это простая нейросеть любой конфигурации, которая на вход принимает массив "внутреннее состояние нейросети" и одну из N строк входного массива (в твоем случае "внутреннее состояние нейросети" + 2 числа). Обрабатывает это и на выходе получается новый массив "внутреннее состояние нейросети". Т.е. (как пример) на входе 12 чисел, на выходе 10 чисел.

    После обработки всех N строк входного массива в дело вступает финальная часть нейросети. Она может быть тоже любой конфигурации (структуры). На вход принимает "внутреннее состояние нейросети" (например 10 чисел), на выходе какой-то уже конечный результат (к примеру "угол" и "скорость").

    Надеюсь понятно изложил.
    Ответ написан
    1 комментарий
  • Расстановка элементов на плате. Как реализовать с помощью генетических алгоритмов?

    @imageman
    Генетическим алгоритмом примерно так:
    Сначала Разрабатываем способ кодировки. Например [Номер элемента, координаты, расположение].

    Запускаем алгоритм, и он выдает кучку чисел "генетического кода", который мы превращаем в фетотип: на пустую плату последовательно помещяем все [Номер элемента, координаты, расположение].

    Пытаемся соединить в нужном порядке все элементы.

    После этого считаем коллизии: пересечения элементов (не хватило места), недопустимые пересечения связей и т.п. баги. В качестве ответа для ГА выдается число коллизий данного генома. Алгоритм пытается найти такую последовательность, что бы коллизий были меньше (разные коллизии могут иметь разные веса).

    P.S. никто не запрещает анализировать геном на выявление явных багов (к примеру один и тот же элемент 5 раз или координаты за пределами платы и т.п.) и исправление (под "исправлением" понимается любое действие, которое пытается улучшить ситуацию, чаще всего рандомное). Чем больше таких эвристик будет, тем (потенциально) быстрее будет сходится алгоритм.
    Ответ написан
    Комментировать