Pull to refresh

Comments 11

Рассказ в 4 главах через графы и «магия» — как-то очень сложно по моему. Сейчас источник не найду, но где-то в сети есть русскоязычная статья про А*, где коротко и предельно ясно описан алгоритм через школьную арифметику.

Рассказывать алгоритм на графах не через графы — довольно спорный подход. Даже если и удастся так что-то объяснить "через школьную арифметику", то обучающийся в лучшем случае научится просто самостоятельно писать А* для задач, полностью аналогичных примеру. Немного в сторону — и будут большие проблемы. В качестве примеров "отхода в сторону":


  • появление направленных ребер (как в статье — с крыши на землю спрыгнуть можно, обратно — нет)
  • появление ячеек с разной проходимостью (по песку идти медленнее, чем по асфальту)
  • оптимизация по другому параметру (не длина пути, а время в дороге/количество топлива и т.д.)
  • в конце концов, просто задача не связанная с перемещением в пространстве. Для многих игрушек АИ оппонента вполне можно написать через А*, где ребра графа — действия АИ, а узлы — состояния агента либо всей игры.

Эта статья дает намного более фундаментальное понимание, что такое поиск на графе вообще, что такое А* в частности, как он работает и с чем его едят. И если и не дает готовых решений проблем выше, то по крайней мере очень хорошо показывает направление, куда копать. А в случае объяснения на пальцах без графов "через школьную арифметики" у меня большие сомнения, что все будет так просто. Более того, есть ощущение, что как минимум часть из тех проблем покажутся вообще нерелевантными для А*.


Впрочем, буду рад если поделитесь все таки ссылкой. Может там и правда хорошее объяснение.

На сайте журнала «Игромания» в рубрике то ли Игрострой то ли Самопал было несколько толковых статей про поиск пути. Очень хороших.
Все статьи про поиск пути должны иметь ссылку, вроде этой, для лучшей усваиваемости материала :)
Спасибо! Построил там лабиринт, алгоритм нашел мне из него выход ;)
Спасибо, всё так просто, что непонятно как раньше было непонятно.
В первую очередь оказался полезным сам алгоритм построения алгоритма.
Я как-то интуитивно забраковывал простейшую версию алгоритма и никогда не думал в её сторону. Но если рассматривать решение каждой конеретной проблемы алгоритма отдельно, то они вполне решаются. Ну кроме части за пределами 3-х измерений. До этого я бы сам не додумался, как до части алгоритма поиска пути.
Всё хорошо, но, мне кажется, статья не даёт ответа: будет ли найден именно кратчайший путь, ведь есть много примеров, что если бы начали двигаться назад и обошли здание буквой «Г» с другой стороны, то путь был бы короче.
Даёт.
Алгоритм отрубает варианты, когда ты повторно выходишь в ту клетку, где уже был.
Следовательно можно перебрать все варианты, отбрасывая их когда стоимость начинает превышать стоимость уже найденного пути.
Правда это при условии, что цена прохода клетки не отрицательная.
Вопрос в том — когда отрубает? Сравните поиск в ширину и поиск в глубину, поиск в ширину отрубает варинаты вовремя, поиск в глубину — очень поздно. Нам предлагают нечто среднее. Где доказательство того, что шаг назад и в сторону и потом по прямой, будет рассмотрен раньше чем долгий путь напрямик, с последующим длинным обходом «аппендикса»?

А* учитывает не только эвристическое расстояние до цели, но и текущую длину пути. Так что как только пройденная часть "длинного обхода аппендикса" станет длиннее, чем путь "шаг в сторону и потом по прямой" — алгоритм переключится на рассмотрение и расширение последнего.


А* гарантированно найдет кратчайший путь. За исключением разве что ситуаций, когда выбранная эвристика оценки расстояния — какая-то неадекватная (скажем, работающая "наоборот" и возвращающая высокие значения для коротких расстояний и низкие для длинных). Но если следовать требованиям А* при выборе эвристики (а именно: эвристика может недооценивать длину пути, но не должна переоценивать), то алгоритм в самом худшем случае выродится в поиск в ширину. Но найденный путь по-прежнему будет кратчайшим.

Спасибо за описание и пример кода! Примеры как всегда очень помогают.
Sign up to leave a comment.

Articles