現在、2 点間の最短経路を計算するプロローグ プログラムを実装しています。フレームワークは Java プロジェクトに既に存在します。要件として、パスはプロローグで実装する必要があります。したがって、私は gnu.prolog ( http://www.gnu.org/software/gnuprologjava/ )を使用します。
Javaの外で私が呼び出すsearchPath(1,5,Path)
ものは返されますPath=[5,4,3,2,1]
ここに私のプロローグコードがあります:
:- dynamic(path/3).
findPath( [Goal | Rest], Goal, Temp, Temp, [Goal | Rest]).
findPath( [A | Rest], Goal, Cost, Temp, Path) :-
path(A,B,C),
\+member(B, [A | Rest]),
NewCosts is (Temp + C),
findPath([B, A | Rest], Goal, Cost, NewCosts, Path).
searchPath(Start,Goal,Path_to_goal) :-
findPath([Start], Goal, Cost1, 0, Path),
findPath([Start], Goal, Cost2, 0, Path2),
Cost1=<Cost2,
Path_to_goal = Path.
それには2つの問題があります:
searchPath
メソッドは最短パスを返す必要があります。ただし、そうではありません。これにより、ゴーストがある時点で方向を切り替えることを「決定」し、ゴーストが左から右に揺れます。私のプロローグ コードは、結果を返すのに最大6 秒かかります。時間がかかりすぎると言う必要はありません。ただし、prolog が19msしか必要としない場合もあります。これがどの状況に依存しているかを理解できませんでした。たとえば、99 個の要素を含むパス リストの計算には 19 ミリ秒かかりますが、38 個の要素のみを含むリストには 6 秒が費やされました。
改善策を提案できますか?
事前にご協力いただきありがとうございます。