均一コスト探索

均一コスト探索（きんいつこすとたんさく、）は、重み付きの木や木構造やグラフを辿ったり探索するための探索アルゴリズムである。最良優先探索において、評価関数を根ノードから探索ノードまでのコストの総和とした物。直観的には、探索は根ノードで始まり根ノードからの合計コストが最小になるようにノードを訪れ、ゴールに到達するまで続く。均一探索は探索方法としては幅優先探索に似ている。
普通、探索アルゴリズムには隣接する未訪のノードを優先度付きキューに追加する操作が含まれる。キューにはそれぞれのノードが根ノードからの合計コスト順に格納されていて、最小コストのパスを持つノードが最も高い優先度を持っている。キューの先頭にあるノードから直接つながった次のノードをたどり、根ノードからのコストを計算してキューに追加する。
均一コスト探索は一般のグラフ探索を行うダイクストラ法の特殊なケースである。ダイクストラ法はA*アルゴリズムの特殊なケースでヒューリスティクスを定数関数にした場合と同じである。幅優先探索は均一コスト探索の特殊なケースであり、辺のコストが全て同じ場合と同じである。
辺のコストが非負値の場合、最小の評価値の物が必ず見つかる。
擬似コード.
大文字で書かれた関数は以下の通り。全て引数にノードをとる。
 function 均一コスト探索(startNode)
 visited = 訪問済みノードを管理する集合
 queue = ノード評価値で自動的にソートするノードの優先度付きキュー
 startNode の評価値 = 0
 startNode を visited と queue に追加
 while (queue が空ではない)
 node = queue の先頭から取り出す
 if (IS_GOAL(node)) then
 return node
 for each (child in EXPAND(node))
 evalValue = node の評価値 + COST(node, child)
 if (child が visited に含まれない) then
 child の評価値 = evalValue
 child を queue に追加
 else if (evalValue < child の評価値) then
 child の評価値 = evalValue
 child を queue から削除して追加し直す
 return 探索失敗