На вашем месте я бы выбросил неограниченную эвристику.Допустимая эвристика намного лучше, поскольку при заданном значении веса для решения, которое вы нашли, вы можете сказать, что оно не более 1 / веса, умноженного на длину оптимального решения.
Большая проблема при реализации A* Производные это структуры данных.Когда я реализовал двунаправленный поиск, просто переключившись со списков массивов на комбинацию очередей с увеличенным хешем и списков массивов по требованию, сократил стоимость времени выполнения на три порядка - буквально.
Основная проблема заключается в том, что большинство статей дают только псевдокод для алгоритма, использующего логику множеств - вы сами должны выяснить, как представлять множества в вашем коде.Не бойтесь использовать несколько ADT для одного списка, т.е. вашего открытого списка.Я не уверен на 100% в Anytime Weighted A *, я сделал другие производные, такие как Anytime Dynamic A * и Anytime Repairing A *, но не AWA *.
Другая проблема заключается в том, что когда вы устанавливаете слишком низкое значение g, иногда может потребоваться гораздо больше времени, чтобы найти какое-либо решение, чем если бы оно было более высоким.Распространенной ловушкой является забывание проверять закрытый список на наличие дублирующих состояний, что приводит к циклу (бесконечному, если ваше значение g уменьшается до 0).Я бы попробовал начать с чего-то значительно выше 0, если вы получаете быстрые результаты с помощью поиска луча.
Некоторый псевдокод, вероятно, поможет здесь!В любом случае, это всего лишь мои мысли по этому поводу, вы, возможно, уже решили это - если это так хорошо для вас:)