一个2d网格世界充满了障碍物,并为导航20X20网格空间的船舶提供了“充电站”。船上航行的燃料数量有限,没有充电站就可以航行。
期望的解决方案是对当前实现的重大改进,或者是首选的A *搜索算法的交换。您应该能够在随机生成的网格世界中导航。
我是Prolog的新手,我正在寻找一个大概的方法,以了解如何在Prolog中实现寻路A *算法
solve_task_bt(Task,Current,Depth,RPath,[cost(Cost),depth(Depth)],NewPos) :-
achieved(Task,Current,RPath,Cost,NewPos).
solve_task_bt(Task,Current,D,RR,Cost,NewPos) :-
Current = [c(F,P)|RPath],
search(P,P1,R,C),
\+ memberchk(R,RPath), % check we have not been here already
D1 is D+1,
F1 is F+C,
solve_task_bt(Task,[c(F1,P1),R|RPath],D1,RR,Cost,NewPos). % backtrack search
achieved(go(Exit),Current,RPath,Cost,NewPos) :-
Current = [c(Cost,NewPos)|RPath],
( Exit=none -> true
; otherwise -> RPath = [Exit|_]
).
achieved(find(O),Current,RPath,Cost,NewPos) :-
Current = [c(Cost,NewPos)|RPath],
( O=none -> true
; otherwise -> RPath = [Last|_],map_adjacent(Last,_,O)
).
search(F,N,N,1) :-
map_adjacent(F,N,empty).