Ваш комментарий говорит, что вы ищете кратчайший путь .Эта проблема является вариацией TSP на плоском графике и, таким образом, NP-Hard .
Возможная эвристическая функция для A*
, которая может решить проблему, ноне допустимо [таким образом, найденный путь не гарантированно будет оптимальным]:
Сумма расстояний в Манхэттене от всех фруктов до агента.
Вы также можете использовать допустимую эвристику, #fruits
- но это займет много времени.
Если вы ищете оптимальный, ну, это сложно.Вы можете попробовать все перестановки фруктов и проверить общее расстояние, которое вам нужно пройти.Это решение учитывает факторного числа плодов , и если оно больше 20 - с наивной грубой силой - это займет слишком много времени.Вы можете как-то улучшить его, уменьшив проблему до TSP , и использовать решение с динамическим программированием, которое также является экспоненциальным, или некоторые эвристические решения для TSP.
Можно такжеулучшить недопустимое эвристическое решение, чтобы обеспечить алгоритм в любое время :
итеративный запуск A*
с убывающей эвристической функцией :h(v) = h'(v) / m
, где h'
- эвристическая функция на последней итерации A *, а m > 1
.Это гарантирует, что в какой-то момент ваша эвристическая функция h
будет допустимой - и найденное решение будет оптимальным.Однако ожидается, что каждая итерация займет намного больше времени, чем предыдущая [экспоненциально длиннее ..]