Комментарии 20
Спасибо, отличная вводная статья с понятными картинками и не переусложненным кодом. Разобраться было просто. Более того, захотелось еще поэкспериментировать (а что будет, если поменять эвристику A* и т.п.) :)
Цитата из статьи: "A* гарантированно найдёт кратчайший путь, если эвристика никогда не больше истинного расстояния."
Что понятно, т.к. при нулевом коэффициенте при расстоянии она становится жадным алгоритмом. Мне сразу интересно: равенство коэффициентов — это фазовый переход, или нет? Т.е. есть ли сценарии, когда истинное расстояние меньше эвристики, но при этом алгоритм всегда находит кратчайший путь.
Эта статья значительно сократила бы время на изучение.
Спасибо!
А можно модифицировать так чтобы он давал не самый оптимальный маршрут?
А то беда шутеров: когда противник ломится по наикратчайшему пути давая себя легко расстрелять, и никто даже не пытается обойти с тыла или с фланга.
Проблема в другом: как только противник всему этому научится, станет всё верно рассчитывать и оценивать — получится у вас AlphaGo. И? Кто потом это купит?
Боты в играх с неплохим бюджетом тупые не потому, что разрабы не смогли их сделать умными, поверьте мне.
Это легко исправляется тем как часто боты будут мазать.
А тупые противники быстро приедаются.
Поэтому оставляю ссылки на свои статьи на хабре — Первая часть и Вторая часть.
В которых показано, что можно один раз рассчитать дистанционную матрицу между всеми узлами графа и потом легко находить пути между двумя заданными узлами через возмущение потенциалов узлов.
Кроме того, необязательно также пересчитывать всю матрицу, если изменились параметры какой-либо связи — есть простые формулы корректировки матрицы.
Единственное ограничение — если узлов очень много (тысячи), то первоначальный расчет может быть долгим — используется обращение матрицы.
Введение в алгоритм A*