(57)【要約】【課題】並列処理に適した最適経路探索を行う情報処理装置を提供する。【解決手段】複数のノード間に定められた結合関係を示す情報と、結合関係のコストを示す情報と、で構成される経路情報に含まれる複数のノードそれぞれに対して、該ノードと基準ノードとの間のコストを示す評価値を付与し、複数のノード間それぞれにおいて、結合関係と、各ノードに付与された評価値の大小関係と、に基づいて当該ノード間を経路として確定するか否かを判断し、当該ノードと確定された経路で接続されるノードとの間のコストを示す値に基づいて、評価値を更新する評価値更新部と、を含み、更新された評価値に基づく判断部による判断の後に、評価値更新部による評価値更新を実行する処理を繰り返し実行する。【選択図】図４
2016116067.tif 000002
【特許請求の範囲】
【請求項１】
複数のノード間に定められた結合関係を示す情報と、前記結合関係のコストを示す情報と、で構成される経路情報を取得する経路情報取得部と、
前記経路情報に含まれる複数のノードそれぞれに対して、前記複数のノードのうち基準となる基準ノードを区別する値を初期値とする、当該ノードと基準ノードとの間のコストを示す評価値を付与する評価値付与部と、
前記結合関係を有する複数のノード間それぞれにおいて、当該結合関係と、各ノードに付与された前記評価値の大小関係と、に基づいて当該ノード間を経路として確定するか否かを判断する判断部と、
前記複数のノードそれぞれにおいて、当該ノードと前記確定された経路で接続されるノードとの間のコストを示す値に基づいて、前記評価値を更新する評価値更新部と、
を含み、
前記更新された評価値に基づく前記判断部による判断の後に、前記評価値更新部による評価値更新を実行する処理を繰り返し実行する、
ことを特徴とする情報処理装置。
【請求項２】
前記複数のノードそれぞれに対して、当該ノードと前記確定された経路で接続されるノードを示すルート値を付与し、前記評価値更新部は、前記評価値を、前記コストを示す値に前記ルート値が示す前記ノードに付与されている前記コストを示す値を加えた値に更新する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記複数のノードそれぞれにおいて、当該ノードに付与されているルート値を、当該ルート値が示すノードに付与されているルート値に更新するルート値更新部、をさらに含む、
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記複数のノードそれぞれに付与されているルート値が前記基準ノードを示すまで、前記評価値更新部による評価値更新を実行する処理を繰り返し実行する、
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記判断部は、同じ結合元のノード、または同じ結合先のノード、を有する複数のノード間が経路として確定される条件を満たす場合に、前記更新部により更新される値が最小となるノード間を経路として確定する、
ことを特徴とする請求項１から４のいずれか一項に記載の情報処理装置。
【請求項６】
前記基準ノードに付与される前記評価値の初期値は、他のノードに付与される前記評価値の初期値より小さい値とする、
ことを特徴とする請求項１から５のいずれか一項に記載の情報処理装置。
【請求項７】
前記判断部は、前記ノード間における結合元のノードに付与される評価値が、結合先のノードに付与される評価値より大きい場合に、当該ノード間を経路として確定する、
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記判断部は、前記ノード間における結合先のノードに付与される評価値が、結合元のノードに付与される評価値より大きい場合に、当該ノード間を経路として確定する、
ことを特徴とする請求項６に記載の情報処理装置。
【請求項９】
前記処理を繰り返し実行する間に、前記結合関係のコストを示す情報が変化する、
ことを特徴とする請求項１から８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記処理を繰り返し実行する間に、前記基準ノードが変更される、
ことを特徴とする請求項１から９のいずれか一項に記載の情報処理装置。
【請求項１１】
前記経路情報は、複数のノード間に定められた有向の結合関係を示す情報と、前記有向の結合関係のコストを示す情報と、で構成される
ことを特徴とする請求項１から１０のいずれか一項に記載の情報処理装置。
【請求項１２】
前記経路情報は、複数のノード間に定められた無向の結合関係を示す情報と、前記無向の結合関係のコストを示す情報と、で構成される
ことを特徴とする請求項１から１０のいずれか一項に記載の情報処理装置。
【請求項１３】
複数のノード間に定められた結合関係を示す情報と、前記結合関係のコストを示す情報と、で構成される経路情報を取得する経路情報取得ステップと、
前記経路情報に含まれる複数のノードそれぞれに対して、前記複数のノードのうち基準となる基準ノードを区別する値を初期値とする、当該ノードと基準ノードとの間のコストを示す評価値を付与する評価値付与ステップと、
前記結合関係を有する複数のノード間それぞれにおいて、当該結合関係と、各ノードに付与された前記評価値の大小関係と、に基づいて当該ノード間を経路として確定するか否かを判断する判断ステップと、
前記複数のノードそれぞれにおいて、当該ノードと前記確定された経路で接続されるノードとの間のコストを示す値に基づいて、前記評価値を更新する評価値更新ステップと、
を含む制御方法であって、
前記更新された評価値に基づく前記判断ステップによる判断の後に、前記評価値更新ステップによる評価値更新を実行する処理を繰り返し実行する、
ことを特徴とする制御方法。
【請求項１４】
複数のノード間に定められた結合関係を示す情報と、前記結合関係のコストを示す情報と、で構成される経路情報を取得する経路情報取得部、
前記経路情報に含まれる複数のノードそれぞれに対して、前記複数のノードのうち基準となる基準ノードを区別する値を初期値とする、当該ノードと基準ノードとの間のコストを示す評価値を付与する評価値付与部、
前記結合関係を有する複数のノード間それぞれにおいて、当該結合関係と、各ノードに付与された前記評価値の大小関係と、に基づいて当該ノード間を経路として確定するか否かを判断する判断部、
前記複数のノードそれぞれにおいて、当該ノードと前記確定された経路で接続されるノードとの間のコストを示す値に基づいて、前記評価値を更新する評価値更新部、
としてコンピュータを機能させるためのプログラムであって、
前記更新された評価値に基づく前記判断部による判断の後に、前記評価値更新部による評価値更新を実行する処理を繰り返し実行する、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御方法、及びプログラムに関する。
【背景技術】
【０００２】
複数のノードと、ノード間の結合関係とその結合関係の重みとを関連付けたエッジと、からなる経路グラフにおいて、起点ノードから目標ノードまでの最短経路を探索する技術が知られている。従来は、起点ノードから開始して接続されているノードを順に追っていくことで目標ノードまでの最短経路を探索している。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
経路探索において、ノード数の増加や経路グラフの時間変化に伴う経路探索処理の負担を軽減するため、経路探索処理を並列処理により実行することが望ましい。しかし、従来の経路探索方法では、各ノードに接続されているノードの数は一様でないため並列処理を効率的に行えない場合がある。
【０００４】
そこで、本発明の目的の一つは、並列処理に適した最適経路探索を行う情報処理装置を提供することにある。
【課題を解決するための手段】
【０００５】
本発明に係る情報処理装置は、複数のノード間に定められた結合関係を示す情報と、前記結合関係のコストを示す情報と、で構成される経路情報を取得する経路情報取得部と、前記経路情報に含まれる複数のノードそれぞれに対して、前記複数のノードのうち基準となる基準ノードを区別する値を初期値とする、当該ノードと基準ノードとの間のコストを示す評価値を付与する評価値付与部と、前記結合関係を有する複数のノード間それぞれにおいて、当該結合関係と、各ノードに付与された前記評価値の大小関係と、に基づいて当該ノード間を経路として確定するか否かを判断する判断部と、前記複数のノードそれぞれにおいて、当該ノードと前記確定された経路で接続されるノードとの間のコストを示す値に基づいて、前記評価値を更新する評価値更新部と、を含み、前記更新された評価値に基づく前記判断部による判断の後に、前記評価値更新部による評価値更新を実行する処理を繰り返し実行する、ことを特徴とする。
【０００６】
また、上記情報処理装置において、前記複数のノードそれぞれに対して、当該ノードと前記確定された経路で接続されるノードを示すルート値を付与し、前記評価値更新部は、前記評価値を、前記コストを示す値に前記ルート値が示す前記ノードに付与されている前記コストを示す値を加えた値に更新する、こととしてもよい。
【０００７】
また、上記情報処理装置において、前記複数のノードそれぞれにおいて、当該ノードに付与されているルート値を、当該ルート値が示すノードに付与されているルート値に更新するルート値更新部、をさらに含む、こととしてもよい。
【０００８】
また、上記情報処理装置において、前記複数のノードそれぞれに付与されているルート値が前記基準ノードを示すまで、前記評価値更新部による評価値更新を実行する処理を繰り返し実行する、こととしてもよい。
【０００９】
また、上記情報処理装置において、前記判断部は、同じ結合元のノード、または同じ結合先のノード、を有する複数のノード間が経路として確定される条件を満たす場合に、前記更新部により更新される値が最小となるノード間を経路として確定する、こととしてもよい。
【００１０】
また、上記情報処理装置において、前記基準ノードに付与される前記評価値の初期値は、他のノードに付与される前記評価値の初期値より小さい値とする、こととしてもよい。
【００１１】
また、上記情報処理装置において、前記判断部は、前記ノード間における結合元のノードに付与される評価値が、結合先のノードに付与される評価値より大きい場合に、当該ノード間を経路として確定する、こととしてもよい。
【００１２】
また、上記情報処理装置において、前記判断部は、前記ノード間における結合先のノードに付与される評価値が、結合元のノードに付与される評価値より大きい場合に、当該ノード間を経路として確定する、こととしてもよい。
【００１３】
また、上記情報処理装置において、前記処理を繰り返し実行する間に、前記結合関係のコストを示す情報が変化する、こととしてもよい。
【００１４】
また、上記情報処理装置において、前記処理を繰り返し実行する間に、前記基準ノードが変更される、こととしてもよい。
【００１５】
また、上記情報処理装置において、前記経路情報は、複数のノード間に定められた有向の結合関係を示す情報と、前記有向の結合関係のコストを示す情報と、で構成される、こととしてもよい。
【００１６】
また、上記情報処理装置において、前記経路情報は、複数のノード間に定められた無向の結合関係を示す情報と、前記無向の結合関係のコストを示す情報と、で構成される、こととしてもよい。
【００１７】
本発明に係る制御方法は、複数のノード間に定められた結合関係を示す情報と、前記結合関係のコストを示す情報と、で構成される経路情報を取得する経路情報取得ステップと、前記経路情報に含まれる複数のノードそれぞれに対して、前記複数のノードのうち基準となる基準ノードを区別する値を初期値とする、当該ノードと基準ノードとの間のコストを示す評価値を付与する評価値付与ステップと、前記結合関係を有する複数のノード間それぞれにおいて、当該結合関係と、各ノードに付与された前記評価値の大小関係と、に基づいて当該ノード間を経路として確定するか否かを判断する判断ステップと、前記複数のノードそれぞれにおいて、当該ノードと前記確定された経路で接続されるノードとの間のコストを示す値に基づいて、前記評価値を更新する評価値更新ステップと、を含む制御方法であって、前記更新された評価値に基づく前記判断ステップによる判断の後に、前記評価値更新ステップによる評価値更新を実行する処理を繰り返し実行する、ことを特徴とする。
【００１８】
本発明に係るプログラムは、複数のノード間に定められた結合関係を示す情報と、前記結合関係のコストを示す情報と、で構成される経路情報を取得する経路情報取得部、前記経路情報に含まれる複数のノードそれぞれに対して、前記複数のノードのうち基準となる基準ノードを区別する値を初期値とする、当該ノードと基準ノードとの間のコストを示す評価値を付与する評価値付与部、前記結合関係を有する複数のノード間それぞれにおいて、当該結合関係と、各ノードに付与された前記評価値の大小関係と、に基づいて当該ノード間を経路として確定するか否かを判断する判断部、前記複数のノードそれぞれにおいて、当該ノードと前記確定された経路で接続されるノードとの間のコストを示す値に基づいて、前記評価値を更新する評価値更新部、としてコンピュータを機能させるためのプログラムであって、前記更新された評価値に基づく前記判断部による判断の後に、前記評価値更新部による評価値更新を実行する処理を繰り返し実行する、ことを特徴とする。このプログラムは、コンピュータ読み取り可能な情報記憶媒体に格納されてもよい。
【図面の簡単な説明】
【００１９】
【図１】本実施形態に係る情報処理装置の構成の一例を示す図である。
【図２】経路グラフの一例を示す図である。
【図３】経路グラフの構成を表現するエッジ情報を示す図である。
【図４】本実施形態に係る情報処理装置により実現される主な機能の一例を示す機能ブロック図である。
【図５】経路確定判断部により経路が確定したノードの一例を示す図である。
【図６】更新処理部による処理を繰り返し実行した結果を示す図である。
【図７】本実施形態に係る情報処理装置が実行する最適経路探索処理の流れの一例を示すフロー図である。
【図８】各ノードにコスト評価値の初期値が設定されたポインタ情報を示す図である。
【図９】経路確定判断処理の流れの一例を示すフロー図である。
【図１０】経路確定後のポインタ情報を示す図である。
【図１１】前処理実行後のポインタ情報を示す図である。
【図１２】更新処理の流れの一例を示すフロー図である。
【図１３】更新コスト評価値計算後のポインタ情報を示す図である。
【図１４】コスト評価値更新処理後のポインタ情報を示す図である。
【図１５】フレーム２における経路確定判断処理が開始される前のポインタ情報を示す図である。
【図１６】フレーム２における経路確定後のポインタ情報を示す図である。
【図１７】フレーム２における前処理実行後のポインタ情報を示す図である。
【図１８】フレーム２におけるコスト評価値計算後のポインタ情報を示す図である。
【図１９】フレーム２におけるコスト評価値更新処理後のポインタ情報を示す図である。
【図２０】複数の結合先ノードを有するノードの一例を示す図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。図面については、同一又は同等の要素には同一の符号を付し、重複する説明は省略する。
【００２１】
図１は、本実施形態に係る情報処理装置１０の構成の一例を示す図である。本実施形態に係る情報処理装置１０は、例えば、家庭用ゲーム機やパーソナルコンピュータ等であって、図１に示すように、制御部１１、記憶部１２、通信部１３、操作部１４、及び表示部１５を含んで構成されている。
【００２２】
制御部１１は、例えばＣＰＵ５及びＧＰＵ６等を含んで構成され、記憶部１２に記憶されているプログラムに従って各種の情報処理を実行する。本実施形態において、制御部１１が実行する処理の具体例については、後述する。
【００２３】
記憶部１２は、ＲＡＭやＲＯＭ等のメモリ素子、ハードディスクなどを含んで構成され、制御部１１が実行するプログラムや、各種のデータを記憶する。また、記憶部１２は、制御部１１のワークメモリとしても動作する。
【００２４】
通信部１３は、通信インタフェースであって、通信ネットワークを介して外部から到来するデータを受信し、制御部１１に対して出力する。また、制御部１１からの指示に従って、通信ネットワークを介して接続される他の情報処理装置に対して各種のデータを送信する。
【００２５】
操作部１４は、キーボードやマウス、家庭用ゲーム機のコントローラ等であって、ユーザの操作入力を受け付けて、その内容を示す信号を制御部１１に出力する。
【００２６】
表示部１５は、液晶ディスプレイ、有機ＥＬディスプレイ等の表示デバイスであって、制御部１１の指示に従って、各種の画像を表示する。
【００２７】
なお、情報処理装置１０は、ＤＶＤ−ＲＯＭやＢｌｕｅ−ｒａｙ（登録商標）ディスクなどの光ディスクを読み取る光ディスクドライブ、ＵＳＢ（Universal Serial Bus）ポートなどを含んでいてもよい。
【００２８】
本実施形態に係る情報処理装置１０は、複数のノードと、複数のノード間の有向の結合関係を示す情報とによって構成される経路グラフにおける、基準ノードから、または基準ノードまでの最適経路探索処理を実行する。この最適経路探索処理は、主に制御部１１のＧＰＵ６が実行することとするが、ＣＰＵ、その他の装置が実行することとしてもよい。ＧＰＵ６は、ＣＰＵ５より同時に実行可能な処理単位（スレッド）の数が多いため、並列処理に適している。一方で、同時に実行されるスレッドは、互いに同じ内容の処理であることが要請される。本実施形態では、ＧＰＵ６を用いて経路探索処理を効率的に実行する構成としている。
【００２９】
以下、図２に例示する経路グラフにおいて、基準ノードに基づく最適経路が探索される場合を例として説明する。図２に例示するように、経路グラフは、複数のノードと、複数のノード間に設定される結合関係を示す情報と、を含んで構成される。本実施形態においては、経路グラフの構成を表現する情報として、経路グラフにおける２ノード間の有向の結合関係を示す情報であるエッジ情報がエッジ情報記憶部に記憶される。まず、経路グラフに含まれる複数のノードにはそれぞれを識別するためのノード識別情報（ノードＩＤ）が付与される。図２に例示する経路グラフにおいては、ノードＡ〜ノードＦの６個のノードが含まれる。エッジ情報は、有向の結合関係を有する２つのノードで構成されるノードペアの結合関係と、その結合関係の重みであるコストと、を示す情報である。ノードペアの結合関係は、一方のノードから他方のノードへ向かう経路を示すものであり、図２に例示する経路グラフにおいては矢印で表現されている。なお、図２に示す経路グラフにおいては、ノードペアの結合関係は一方向のみ存在しているが、本発明においてはノードペアの結合関係を両方向にすることも可能である。つまり、Ａ→Ｂの経路が存在している場合に、更にＢ→Ａの経路を追加することが可能である。この場合、経路グラフは、それぞれにコストが与えられた２方向の結合関係を表現してもよいし、ノード間のコストのみが与えられた無向の結合関係を表現することも可能となる。ノードペアの結合関係のコストは、一方のノードから他方のノードへ向かう経路の通りやすさを示すものであり、コストが大きいほど当該経路は通りにくく、コストが小さいほど当該経路は通りやすい。なお、このような経路グラフの具体的な適用例としては、例えば、複数のノードを地点、エッジ情報は２つのノード間を結ぶ道、結合関係のコストは２地点間の距離に対応させることができる。
【００３０】
図３は、図２に例示する経路グラフの構成を表現するエッジ情報を示す図である。図３に示すように、エッジ情報は、経路グラフに含まれる複数のエッジを識別するエッジＩＤと、エッジに含まれる２つのノードの有向の結合関係を示す情報と、当該結合関係のコストを示す情報と、が対応付けられている。なお、ノードペアの結合関係が両方向に存在する場合は各方向に対応するエッジ情報が含まれることとする。つまり、エッジ情報には、経路グラフに存在する２つのノード間の経路がすべて含まれることとする。このようなエッジ情報を用いて、図２に例示する経路グラフに含まれる複数のノードのうちいずれか１つのノードを基準とする最適経路を探索する。
【００３１】
図４は、本実施形態に係る情報処理装置１０により実現される主な機能の一例を示す機能ブロック図である。図４に示すように、本実施形態において情報処理装置１０の制御部１１は、機能的には、例えば、経路情報取得部２０、基準ノード設定部２１、コスト評価値付与部２２、スレッド管理部２３、経路確定判断部２４（２４−１〜２４−ｎ）、前処理部２５、ルート値更新部２７及びコスト評価値更新部２８を含む更新処理部２６（２６−１〜２６−ｍ）を含んで構成されている。これらの機能は、記憶部１２に記憶されたプログラムを制御部１１が実行することにより実現されている。このプログラムは、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ可読な情報記憶媒体を介して、あるいは、インターネットなどの通信手段を介して情報処理装置１０に供給される。
【００３２】
経路情報取得部２０は、最適経路探索の対象となる経路情報を取得する。最適経路探索の対象は、複数のノードと、複数のノード間に設定される有向の結合関係を示す経路グラフとする。経路情報取得部２０は、経路情報として、経路グラフの構成を表現するエッジ情報を経取得してエッジ情報記憶部に記憶する。
【００３３】
基準ノード設定部２１は、経路情報取得部２０が取得した経路情報に含まれる複数のノードの中から経路探索の基準となる基準ノードを設定する。本実施形態では、基準ノードを経路の終点として設定されるノードとするが、経路の起点として設定されるノードであってもよい。
【００３４】
コスト評価値付与部２２は、経路情報に含まれる複数のノードそれぞれに、当該ノードと基準ノードとの間のコストを評価する値（コスト評価値）を付与する。コスト評価値の初期値は、基準ノード設定部２１が設定した基準ノードと、基準ノード以外のノードと、を区別することができるデータ値とし、例えば、基準ノードの初期値を０、それ以外のノードの初期値を正の値Ｎとする。ここで、Ｎは十分に大きい値とし、経路情報に含まれるすべてのエッジのコストの和を超えていればよい。
【００３５】
なお、基準ノード以外のノードの初期値Ｎはすべて同じ値としてもよいし、それぞれ異なる値としてもよい。それぞれ異なる値を設定する場合に、例えば、各ノードの位置関係が分かっている場合には基準ノードと各ノードとの距離に応じた値を設定することとしてもよい。具体的には、基準ノードと位置関係が近いノードには小さい値を設定し、基準ノードと位置関係が遠いノードには大きい値を設定してもよい。これにより、基準ノードと位置関係が近いノードから経路を確定しやすくなり最適経路探索処理をより高速化することが可能となる。
【００３６】
スレッド管理部２３は、同時に実行可能な複数のスレッドで処理させる処理内容と、各スレッドに割り当てる処理対象とを管理する。本実施形態では、スレッド管理部２３は、経路確定判断処理が実行される前に、エッジ情報記憶部に記憶されている複数のエッジ情報それぞれを経路確定判断処理の処理対象として各スレッドに割り当てる。また、スレッド管理部２３は、割り当てた全てのスレッドにおいて経路確定判断処理が終了するのを待つ同期処理を行う。これにより、複数のエッジ情報それぞれの経路確定判断処理を並列に処理することが可能となる。また、スレッド管理部２３は、更新処理が実行される前に、経路情報取得部２０が取得した経路情報に含まれる複数のノードそれぞれを更新処理の処理対象として各スレッドに割り当てる。また、スレッド管理部２３は、割り当てた全てのスレッドにおいて更新処理のための各処理が終了するのを待つ同期処理を行う。これにより、複数のノードそれぞれの更新処理を並列に処理することが可能となる。
【００３７】
経路確定判断部２４は、コスト評価値付与部２２が各ノードに設定したコスト評価値と、エッジ情報記憶部に記憶されているエッジ情報とに基づいて、エッジ（結合関係）毎に経路確定の判断を行う。本実施形態では、スレッド管理部２３が各スレッドに割り当てたエッジ情報それぞれにおいて経路確定判断部２４による経路確定の判断処理が並列に実行される。各スレッドにおいて経路確定判断部２４は、エッジ情報に含まれる複数の結合関係それぞれについて、経路として確定するか否かを判断する。ここで、経路として確定するか否かは、結合関係を有する２つのノードの結合関係の向きと、当該２つのノードそれぞれに設定されたコスト評価値と、に応じて判断される。具体的には、結合関係を有する２つのノードのうち結合元のノードを結合元ノード、結合先のノードを結合先ノードとする（例えば、結合関係Ａ←Ｂの場合は、結合元ノードはノードＢ、結合先ノードはノードＡとなる）。そして、基準ノードに付与されるコスト評価値の初期値を０、それ以外のノードに付与されるコスト評価値の初期値を正の値Ｎとすると、経路確定判断部２４は、（結合先ノードに設定されているコスト評価値）＜（結合元ノードに設定されているコスト評価値）の関係が成立する場合に、当該エッジを経路として確定する。このように、２ノード間の結合関係と、ノードに付与されるコスト評価値の大小関係と、に基づいて経路を確定することで循環しない一方向の経路を生成することができる。
【００３８】
経路確定判断部２４による判断結果は、ポインタ情報記憶部に記憶される。ポインタ情報記憶部は、経路情報に含まれるノード毎に、ポインタ値、及びコスト評価値を関連付けたポインタ情報を記憶する。ポインタ値は、各ノードを結合元ノードとする経路が確定したか否かを示す値であり、エッジＩＤ及び確定経路コストを含んでいる。経路確定判断部２４が経路として確定した結合関係の結合元ノードの確定経路コストには、当該結合関係のコストと結合先ノードに設定されたコスト評価値との和が対応付けられ、エッジＩＤに当該結合関係を示すエッジＩＤが対応付けられる。一方で、経路確定判断部２４が経路として確定しなかった結合関係の結合元ノードにはポインタ値は何も対応付けられない。このように、各ノードのポインタ値に値が対応付けられているか否かにより確定した経路を判断することができる。
【００３９】
上述したように、経路確定判断部２４による経路確定判断処理は、（結合先ノードに設定されているコスト評価値）＜（結合元ノードに設定されているコスト評価値）の関係が成立するかを判断するものであるので、一方向の結合関係を有する複数のエッジそれぞれにおいて同様のアルゴリズムで実行できることとなり、経路確定判断部２４は、各エッジにおける経路確定判断処理を並列に実行することができる。
【００４０】
前処理部２５は、各ノードに付与されるコスト評価値及びルート値を更新するための前処理を行う。前処理部２５は、ポインタ情報に含まれる各ノードに、ルートＩＤ、及びコスト評価値の更新初期値を設定する。ルートＩＤとは、自ノードから、確定された経路を経由して接続される先の終端のノードを示すものである。コスト評価値の更新初期値は、コスト評価値更新処理のための初期設定値であり、コスト評価値付与部２２が各ノードに付与するコスト評価値の初期値とは異なるものとする。コスト評価値の更新初期値は、各ノードに接続される確定した経路のコストを示すものである。具体的には、コスト評価値の更新初期値は、基準ノードには０、ポインタ値が設定されていないノードにはＮ、ポインタ値が設定されているノードには自ノードに対応付けられているエッジＩＤのコスト、が設定される。このように、確定した経路の結合元ノードには確定した経路のコストが設定され、確定していない経路の結合元ノードにはＮが設定されることで、各ノードから接続される確定経路のコストが示される。また、前処理部２５は、ルートＩＤの更新初期値として、ポインタ値が設定されているノード（確定された経路の結合元ノード）のルートＩＤには、結合先のノードを示す値（ノードＩＤ）を設定し、その他のノードのルートＩＤには、自身のノードを示す値を設定する。これにより、各ノードから確定経路により接続される先のノードが示される。
【００４１】
更新処理部２６は、ルート値更新部２７及びコスト評価値更新部２８を含み、前処理部２５が設定したルートＩＤ及びコスト評価値の更新初期値に基づいて、各ノードのルートＩＤ及び各ノードのコスト評価値を更新する。本実施形態では、スレッド管理部２３が各スレッドに割り当てたノードそれぞれにおいてルート値更新部２７によるルート値更新処理、及びコスト評価値更新部２８によるコスト評価値更新処理が並列に実行される。具体的には、ルート値更新部２７は、ルートＩＤの初期更新値が示すノードに対応付けられているルートＩＤのノードＩＤを取得し、ルートＩＤワークに一時保存する。また、コスト評価値更新部２８は、評価値Ｘ（ルートＩＤの初期更新値が示すノードに対応付けられているコスト評価値）＋評価値Ｙ（自ノードに対応付けられているコスト評価値）＝更新コスト評価値Ｚ（自ノードの更新コスト評価値）の計算式によって更新コスト評価値を計算し、コスト評価値ワークに一時保存する。そしてスレッド管理部２３が割り当てた全スレッドのルートＩＤワークに保存が終了し、かつスレッド管理部２３が割り当てた全スレッドのコスト評価値ワークに保存が終了した後、ルート値更新部２７は、ルートＩＤを、ルートＩＤワークに保存されているノードＩＤに更新する。また、コスト評価値更新部２８は、コスト評価値を、コスト評価値ワークに保存されている更新コスト評価値に更新する。
【００４２】
以上のように、コスト評価値更新部２８によるコスト評価値の更新処理は、（ルートＩＤに対応付けられているコスト評価値）＋（自ノードに対応付けられているコスト評価値）＝（自ノードの更新コスト評価値）として計算するものであり、また、ルート値更新部２７によるルート値更新処理は、ルートＩＤを、当該ルートＩＤが示すノードに対応付けられているルートＩＤのノードＩＤに更新するものである。このように、ルートＩＤとコスト評価値とを付与された各ノードにおいて同様のアルゴリズムで上記処理を実行できることとなる。したがって、更新処理部２６コスト評価値更新部２８は、各ノードにおける更新処理（ルート値更新処理及びコスト評価値更新処理）を並列に実行することができる。
【００４３】
そして、更新処理部２６は、更新したコスト評価値及び更新したルート値に基づいて、更新処理を繰り返すことで、確定経路の結合元ノードのルートＩＤは確定経路の終端のノードを、その他のノードのルートＩＤは自ノードを示すようにする。このとき、ノードの数がＲであれば最大ｌｏｇ２Ｒ回の繰り返し処理により、確定経路の結合元ノードのルートＩＤが確定経路の終端のノードを、その他のノードのルートＩＤが自ノードを示すように更新することが可能となる。ここで、更新処理部２６による処理の繰り返しの具体例を示す。図５は、経路確定判断部２４により経路が確定したノードの一例を示す図である。図５に示すように、ノードＺを基準ノード（終点ノード）として、ノードＺ（コスト評価値０）、ノードＸ（コスト評価値０．１）、ノードＹ（コスト評価値０．２）、ノードＷ（コスト評価値０．１）、ノードＶ（コスト評価値０．８）、ノードＵ（コスト評価値０．５）、ノードＴ（コスト評価値０．３）、ノードＳ（コスト評価値０．１）の８個のノードが順に接続するような経路が確定したとする。図５に示す確定経路に基づいて、各ノードについて更新処理部２６による処理を繰り返し実行した結果を図６に示す。図６に示すように３回の処理で確定経路の結合元ノードに対応付けられるルートＩＤを確定経路の終端のノード（ここでは、基準ノード）とすることができる。このように、上述したコスト評価値更新処理及びルート値更新処理を行うことで各ノードから１つずつ基準ノードまで辿ることで経路探索するより処理が高速になる。
【００４４】
また、経路確定処理及び更新処理の一連の処理は、フレーム（例えば、１／６０秒）毎に繰り返し実行されることとし、更新処理が終了する度に確定した経路はリセットされる。
【００４５】
ここで、本実施形態に係る情報処理装置１０が実行する最適経路探索処理の流れの一例を図７に示すフロー図を参照して説明する。ここでは、図２に例示する経路グラフに含まれる複数のノードのうちいずれか１つのノード（基準ノード）を基準とする最適経路探索を実行することとする。
【００４６】
まず、経路情報取得部２０は、最適経路探索を実行する対象となる経路グラフの情報を取得する（Ｓ１）。ここで、経路情報取得部２０は、経路情報として、経路グラフの構成を表現するエッジ情報を取得し、エッジ情報記憶部に記憶する。例えば、経路情報取得部２０は、図２に例示する経路グラフの情報として、図３に示すエッジ情報をエッジ情報記憶部に記憶する。
【００４７】
そして、基準ノード設定部２１は、経路情報取得部２０が取得した経路情報に含まれる複数のノードの中から、基準となる基準ノードを設定する（Ｓ２）。ここでは、基準ノード設定部２１は、経路の終点となるノードを基準ノードとして設定することとし、例えばノードＤを基準ノードとして設定することとする。
【００４８】
次に、コスト評価値付与部２２が、経路情報に含まれる複数のノードそれぞれに、当該ノードと基準ノードとの間のコストを評価するためのコスト評価値の初期値を付与する（Ｓ３）。ここでは、コスト評価値付与部２２は、基準ノードであるノードＤに、コスト評価値の初期値として０を設定し、基準ノード以外のノードであるノードＡ、ノードＢ、ノードＣ、ノードＥ、及びノードＦに、コスト評価値の初期値としてＮを設定する。コスト評価値付与部２２が付与した各ノードのコスト評価値の初期値は、ポインタ情報としてポインタ情報記憶部に記憶される。図８は、各ノードにコスト評価値の初期値が設定されたポインタ情報を示す。
【００４９】
そして、変数ｆにｆ＝１の初期値が設定され、（Ｓ４）経路確定判断処理が実行される（Ｓ５）。ここで変数ｆは、フレームを示す変数であり、１以上の整数値をとるカウンタ変数である。
【００５０】
経路確定判断処理については図９のフロー図を用いて説明する。図９に示すように、まず、スレッド管理部２３が、エッジ情報記憶部に記憶されている複数のエッジ情報それぞれを経路確定判断処理の処理対象として各スレッドに割り当てる（Ｓ１０１）。具体的には、スレッド管理部２３は、処理対象のエッジ情報をｎ個のスレッドＴｔ（ｔは１〜ｎの整数とする）に割り当てることとする。ここでは、エッジ情報記憶部にＥ０からＥ６の７個のエッジ情報が記憶されているので、それぞれＴ１からＴ７のスレッドに割り当てられることとする。そして、各スレッドにおいて経路確定判断部２４による経路確定判断処理が並列に実行される。
【００５１】
各スレッドにおいて経路確定判断部２４は、コスト評価値付与部２２が各ノードに設定したコスト評価値の初期値と、エッジ情報とに基づいて、経路確定の判断を行う（Ｓ１０２）。経路確定判断部２４は、（結合先ノードに設定されているコスト評価値）＜（結合元ノードに設定されているコスト評価値）の関係が成立するか否かを判断する。ここでは、エッジＩＤ＝１において、結合先ノード（ノードＤ）に設定されているコスト評価値が０、結合元ノード（ノードＢ）に設定されているコスト評価値がＮとなるので、上記関係が成立する。また、同様にして、エッジＩＤ＝６においても上記関係が成立する。したがって、経路確定判断部２４は、図３に示すエッジ情報のうち、エッジＩＤ＝１及びエッジＩＤ＝６を経路として確定する。そして、経路確定判断部２４は、確定した経路の結合元ノードにポインタ値を対応付ける。図１０は、経路確定後のポインタ情報を示す図である。図１０に示すように、経路確定後のポインタ情報は、経路として確定されたエッジＩＤ＝１の結合元ノードであるノードＢと、経路として確定されたエッジＩＤ＝６の結合元ノードであるノードＦと、にポインタ値が対応付けられる。ポインタ値は、確定経路コストとエッジＩＤとを含み、エッジＩＤには経路として確定したエッジのＩＤが対応付けられ、確定経路コストには、確定したエッジのコストと結合先ノードのコスト評価値との和が対応付けられる。例えば、ノードＢにおいては、エッジＩＤには確定した経路であるエッジＩＤ＝１が対応付けられ、コスト値には、エッジＩＤ＝１の重み１．０と結合先ノードであるノードＤのコスト評価値０との和である１．０が対応付けられる。ここでは、基準ノードに付与されるコスト評価値の初期値を他のノードより小さい値としているため、経路確定判断部２４が、結合先ノードのコスト評価値が小さい値となる経路を確定することで、基準ノードを終点とする経路を確定することとなる。
【００５２】
そして、スレッド管理部２３が並列処理を実行しているスレッドの同期処理を行い（Ｓ１０３）、リターンする。つまり、スレッド管理部２３が割り当てた全てのスレッド（Ｔ１〜Ｔｎ）において経路確定判断部２４による経路確定判断が終了した後にリターンする。
【００５３】
経路確定判断処理により経路が確定すると、前処理部２５が、各ノードに付与されるノードＩＤ及びコスト評価値を更新するための前処理を行う（Ｓ６）。前処理部２５は、ポインタ情報に含まれる各ノードに、ルートＩＤ及びコスト評価値の更新初期値を設定する。図１１は、前処理実行後のポインタ情報を示す図である。図１１に示すように、前処理部２５は、経路として確定されたエッジＩＤ＝１の結合元ノードであるノードＢに、コスト評価値の更新初期値として、ノードＢに対応付けられているエッジＩＤ＝Ｅ１のコスト（１．０）を、ルートＩＤの更新初期値としてエッジＩＤ＝Ｅ１の結合先ノードであるノードＤを、設定する。同様にして、前処理部２５は、経路として確定されたエッジＩＤ＝Ｅ６の結合元ノードであるノードＦには、コスト評価値の更新初期値として、ノードＦに対応付けられているエッジＩＤ＝６のコスト（１．０）を、ルートＩＤの更新初期値としてエッジＩＤ＝Ｅ６の結合先ノードであるノードＤを、設定する。また、前処理部２５は、基準ノードであるノードＤには、コスト評価値の更新初期値として０を、ルートＩＤの更新初期値として自ノードを設定する。そして、それ以外のノード（ノードＡ、ノードＣ、ノードＥ）には、コスト評価値の更新初期値としてＮを、ルートＩＤの更新初期値として自ノードを設定する。
【００５４】
続いて、前処理部２５が設定したルートＩＤ及びコスト評価値の更新初期値に基づいて、各ノードのルートＩＤ及び各ノードのコスト評価値を更新する更新処理が行われる（Ｓ７）。
【００５５】
更新処理については、図１２のフロー図を用いて説明する。図１２に示すように、まず、スレッド管理部２３が、ポインタ情報に含まれる複数のノードそれぞれをコスト評価値更新処理及びルート値更新処理の処理対象として各スレッドに割り当てる（Ｓ２０１）。スレッド管理部２３は、処理対象のノードをｍ個のスレッドＴｔ（ｔは１〜ｍの整数とする）に割り当てる。ここでは、ポインタ情報にはＡからＦの６個のノードが含まれているので、それぞれＴ１からＴ６のスレッドに割り当てられる。
【００５６】
そして、変数ｉにｉ＝１の初期値が設定され（Ｓ２０２）、各スレッドにおける更新処理部２６による更新値計算処理が並列に実行される（Ｓ２０３）。ここで変数ｉは、１以上の整数値をとるカウンタ変数である。
【００５７】
コスト評価値更新部２８処理Ｓ２０３にて実行される更新処理部２６による更新値計算処理では、ルート値更新部２７により更新するルート値が取得され、コスト評価値更新部２８により更新するコスト評価値が計算される。
【００５８】
具体的には、ルート値更新部２７は、ルートＩＤが示すノードに対応付けられているルートＩＤのノードＩＤを取得し、ルートＩＤワークに一時保存する。また、コスト評価値更新部２８は、評価値Ｘ（ルートＩＤが示すノードに対応付けられているコスト評価値）＋評価値Ｙ（自ノードに対応付けられているコスト評価値）＝更新コスト評価値Ｚ（自ノードの更新コスト評価値）の計算式によって各ノードの更新コスト評価値を計算する。図１３は、更新値計算処理後のポインタ情報を示す図である。例えば、図１３におけるノードＢを例として説明すると、ノードＢに対応付けられているルートＩＤはノードＤであり、ノードＤに対応付けられているルートＩＤはノードＤである。この場合、ノードＢに対応付けられる新しいルートＩＤは、ノードＤのルートＩＤであるノードＤとなり、ルート値更新部２７はルートＩＤワークにノードＤを一時保存する。また、図１３に示すように、ノードＡにおいては、評価値Ｘ＝Ｎ、評価値Ｙ＝Ｎとなるので、更新コスト評価値Ｚ＝Ｎと計算される。また、ノードＢにおいては、評価値Ｘ＝０、評価値Ｙ＝１．０となるので、更新コスト評価値Ｚ＝１．０と計算される。その他のノードについても上記計算式に基づいて更新コスト評価値Ｚが計算される。そして、コスト評価値更新部２８が計算した更新コスト評価値Ｚは、コスト評価値ワークに一時保存される。
【００５９】
そして、スレッド管理部２３が並列処理を実行しているスレッドの同期処理を行う（Ｓ２０４）。スレッド管理部２３は全てのスレッド（ここでは、スレッドＴ１〜スレッドＴ６）における更新値計算処理が終了するのを待ち、全てのスレッドにおいて更新値計算処理が終了した後に、更新処理部２６に処理Ｓ２０５における処理を行わせる。
【００６０】
更新処理部２６は、処理Ｓ２０３にてルートＩＤワークに保存されたルート値及びコスト評価値ワークに保存されたコスト評価値を用いて、ルートＩＤ及びコスト評価値を更新する（Ｓ２０５）。具体的には、ルート値更新部２７は、各ノードに対応付けられているルートＩＤを、ルートＩＤワークの値で更新し、コスト評価値更新部２８は、コスト評価値を、コスト評価値ワークの値で更新する。ここで、各スレッドにおける更新処理部２６による更新処理は並列に実行される。
【００６１】
そして、スレッド管理部２３が並列処理を実行しているスレッドの同期処理を行う（Ｓ２０６）。スレッド管理部２３は全てのスレッドにおける更新処理が終了するのを待ち、全てのスレッドにおいて更新処理が終了した後に処理Ｓ２０７における処理が行われる。
【００６２】
図１４は、更新処理後のポインタ情報を示す図である。図１４に示すように、全てのノードにおいて、ルートＩＤがルートＩＤワークの値に更新され、コスト評価値がコスト評価値ワークの値に更新される。
【００６３】
コスト評価値更新部２８処理Ｓ２０６におけるスレッドの同期処理が終了すると、ｊ≧ｌｏｇ２（Ｒ）が成立するか否かを判断する（Ｓ２０７）。ここで、Ｒは経路情報取得部２０が取得した経路情報に含まれるノードの数であり、図２示す経路情報においてはＲ＝６となる。
【００６４】
処理Ｓ２０７の判断の結果、ｊ≧ｌｏｇ２（Ｒ）が成立しないと判断された場合は（Ｓ２０７：Ｎ）、変数ｊに１が加算され（Ｓ２０８）、処理Ｓ２０３以降の処理を繰り返す。そして、処理Ｓ２０７の判断の結果、ｊ≧ｌｏｇ２（Ｒ）が成立すると判断された場合にリターンする。
【００６５】
そして、処理Ｓ７における更新処理が終了すると、経路探索の終了判定が実行される（Ｓ８）。ここで、終了判定は、処理Ｓ７において更新された各ノードのルートＩＤが基準ノードまたはルートノードを示しているか否かにより判定される。ここでは、基準ノードを終点とする経路探索を実行しているので、各ノードのルートＩＤが基準ノードを示すまで、経路確定処理、前処理及び更新処理を繰り返し実行する。ここで、ルートノードとは、経路情報に含まれるノードのうち終端となるノードであり、当該ノードを結合元ノードとするエッジ情報が存在しないノードとする。ルートノードは結合元ノードとならないので、基準ノードとの間に経路は存在しない。なお、各ノードのルートＩＤが基準ノードまたはルートノードを示した後であっても、経路確定処理及びコスト評価値更新処理を繰り返し実行することとしてもよい。経路確定処理及びコスト評価値更新処理を繰り返し実行することで、より最適な経路を探索することができる。
【００６６】
処理Ｓ８の終了判定の結果、終了判定なしと判定された場合は（Ｓ８：Ｎ）、変数ｆに１が加算され（Ｓ９）、処理Ｓ５にて確定した経路はリセットされる（Ｓ１０）。つまり、ポインタ情報に設定されていたポインタ値はすべて消去される。
【００６７】
図１４に示す更新処理後のポインタ情報では、ノードＣ、ノードＤ、及びノードＥにおいて更新されたルートＩＤが基準ノードまたはルートノードを示していないので、処理Ｓ８では終了判定なしと判定されフレーム２における処理Ｓ５以降の処理が実行される。
【００６８】
図１５に、フレーム２における経路確定判断処理が開始される前のポインタ情報を示す。図１５に示すように、フレーム２においては、フレーム１において確定された経路はリセットされるので、各ノードのポインタ値は消去される。また、各ノードのコスト評価値は、前フレーム（フレーム１）で更新されたコスト評価値が設定される。つまり、フレーム２では、前フレームで更新されたコスト評価値に基づいて、経路確定判断処理が実行される。
【００６９】
以下、フレーム２における処理Ｓ５以降の処理について説明する。まず、フレーム２における処理Ｓ５では、前フレームで更新されたコスト評価値に基づいて、経路確定判断処理が実行される（Ｓ５）。経路確定判断処理については図９のフロー図を用いて説明する。図９に示すように、まず、スレッド管理部２３は、エッジ情報記憶部に記憶されている複数のエッジ情報それぞれを経路確定判断処理の処理対象として各スレッドに割り当てる（Ｓ１０１）。スレッド管理部２３は、処理対象のエッジ情報をｎ個のスレッドＴｔ（ｔは１〜ｎの整数とする）に割り当てることとする。そして、各スレッドにおいて経路確定判断部２４による経路確定判断処理が並列に実行される。
【００７０】
各スレッドにおいて経路確定判断部２４は、前フレームで更新されたコスト評価値と、エッジ情報と、に基づいて経路確定の判断を行う（Ｓ１０２）。経路確定判断部２４は、フレーム１と同様に、（結合先ノードに設定されているコスト評価値）＜（結合元ノードに設定されているコスト評価値）の関係が成立するか否かを判断する。ここでは、エッジＩＤ＝１、エッジＩＤ＝２、エッジＩＤ＝５、及びエッジＩＤ＝６が経路として確定される。そして、経路確定判断部２４は、確定した経路の結合元ノードにポインタ値を対応付ける。図１６は、フレーム２における経路確定後のポインタ情報を示す図である。図１６に示すように、フレーム２における経路確定後のポインタ情報は、経路として確定されたエッジＩＤ＝１の結合元ノードであるノードＢと、エッジＩＤ＝２の結合元ノードであるノードＣと、エッジＩＤ＝５の結合元ノードであるノードＥと、エッジＩＤ＝６の結合元ノードであるノードＦと、にポインタ値が対応付けられる。
【００７１】
そして、スレッド管理部２３が並列処理を実行しているスレッドの同期処理を行い（Ｓ１０３）、リターンする。つまり、スレッド管理部２３が割り当てた全てのスレッド（Ｔ１〜Ｔｎ）において経路確定判断部２４による経路確定判断が終了した後にリターンする。
【００７２】
経路確定判断処理により経路が確定すると、前処理部２５が、フレーム２における各ノードに付与されるノードＩＤ及びコスト評価値を更新するための前処理を行う（Ｓ６）。前処理部２５は、ポインタ情報に含まれる各ノードに、ルートＩＤ及びコスト評価値の更新初期値を設定する。図１７は、フレーム２における前処理実行後のポインタ情報を示す図である。図１７に示すように、基準ノード（ノードＤ）には、コスト評価値の更新初期値として０、ルートＩＤの更新初期値として自ノード（ノードＤ）が設定される。また、ポインタ値に値が設定されていないノード（ノードＡ）には、コスト評価値の更新初期値としてＮ、ルートＩＤの更新初期値として自ノード（ノードＡ）が設定される。また、ポインタ値に値が設定されているノード（ノードＢ、ノードＣ、ノードＥ、ノードＦ）には、コスト評価値の更新初期値としてエッジＩＤが示すエッジのコスト、ルートＩＤの更新初期値としてエッジＩＤが示すエッジの結合先ノードが設定される。
【００７３】
続いて、前処理部２５が設定したルートＩＤ及びコスト評価値の更新初期値に基づいて、各ノードのルートＩＤ及び各ノードのコスト評価値を更新する更新処理が行われる（Ｓ７）。
【００７４】
更新処理については、図１２のフロー図を用いて説明する。図１２に示すように、まず、スレッド管理部２３が、ポインタ情報に含まれる複数のノードそれぞれをコスト評価値更新処理及びルート値更新処理の処理対象として各スレッドに割り当てる（Ｓ２０１）。スレッド管理部２３は、処理対象のノードをｍ個のスレッドＴｔ（ｔは１〜ｍの整数とする）に割り当てる。ここでは、ポインタ情報にはＡからＦの６個のノードが含まれているので、それぞれＴ１からＴ６のスレッドに割り当てられる。
【００７５】
そして、変数ｉにｉ＝１の初期値が設定され（Ｓ２０２）、各スレッドにおける更新処理部２６による更新値計算処理が並列に実行される（Ｓ２０３）。
【００７６】
処理Ｓ２０３にて実行される更新処理部２６による更新処理では、ルート値更新部２７により更新するルート値が取得され、コスト評価値更新部２８により更新するコスト評価値が計算される。具体的には、ルート値更新部２７は、ルートＩＤが示すノードに対応付けられているルートＩＤのノードＩＤを取得し、ルートＩＤワークに一時保存する。また、コスト評価値更新部２８コスト評価値更新部２８は、評価値Ｘ（ルートＩＤが示すノードに対応付けられているコスト評価値）＋評価値Ｙ（自ノードに対応付けられているコスト評価値）＝更新コスト評価値Ｚ（自ノードの更新コスト評価値）の計算式によって各ノードのコスト評価値を計算する。
【００７７】
図１８は、フレーム２における更新値計算処理後のポインタ情報を示す図である。例えば、図１８におけるノードＣを例として説明すると、ノードＣに対応付けられているルートＩＤはノードＢであり、ノードＢに対応付けられているルートＩＤはノードＤである。この場合、ノードＣの新しいルートＩＤは、ノードＢに対応付けられているルートＩＤであるノードＤとなり、ルート値更新部２７は、ルートＩＤワークにノードＤを一時保存する。また、図１８に示すように、ノードＡにおいては、評価値Ｘ＝Ｎ、評価値Ｙ＝Ｎとなるので、コスト評価値更新部２８は更新コスト評価値Ｚ＝Ｎと計算する。また、ノードＢにおいては、評価値Ｘ＝０、評価値Ｙ＝１．０となるので、コスト評価値更新部２８は更新コスト評価値Ｚ＝１．０と計算する。また、ノードＣにおいては、評価値Ｘ＝１．０、評価値Ｙ＝２．０となるので、コスト評価値更新部２８は、更新コスト評価値Ｚ＝３．０と計算する。その他のノードについても上記計算式に基づいて更新コスト評価値Ｚが計算される。そして、コスト評価値更新部２８が計算した更新コスト評価値Ｚは、コスト評価値ワークに一時保存される。
【００７８】
そして、スレッド管理部２３が並列処理を実行しているスレッドの同期処理を行う（Ｓ２０４）。スレッド管理部２３は全てのスレッド（ここでは、スレッドＴ１〜スレッドＴ６）における更新値計算処理が終了するのを待ち、全てのスレッドにおいて更新値計算処理が終了した後に、更新処理部２６に処理Ｓ２０５における処理を行わせる。
【００７９】
更新処理部２６は、処理Ｓ２０３にてルートＩＤワークに保存されたルート値及びコスト評価値ワークに保存されたコスト評価値を用いて、ルートＩＤ及びコスト評価値を更新する（Ｓ２０５）。具体的には、ルート値更新部２７は、各ノードに対応付けられているルートＩＤを、ルートＩＤワークの値で更新し、コスト評価値更新部２８は、コスト評価値を、コスト評価値ワークの値で更新する。ここで、各スレッドにおける更新処理部２６による更新処理は並列に実行される。
【００８０】
図１９は、フレーム２における更新処理後のポインタ情報を示す図である。図１９に示すように、全てのノードにおいて、ルートＩＤがルートＩＤワークの値に更新され、コスト評価値がコスト評価値ワークの値に更新される。
【００８１】
処理Ｓ２０６におけるスレッドの同期処理が終了すると、ｊ≧ｌｏｇ２（Ｒ）が成立するか否かを判断する（Ｓ２０７）。ここで、Ｒは経路情報取得部２０が取得した経路情報に含まれるノードの数であり、図２に示す経路情報においてはＲ＝６となる。
【００８２】
処理Ｓ２０７の判断の結果、ｊ≧ｌｏｇ２（Ｒ）が成立しないと判断された場合は（Ｓ２０７：Ｎ）、変数ｊに１が加算され（Ｓ２０８）、処理Ｓ２０３以降の処理を繰り返す。そして、処理Ｓ２０７の判断の結果、ｊ≧ｌｏｇ２（Ｒ）が成立すると判断された場合にリターンする。
【００８３】
そして、処理Ｓ７における更新処理が終了すると、経路探索の終了判定が実行される（Ｓ８）。
【００８４】
図１９に示すフレーム２における更新処理後のポインタ情報では、ノードＡのルートＩＤがノードＡを示し、ノードＡ以外のノードのルートＩＤが、基準ノードであるノードＤを示している。ノードＡはルートノードであるので、ルートＩＤは必ず自ノードを示す。したがって、経路情報に含まれる各ノードのルートＩＤが基準ノードまたはルートノードを示したことになり、経路探索の終了判定ありと判定される（８：Ｙ）。これにより、各ノードから基準ノードまでの最適経路が探索されたこととなり、経路探索処理は終了する。
【００８５】
最終的に決定した経路は、図１９に示すポインタ情報のポインタ値に設定された、エッジＩＤ＝１、エッジＩＤ＝２、エッジＩＤ＝５、及びエッジＩＤ＝６となる。そして、各ノードから基準ノードまでの経路コストは、各ノードに関連付けられているコスト評価値により示される。このようにして、基準ノードを選択することで、経路グラフに含まれる各ノードから基準ノードまでの最適経路を並列に探索することができる。
【００８６】
ここで、図２に例示する経路グラフでは、結合元ノードと結合先ノードとが１対１の関係の例を示したが、同一ノードからの結合先ノードが複数ある場合について説明する。図２０に、複数の結合先ノードを有するノードの一例を示す。図２０８に示すように、ノードＧが結合元ノードであり、ノードＨ及びノードＩが結合先ノードである。ここで、ノードＧ、ノードＨ、及びノードＩのコスト評価値をそれぞれＺｇ、Ｚｈ、及びＺｉとし、Ｇ→Ｈの結合関係をエッジｈ（コスト１．０）、Ｇ→Ｉの結合関係をエッジｉ（コスト２．０）とする。このような結合関係が経路グラフに含まれている場合に、経路確定判断部２４が、エッジｈ及びエッジｉの両方を経路として確定しようとすることがある。この場合は、経路確定判断部２４は、いずれか一方を経路として選択することとする。つまり、経路確定判断部２４は、あるノードからの経路が複数存在する場合には、最適な１つの経路を選択することとし、ポインタ情報に含まれる各ノードに対応するポインタ値には１つの値しか設定されないこととする。具体的には、経路確定判断部２４は、エッジｈの経路を確定した場合のノードＧの確定経路コストと、エッジｉの経路を確定した場合のノードＧの確定経路コストと、を比較し確定経路コストが小さくなる経路を選択する。エッジｈの経路を確定した場合のノードＧの確定経路コストＷｇ（ｈ）は、確定経路コストＷｇ（ｈ）＝Ｚｈ＋１．０となり、エッジｉの経路を確定した場合のノードＧの確定経路コストＷｇ（ｉ）は、確定経路コストＷｇ（ｉ）＝Ｚｉ＋２．０となる。経路確定判断部２４は、確定経路コストＺｇ（ｈ）と確定経路コストＺｇ（ｉ）とで値が小さくなるものを経路として選択する。これにより、経路確定判断部２４は、同一ノードから複数の経路が存在する場合に最適な経路を選択して確定することができる。
【００８７】
なお、本発明は、上述の実施形態に限定されるものではない。
【００８８】
例えば、経路確定処理、前処理及び更新処理がフレーム毎に繰り返し実行される間に、少なくとも１つのノード間の有向関係の重みが変化してもよい。この場合は、定期的に、エッジ情報記憶部に記憶されているエッジ情報を更新することとする。なお、ノード間の有向関係の重みの時間的変化が緩やかな場合は各ノードのコスト評価値に大きな変化は生じないので、フレームの切り替わりのタイミングでエッジ情報のコストが更新されたとしても、前フレームで更新した評価値を用いた経路探索処理の結果を用いて、コストが更新されたエッジ情報に基づくコスト評価値更新処理を実行することができる。
【００８９】
また、経路確定処理、前処理及び更新処理がフレーム毎に繰り返し実行される間に基準ノードが変更されてもよい。この場合、経路確定判断部２４による経路確定判断処理が実行される前に、変更された基準ノードの情報を適用させる。つまり、経路確定判断部２４による経路確定判断処理が実行される前の各ノードに付与されている評価値を変更させる。変更前の基準ノードには評価値として０が付与されているはずなのでこれを変更してＮを付与し、変更後の基準ノードには評価値として０を付与することとする。それ以外のノードに付与される評価値は、前フレームで更新された評価値を用いることができる。経路確定判断部２４は、（結合先ノードに設定されているコスト評価値）＜（結合元ノードに設定されているコスト評価値）の関係が成立する場合に経路を確定するので、経路確定処理、前処理及び更新処理がフレーム毎に繰り返し実行されることで最終的に必ず評価値が小さいノードが経路の終点となる。このように、基準ノードが変更されたとしても、最終的に評価値が小さいノードをルートとすることができるので、途中で基準ノードが変更されたとしても最適経路を探索することが可能となる。
【００９０】
また、上述の実施形態では、基準ノードを経路の終点とする例について示したが、基準ノードを経路の起点とする最適経路を探索することとしてもよい。この場合、初期値設定部が初期値として基準ノードに０、その他のノードにＮを設定すると、経路確定判断部２４は、（結合先ノードに設定されているコスト評価値）＞（結合元ノードに設定されているコスト評価値）の関係が成立する場合に、当該結合先ノード及び結合元ノードを含むエッジを経路として確定することとすればよい。そして、ポインタ情報に含まれるポインタ値は、各ノードを結合先ノードとする経路が確定したか否かを示す値とする。経路確定判断部２４が経路として確定した結合関係の結合先ノードの確定経路コストに、当該結合関係の重みと結合元ノードに設定された評価値との和が対応付けられ、エッジＩＤに当該結合関係のエッジＩＤが対応付けられることとする。そして、ポインタ情報に含まれるルートＩＤには各ノードを結合先とする確定経路の結合元ノードが対応付けられることとする。上記以外の処理は前述した基準ノードを経路の起点とする場合の処理と同様にすることができる。
【符号の説明】
【００９１】
５  ＣＰＵ、６  ＧＰＵ、１０  情報処理装置、１１  制御部、１２  記憶部、１３  通信部、１４  操作部、１５  表示部、２０  経路情報取得部、２１  基準ノード設定部、２２  コスト評価値付与部、２３  スレッド管理部、２４  経路確定判断部、２５  前処理部、２６  更新処理部、２７  ルート値更新部、２８  コスト評価値更新部。
【図１】
2016116067.tif 000003
【図２】
2016116067.tif 000004
【図３】
2016116067.tif 000005
【図４】
2016116067.tif 000006
【図５】
2016116067.tif 000007
【図６】
2016116067.tif 000008
【図７】
2016116067.tif 000009
【図８】
2016116067.tif 000010
【図９】
2016116067.tif 000011
【図１０】
2016116067.tif 000012
【図１１】
2016116067.tif 000013
【図１２】
2016116067.tif 000014
【図１３】
2016116067.tif 000015
【図１４】
2016116067.tif 000016
【図１５】
2016116067.tif 000017
【図１６】
2016116067.tif 000018
【図１７】
2016116067.tif 000019
【図１８】
2016116067.tif 000020
【図１９】
2016116067.tif 000021
【図２０】
2016116067.tif 000022