Страницы

Поиск по вопросам

четверг, 4 апреля 2019 г.

Гибкость генетического алгоритма

Как сделать правильно гибкость генетического алгоритма (умоляю не советуйте A*), ну вот на примитивном примере движении машины к цели, обходя препятствие:
Что у нас есть :
У нас есть машина, она может двигать вперёд, влево, вправо, назад. Есть препятствие, если машина в него въезжает она ломается. Ещё есть цель, до которой наша машина должна добраться.

Так вот, вопрос в чём, как я понимаю наш генетический алгоритм проложит определённый маршрут нашей машины до цели (рис. 1), но если мы изменим карту (рис. 2), то этот же генетический алгоритм не доберётся до нашего места назначения, он просто сначала пойдёт по тому же пути и потом опять начнёт грубо говоря подбором (скрещиванием) подбирать маршрут, а как сделать чтобы он уже мог уверенно идти к цели основываясь на опыте (рис. 3) ?


UPD :


Ответ

Генетический алгоритм - это оптимизационный алгоритм. В отличие от алгоритмов машинного обучения (тех же нейронных сетей) он никак не опирается на "предыдущий опыт", а просто оптимизирует (т.е. максимизирует или минимизирует, в зависимости от задачи) какую-то целевую функцию при помощи подбора значений параметров этой функции.
При изменении исходных условий (изменение карты, расположение исходных и конечных точек) генетический алгоритм просто каждый раз с нуля будет строить маршрут.
Конкретно для этой задачи можно просто брать за первоначальный маршрут прямую линию из начальной в конечную точку, дальше начинать "мутировать" этот маршрут: добавлять/удалять узлы, смещать их, и т.д. В простых случаях "скрещивать" маршруты между собой не обязательно, но для сложных лабиринтов это может дать какие-то бонусы (можно с этим поэкспериментировать). В общем-то, если в исходном пути по прямой нет препятствий, то этот маршрут в итоге и выиграет. Если препятствия попадутся, то за счет штрафа за пересечение препятствий будет выбран другой маршрут, где препятствий нет.
Целевая функция - длина пути + штраф за пересечение препятствий (можно задать, что он будет зависеть от расстояния до края препятствия). Можно еще добавить штраф за количество узлов (чтобы они не сильно "плодились"), но он должен быть намного меньше штрафа за препятствия, иначе маршрут будет сходиться к прямой линии вне зависимости от наличия препятствий (тоже можно поэкспериментировать величиной штрафа).
Для простых карт приемлемое решение будет находиться достаточно быстро (зависит от силы отклонений от исходного маршрута при "мутациях").
Использовать нейросеть для этой задачи я бы не советовал, это как раз тот случай, когда самые "простецкие" алгоритмы работают достаточно хорошо при намного меньших усилиях со стороны программиста. Нейросети побеждают в других областях: классификация, распознавание, некоторые задачи, для которых вообще проблематично найти четкий алгоритм, но которые человек относительно легко решает интуитивно.

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

Отправить комментарий