A*アルゴリズムの解説
http://www.geocities.com/jheyesjones/astar.html アルゴリズムの部分だけ訳してみた↓
node_goal = ゴール状態
node_start = 初期状態
OPEN_listにnode_startを入れる
while ( OPEN_listが空でない ) {
node_current <- OPEN_list内の最小のfを持つノード
node_currentがnode_goalと同じなら終了
foreach (node_successor in {node_currentからたどれるノード集合}) [
node_successor.g = node_current.g + (node_currentからnode_successorまでの移動コスト)
if (OPENリスト内にnode_successorがあり、かつ、そちらgの方が小さい) {
// リスト内のノードのほうがbetterな経路をたどっているので、
node_successorを破棄し、次へ
}
if (CLOSEリスト内にnode_successorがあり、かつ、そちらのgの方が小さい) {
// リスト内のノードのほうがbetterな経路をたどっているので、
node_successorを破棄し、次へ
}
node_successorをOPEN_listとCLOSE_listから削除する
node_successorの親ノードをnode_currentにする
node_successor.h = node_successorからnode_goalまでの移動コスト(適当なアルゴリズムで予想する)
node_successorをOPENリストに入れる
}
}
node_*.g : スタート状態からそのノードまでの移動コスト
node_*.h : そのノードからゴールまでの移動コスト(の予想値)
node_*.f : node_*.g と node_*.h の合計
OPEN_list : 判明しているノードの中でまだ探索していないノード
CLOSE_list : 探索済みのノード
>node_successor.h = node_successorからnode_goalまでの移動コスト(適当なアルゴリズムで予想する)
ここの移動コスト予想アルゴリズムがキモ。
まぁRTSで使うやつなら適当で言いと思うけど。