(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022171190
(43)【公開日】2022-11-11
(54)【発明の名称】経路検出装置およびプログラム
(51)【国際特許分類】
G06F 17/10 20060101AFI20221104BHJP
【FI】
G06F17/10 Z
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021077691
(22)【出願日】2021-04-30
(71)【出願人】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(71)【出願人】
【識別番号】301063496
【氏名又は名称】東芝デジタルソリューションズ株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】鈴木 賢
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB91
(57)【要約】
【課題】有向グラフに含まれる特定の種類の単純閉路を検出する。
【解決手段】経路検出装置は、強連結成分検出部と、問題生成部と、解取得部と、単純閉路検出部とを備える。強連結成分検出部は、有向グラフに含まれる強連結成分を検出する。問題生成部は、強連結成分について、QUBO問題を生成する。解取得部は、強連結成分について、QUBO問題の解を取得する。単純閉路検出部は、強連結成分について、部分グラフに含まれる単純閉路を検出する。QUBO問題における目的関数に含まれる複数の決定変数は、強連結成分に含まれる複数のノードまたは複数のエッジに対応する。部分グラフは、強連結成分における、解に基づき選択される2以上のノードまたは2以上のエッジを含む一部分であえる。目的関数に含まれるQUBO行列は、部分グラフが予め設定された条件を満たす場合に、目的関数が最小となるように設定される。
【選択図】
図6
【特許請求の範囲】
【請求項1】
有向グラフに含まれる単純閉路を検出する経路検出装置であって、
前記有向グラフに含まれる1または複数の強連結成分を検出する強連結成分検出部と、
前記1または複数の強連結成分のそれぞれについて、QUBO問題を生成する問題生成部と、
前記1または複数の強連結成分のそれぞれについて、前記QUBO問題の解を取得する解取得部と、
前記1または複数の強連結成分のそれぞれについて、部分グラフに含まれる前記単純閉路を検出する単純閉路検出部と、
検出した前記単純閉路を特定する情報を出力する出力部と、
を備え、
前記QUBO問題における目的関数に含まれる複数の決定変数は、前記1または複数の強連結成分のうちの対象の強連結成分に含まれる複数のノードまたは複数のエッジに対応し、
前記部分グラフは、前記対象の強連結成分における、前記解に基づき選択される2以上のノードまたは2以上のエッジを含む一部分であり、
前記目的関数に含まれるQUBO行列は、前記部分グラフが予め設定された条件を満たす場合に、前記目的関数が最小となるように設定される
経路検出装置。
【請求項2】
前記複数の決定変数は、前記対象の強連結成分に含まれる前記複数のエッジに対応し、
前記QUBO行列は、前記部分グラフに含まれる2以上のノードのそれぞれにおける入力次数と出力次数との加算値が第1設定値となる場合に、前記目的関数が最小となるように、設定される
請求項1に記載の経路検出装置。
【請求項3】
前記問題生成部は、下記式(1)に示す前記目的関数を生成し、
【数1】
iおよびjは、1以上E以下の整数であり、
Eは、前記対象の強連結成分に含まれる前記複数のエッジの個数であり、
x
iは、i番目のエッジに対応する決定変数であり、
x
jは、j番目のエッジに対応する決定変数であり、
Q
i,jは、前記QUBO行列に含まれるi番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数である
請求項2に記載の経路検出装置。
【請求項4】
Q
i,jは、下記式(2)により表され、
【数2】
Q
α
i,jは、i番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数の第1項であり、
Q
source
i,jは、i番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数の第2項であり、
Q
destination
i,jは、i番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数の第3項であり、
αは、正の実数であり、
source
iは、i番目のエッジの元ノードを表し、
source
jは、j番目のエッジの出力先ノードを表し、
destination
iは、i番目のエッジの元ノードを表し、
destination
jは、j番目のエッジの出力先ノードを表す
請求項3に記載の経路検出装置。
【請求項5】
前記1または複数の強連結成分のそれぞれ毎に、前記QUBO問題の生成および前記QUBO問題の解の取得を繰り返させる繰返制御部をさらに備え、
前記繰返制御部は、
2回目以降の前記QUBO問題の生成処理において、直前の処理で用いたαから所定量減少させた新たなαを用いて、新たな前記QUBO問題を生成させ、
前記部分グラフに含まれるエッジの個数が閾値以下である場合、繰返処理を終了して、前記部分グラフに含まれる前記単純閉路を検出させる
請求項4に記載の経路検出装置。
【請求項6】
前記複数の決定変数は、前記対象の強連結成分に含まれる前記複数のノードに対応し、
前記QUBO行列は、前記部分グラフに含まれる2以上のノードのそれぞれにおける接続されていないノードの個数が第2設定値となる場合に、前記目的関数が最小値となるように、設定される
請求項1に記載の経路検出装置。
【請求項7】
前記目的関数は、下記式(3)により表され、
【数3】
iおよびjは、1以上N以下の整数であり、
Nは、前記対象の強連結成分に含まれる前記複数のノードの個数であり、
x
iは、i番目のノードに対応する決定変数であり、
x
jは、j番目のノードに対応する決定変数であり、
Q
i,jは、前記QUBO行列に含まれるi番目のノードに対応する決定変数とj番目のノードに対応する決定変数との組に乗算される係数である
請求項6に記載の経路検出装置。
【請求項8】
Q
i,jは、下記式(4)により表され、
【数4】
βは、正の実数であり、
Edgesは、前記対象の強連結成分に含まれるエッジの集合であり、
(i,j)は、i番目のノードからj番目のノードへと向かうエッジである
請求項7に記載の経路検出装置。
【請求項9】
前記1または複数の強連結成分のそれぞれ毎に、前記QUBO問題の生成および前記QUBO問題の解の取得を繰り返させる繰返制御部をさらに備え、
前記繰返制御部は、
2回目以降の前記QUBO問題の生成処理において、直前の処理で用いたβから所定量減少させた新たなβを用いて、新たな前記QUBO問題を生成させ、
前記部分グラフに含まれるエッジの個数が閾値以下である場合、繰返処理を終了して、前記部分グラフに含まれる前記単純閉路を検出させる
請求項8に記載の経路検出装置。
【請求項10】
情報処理装置を、有向グラフに含まれる単純閉路を検出す経路検出装置として機能させるためのプログラムであって、
前記情報処理装置を、
前記有向グラフに含まれる1または複数の強連結成分を検出する強連結成分検出部と、
前記1または複数の強連結成分のそれぞれについて、QUBO問題を生成する問題生成部と、
前記1または複数の強連結成分のそれぞれについて、前記QUBO問題の解を取得する解取得部と、
前記1または複数の強連結成分のそれぞれについて、部分グラフに含まれる前記単純閉路を検出する単純閉路検出部と、
検出した前記単純閉路を特定する情報を出力する出力部と、
して機能させ、
前記QUBO問題における目的関数に含まれる複数の決定変数は、前記1または複数の強連結成分のうちの対象の強連結成分に含まれる複数のノードまたは複数のエッジに対応し、
前記部分グラフは、前記対象の強連結成分における、前記解に基づき選択される2以上のノードまたは2以上のエッジを含む一部分であり、
前記目的関数に含まれるQUBO行列は、前記部分グラフが予め設定された条件を満たす場合に、前記目的関数が最小となるように設定される
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、経路検出装置およびプログラムに関する。
【背景技術】
【0002】
有向グラフに含まれる閉路を検出する技術が知られている。有向グラフに含まれる閉路を検出する技術は、例えば、企業間取引において監査すべき対象である循環取引の検出に用いることができる。例えば、企業をノード、支払関係をエッジとした有向グラフを生成し、生成した有向グラフに含まれる単純閉路を検出することによって、企業間の循環取引を検出することができる。
【0003】
有向グラフに含まれる閉路を検出する従来の技術として、単純閉路検出アルゴリズムが知られている。従来の単純閉路検出アルゴリズムは、有向グラフに含まれる強連結成分を検出し、検出した強連結成分に対して深さ優先探索をすることにより単純閉路を検出する。
【0004】
しかし、従来の単純閉路検出アルゴリズムは、有向グラフに含まれるノードの個数をN、エッジの個数をE、単純閉路の個数をCとした場合、O1×((N+E)×(C+1))の計算時間およびO2×(N+E)の計算空間が必要であった。従って、従来の単純閉路検出アルゴリズムは、大規模な有向グラフから単純閉路を検出することは現実的ではなかった。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】鈴鹿順美, “グラフ理論を用いた循環取引の検知”, 情報センサー Vol.160 December 2020,P8-11, [2021年4月26日検索],インターネット<URL,https://www.eyjapan.jp/library/issue/info-sensor/2020-12-02.html>
【非特許文献2】Johnson, D. B., “Finding all the elementary circuits of a directed graph”, SIAM Journal on Computing, 4(1), P77-84, 1975
【非特許文献3】Tarjan, R., “Depth-first search and linear graph algorithms”, SIAM journal on computing, 1(2), P146-160, 1972
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明が解決しようとする課題は、有向グラフに含まれる特定の種類の単純閉路を、少ない計算時間および少ない計算空間により検出することができる経路検出装置およびプログラムを提供することにある。
【課題を解決するための手段】
【0007】
実施形態に係る経路検出装置は、有向グラフに含まれる単純閉路を検出する。前記経路検出装置は、強連結成分検出部と、問題生成部と、解取得部と、単純閉路検出部と、出力部と、を備える。前記強連結成分検出部は、前記有向グラフに含まれる1または複数の強連結成分を検出する。前記問題生成部は、前記1または複数の強連結成分のそれぞれについて、QUBO問題を生成する。前記解取得部は、前記1または複数の強連結成分のそれぞれについて、前記QUBO問題の解を取得する。前記単純閉路検出部は、前記1または複数の強連結成分のそれぞれについて、部分グラフに含まれる前記単純閉路を検出する。前記出力部は、検出した前記単純閉路を特定する情報を出力する。前記QUBO問題における目的関数に含まれる複数の決定変数は、前記1または複数の強連結成分のうちの対象の強連結成分に含まれる複数のノードまたは複数のエッジに対応する。前記部分グラフは、前記対象の強連結成分における、前記解に基づき選択される2以上のノードまたは2以上のエッジを含む一部分であえる。前記目的関数に含まれるQUBO行列は、前記部分グラフが予め設定された条件を満たす場合に、前記目的関数が最小となるように設定される。
【図面の簡単な説明】
【0008】
【
図1】第1実施形態に係る経路検出装置の機能構成を示す図である。
【
図6】第1実施形態に係る経路検出装置の処理を示すフローチャートである。
【
図7】第2実施形態に係る経路検出装置の処理を示すフローチャートである。
【
図8】経路検出装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら実施形態に係る経路検出装置10について説明する。
【0010】
(第1実施形態)
図1は、第1実施形態に係る経路検出装置10の機能構成を示す図である。
【0011】
経路検出装置10は、有向グラフに含まれる特定の種類の単純閉路を、少ない計算時間および少ない計算空間により検出する。第1実施形態において、経路検出装置10は、有向グラフに含まれる複数の単純閉路の全てうちの、確率的に、エッジ数の少ない単純閉路の個数を除き、エッジ数の多い単純閉路を検出する。経路検出装置10は、プロセッサ、コンピュータまたはサーバ等がプログラムを実行することにより実現される。
【0012】
経路検出装置10は、QUBOソルバー22と、グラフ取得部24と、強連結成分検出部26と、問題生成部28と、解取得部30と、部分グラフ生成部32と、単純閉路検出部34と、繰返制御部36と、出力部38とを備える。
【0013】
QUBOソルバー22は、QUBO(Quadratic unconstrained binary optimization)問題の解を算出する。QUBOソルバー22は、QUBO問題を受け取り、受け取ったQUBO問題の解を出力する。QUBOソルバー22は、最適解を出力してもよいし、近似解を出力してもよい。QUBOソルバー22は、イジング問題の解を算出するソルバーであってもよい。QUBOソルバー22は、例えば、経路検出装置10を実現するプロセッサまたはコンピュータがQUBO問題の求解プログラムを実行することにより実現される。また、QUBOソルバー22は、サーバ等により提供されてもよい。この場合、QUBOソルバー22は、経路検出装置10の外部に実現されてもよい。QUBOソルバー22が経路検出装置10の外部に実現される場合、経路検出装置10は、ネットワークを介してQUBOソルバー22に対してQUBO問題を与えて、解をQUBOソルバー22からネットワークを介して取得する。
【0014】
グラフ取得部24は、単純閉路を検出する対象である有向グラフを取得する。有向グラフについては、
図2を参照してさらなる詳細を後述する。
【0015】
強連結成分検出部26は、取得した有向グラフに含まれる1または複数の強連結成分を検出する。強連結成分については、
図3を参照してさらなる詳細を後述する。
【0016】
問題生成部28は、検出した1または複数の強連結成分のそれぞれについて、QUBO問題を生成する。QUBO問題における目的関数に含まれる複数の決定変数は、1または複数の強連結成分のうちの対象の強連結成分に含まれる複数のノードまたは複数のエッジに対応する。第1実施形態において、QUBO問題における複数の決定変数は、対象の強連結成分に含まれる複数のエッジに一対一で対応する。
【0017】
QUBO問題における目的関数に含まれるQUBO行列は、部分グラフが予め設定された条件を満たす場合に、目的関数が最小となるように設定される。部分グラフは、対象の強連結成分における、QUBO問題の解に基づき選択される2以上のノードまたは2以上のエッジを含む一部分である。第1実施形態において、QUBO行列は、部分グラフに含まれる2以上のノードのそれぞれにおける入力次数(in-degree)と出力次数(out-degree)との加算値が第1設定値となる場合に、目的関数が最小となるように設定される。
【0018】
解取得部30は、1または複数の強連結成分のそれぞれについて、生成されたQUBO問題をQUBOソルバー22に与えて、QUBO問題の求解を要求する。そして、解取得部30は、1または複数の強連結成分のそれぞれについて、生成されたQUBO問題の解を、QUBOソルバー22から取得する。
【0019】
部分グラフ生成部32は、1または複数の強連結成分のそれぞれについて、QUBO問題の解に基づき選択される部分グラフを生成する。より具体的には、部分グラフ生成部32は、対象の強連結成分における、QUBO問題の解が1となる決定変数に対応する2以上のノードまたは2以上のエッジを含む一部分を、部分グラフとして検出する。本実施形態においては、部分グラフ生成部32は、対象の強連結成分における、QUBO問題の解が1となる決定変数に対応する2以上のエッジを含む一部分を、部分グラフとして検出する。
【0020】
単純閉路検出部34は、1または複数の強連結成分のそれぞれについて、部分グラフに含まれる単純閉路を検出する。単純閉路については、
図4および
図5を参照してさらなる詳細を後述する。
【0021】
繰返制御部36は、1または複数の強連結成分のそれぞれ毎に、問題生成部28によるQUBO問題の生成、解取得部30によるQUBO問題の解の取得、部分グラフ生成部32による部分グラフの生成を、部分グラフに含まれるエッジの個数が予め設定された閾値以下となるまで繰り返させる。
【0022】
繰返制御部36は、2回目以降のQUBO問題の生成処理において、直前の処理で用いたQUBO行列を変更した新たなQUBO行列を用いて、新たなQUBO問題を生成させる。そして、繰返制御部36は、部分グラフに含まれるエッジの個数が閾値以下である場合、繰返処理を終了して、単純閉路検出部34に部分グラフに含まれる単純閉路を検出させる。従って、繰返制御部36は、1または複数の強連結成分のそれぞれ毎に、エッジ数が閾値以下とされた部分グラフに含まれる単純閉路を検出することができる。これにより、繰返制御部36は、単純経路を検出するための計算時間および計算空間を少なくすることができる。
【0023】
出力部38は、1または複数の強連結成分の全てについて検出した単純閉路を、有向グラフに含まれる単純閉路として出力する。出力部38は、検出した単純閉路を表示手段に表示することによりユーザに提示してもよい。また、出力部38は、検出した単純閉路をネットワークを介して外部の装置に送信してもよい。
【0024】
図2は、有向グラフの一例を示す図である。有向グラフは、複数のノード間の接続関係を、向きを有するエッジを用いて表したグラフである。エッジの入力側のノードを元ノードと呼び、エッジの出力側のノードを出力先ノードと呼ぶ。
【0025】
例示した有向グラフは、A,B,C,DおよびEの5個のノードを含む。また、例示した有向グラフは、6個のエッジを含む。6個のエッジは、AからBに向かうエッジ(A→B)と、BからCに向かうエッジ(B→C)と、CからAに向かうエッジ(C→A)と、BからDに向かうエッジ(B→D)と、DからAに向かうエッジ(D→A)と、DからEに向かうエッジ(D→E)とを含む。
【0026】
図3は、強連結成分の一例を示す図である。強連結成分は、有向グラフの一部分のグラフであって、任意の2つのノードの間に双方向に行き来が可能な経路を含む極大なグラフである。
【0027】
図3に示すように、例示した有向グラフに含まれる強連結成分は、A、B、CおよびDを含むグラフである。A、B、CおよびDを含むグラフは、A、B、CおよびDのうちの任意の2つのノードを選択した場合、双方向に行き来が可能な経路が存在する。さらに、A、B、CおよびDを含むグラフは、他のどのノードを加えても強連結成分とはならない。従って、A、B、CおよびDを含むグラフは、例示した有向グラフの一部分であって、任意の2つのノードの間に双方向に行き来が可能な経路を含む極大なグラフである。
【0028】
図4は、単純閉路の第1例を示す図である。
図5は、単純閉路の第2例を示す図である。閉路は、ある任意のノードから開始し、開始したノードに戻る経路である。単純閉路は、閉路のうちの、重複するノードが存在しない、すなわち、同一のノードが2個以上含まれない経路である。
【0029】
図4に示すように、例示した有向グラフに含まれる単純閉路の一つは、A→B→C→Aの経路である。また、
図5に示すように、例示した有向グラフに含まれる単純閉路の一つは、A→B→D→Aの経路である。
【0030】
図6は、第1実施形態に係る経路検出装置10の処理の流れを示すフローチャートである。経路検出装置10は、
図6に示す流れで処理を実行する。
【0031】
まず、S11において、グラフ取得部24は、単純閉路を検出する対象である有向グラフを取得する。
【0032】
例えば、グラフ取得部24は、表1に示すような、有向グラフに含まれる複数のエッジのそれぞれについて、元ノードと、出力先ノードとが記述された情報を取得する。なお、グラフ取得部24は、このような記述に限らず他の方法で記述された有向グラフを取得してもよい。
【0033】
【0034】
続いて、S12において、強連結成分検出部26は、取得した有向グラフを解析して、取得した有向グラフに含まれる1または複数の強連結成分を検出する。強連結成分検出部26は、一例として、非特許文献3に示されているTarjan’s algorithmを用いて、有向グラフから強連結成分を検出することができる。
【0035】
続いて、経路検出装置10は、1または複数の強連結成分のそれぞれについて、S14からS20までの処理を実行する(S13とS21との間のループ処理)。
【0036】
S14において、問題生成部28は、S14からS20までの処理を実行する対象の強連結成分について、QUBO問題を生成する。第1実施形態において、QUBO問題における目的関数に含まれる複数の決定変数は、対象の強連結成分に含まれる複数のエッジに一対一で対応する。
【0037】
続いて、S15において、解取得部30は、対象の強連結成分について、生成されたQUBO問題をQUBOソルバー22に与えて、QUBO問題の求解を要求する。そして、解取得部30は、対象の強連結成分について、生成されたQUBO問題の解を、QUBOソルバー22から取得する。
【0038】
続いて、S16において、部分グラフ生成部32は、対象の強連結成分について、QUBO問題の解に基づき選択される部分グラフを生成する。より具体的には、部分グラフ生成部32は、対象の強連結成分における、QUBO問題の解が1となる決定変数に対応する2以上のノードまたは2以上のエッジを含む一部分を、部分グラフとして検出する。第1実施形態においては、部分グラフ生成部32は、対象の強連結成分における、QUBO問題の解が1となる決定変数に対応する2以上のエッジを含み、解が0となる決定変数に対応するエッジを含まない一部分を、部分グラフとして検出する。
【0039】
ここで、第1実施形態において、問題生成部28は、QUBO問題における目的関数として、式(1)に示す関数を生成する。
【数1】
【0040】
Eは、対象の強連結成分に含まれるエッジの個数である。iおよびjは、1以上E以下の整数であり、エッジのインデックスを表す。xiは、E個のエッジのうちのi番目のエッジに対応する決定変数である。xjは、E個のエッジのうちのj番目のエッジに対応する決定変数である。
【0041】
Qi,jは、QUBO行列に含まれるi番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数である。
【0042】
第1実施形態において、QUBO行列は、E×Eの正方行列である。第1実施形態において、QUBO行列は、部分グラフに含まれる2以上のノードのそれぞれにおける入力次数と出力次数との加算値が第1設定値となる場合に、目的関数が最小となるように設定される。入力次数は、ノードへと入るエッジの個数である。出力次数は、ノードから出るエッジの個数である。
【0043】
第1実施形態において、QUBO行列に含まれる係数であるQ
i,jは、式(2)により表される。
【数2】
【0044】
Qα
i,jは、i番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数の第1項である。Qsource
i,jは、i番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数の第2項である。Qdestination
i,jは、i番目のエッジに対応する決定変数とj番目のエッジに対応する決定変数との組に乗算される係数の第3項である。
【0045】
sourceiは、i番目のエッジの元ノードを表す。sourcejは、j番目のエッジの元ノードを表す。destinationiは、i番目のエッジの出力先ノードを表す。destinationjは、j番目のエッジの出力先ノードを表す。
【0046】
そして、αは、正の実数である。例えば、αは、初期値がユーザ等により設定される。
【0047】
係数の第1項であるQα
i,jは、QUBO行列の対角成分の係数に-4αを加算し、対角成分以外の係数に0を加算することを表す。係数の第2項であるQsource
i,jは、元エッジが共通する2つのエッジの組に対応する係数に+1を加算し、元エッジが共通しない2つのエッジの組に対応する係数に0を加算することを表す。係数の第3項であるQdestination
i,jは、出力先エッジが共通する2つのエッジの組に対応する係数に+1を加算し、出力先エッジが共通しない2つのエッジの組に対応する係数に0を加算することを表す。
【0048】
例えば、問題生成部28は、表1に示した有向グラフに含まれる強連結成分について、式(2)を実行した場合、下記の表2に示すQUBO行列を生成することができる。
【表2】
【0049】
式(2)に従って算出されたQUBO行列を含む目的関数は、部分グラフに含まれる2以上のノードのそれぞれにおける入力次数と出力次数との加算値が2×αとなるように、N個の決定変数の値が選択された場合に、最小値となる。すなわち、式(2)に従って算出されたQUBO行列を含む目的関数を用いたQUBO問題は、部分グラフに含まれる2以上のノードのそれぞれにおける入力次数と出力次数との加算値が2×αとなる近傍において、大域的最小値を返す。なお、2×αは、第1設定値に相当する値である。
【0050】
従って、式(2)に従って算出されたQUBO行列を含む目的関数を用いたQUBO問題は、対象の強連結成分のうちの、入力次数と出力次数との加算値が2×αより大きいノードからエッジを除き、入力次数と出力次数との加算値が2×α以下のノードのエッジを残すような、解を返すことができる。このため、式(2)に従って算出されたQUBO行列を含む目的関数を用いたQUBO問題は、多重エッジおよび多重経路を高い確率で除いた部分グラフを選択する解を返すことができる。
【0051】
なお、QUBO行列は、式(2)に示す行列に限らず他の行列であってもよい。例えば、QUBO行列は、式(2)に示す行列に係数が乗算された行列であってもよい。また、QUBO行列における係数の第1項であるQα
i,jは、QUBO行列の対角成分の係数に-4αを加算するのではなく、-1×A×αを加算してもよい。なお、Aは、正の整数である。
【0052】
S16に続いて、S17において、繰返制御部36は、生成した部分グラフのエッジ数を検出する。続いて、S18において、繰返制御部36は、対象の強連結成分について、生成した部分グラフに含まれるエッジの個数が予め設定された閾値以下であるか否かを判断する。繰返制御部36は、生成した部分グラフに含まれるエッジの個数が閾値より多い場合(S18のNo)、処理をS19に進める。
【0053】
S19において、繰返制御部36は、QUBO行列の算出に用いるαを所定量減少させる。繰返制御部36は、S19を終えると、処理をS14に戻す。そして、問題生成部28は、S14から処理を繰り返す。
【0054】
部分グラフに含まれるエッジの個数は、ノードにおける入力次数と出力次数との加算値の、部分グラフの全体の合計に比例する。このため、部分グラフに含まれるエッジの個数は、αの増加に従って、単調増加する。従って、繰返制御部36は、αを変更して、QUBO問題の生成および部分グラフの生成を繰り返すことにより、部分グラフに含まれるエッジの個数を目的値に制御することができる。例えば、繰返制御部36は、二分探索により部分グラフに含まれるエッジの個数を目的値に制御することができる。
【0055】
繰返制御部36は、部分グラフに含まれるエッジの個数が閾値以下である場合(S18のYes)、処理をS20に進める。
【0056】
S20において、単純閉路検出部34は、対象の強連結成分のそれぞれについて、部分グラフに含まれる単純閉路を検出する。例えば、単純閉路検出部34は、深さ優先探索処理により、部分グラフから単純閉路を検出する。例えば、単純閉路検出部34は、非特許文献2に記載されたJohnson’s algorithmを用いて、部分グラフに含まれる単純閉路を検出することができる。
【0057】
S21において、経路検出装置10は、1または複数の強連結成分の全てについて、S14からS20までの処理を実行したか否かを判断する。経路検出装置10は、1または複数の強連結成分の全てについては実行が完了していない場合には、未実行の強連結成分について、S14からS20までの処理を実行する。経路検出装置10は、1または複数の強連結成分の全てについて、S14からS20までの処理を完了した場合には、処理をS22に進める。
【0058】
S22において、出力部38は、1または複数の強連結成分の全てについて検出した単純閉路を、出力する。経路検出装置10は、S22を終了すると、本フローを終了する。
【0059】
以上のような第1実施形態に係る経路検出装置10は、有向グラフに含まれる1または複数の強連結成分のそれぞれについて、入力次数と出力次数との加算値が多いノードからエッジを除き、入力次数と出力次数との加算値が少ないノードからエッジを除かないように、部分ノードを検出する。これにより、経路検出装置10は、有向グラフから、多重エッジおよび多重経路を高い確率で除いた部分グラフを検出することができる。
【0060】
そして、経路検出装置10は、このような部分グラフから単純閉路を検出する。従って、経路検出装置10は、有向グラフに含まれるエッジ数の多い単純閉路を、少ない計算時間および少ない計算空間で検出することができる。
【0061】
(第2実施形態)
つぎに、第2実施形態に係る経路検出装置10を説明する。第2実施形態に係る経路検出装置10は、有向グラフに含まれる特定の種類の単純閉路を、少ない計算時間および少ない計算空間により検出する。本実施形態において、経路検出装置10は、有向グラフに含まれる複数の単純閉路の全てうちの、確率的に、エッジ数の多い単純閉路の個数を除き、エッジ数の少ない単純閉路を検出する。
【0062】
なお、第2実施形態に係る経路検出装置10は、第1実施形態と同一のブロック構成を有し、それぞれが略同一の機能を有する。第2実施形態において、第1実施形態と同一または対応する係数、変数、機能ブロックおよびステップについて、同一の記号または符号を付けて適宜説明を省略し、相違点を中心に説明をする。
【0063】
図7は、第2実施形態に係る経路検出装置10の処理の流れを示すフローチャートである。第2実施形態に係る経路検出装置10は、
図7に示す流れで処理を実行する。
【0064】
第2実施形態に係る経路検出装置10の処理は、
図6に示す第1実施形態の処理と比較して、S14に代えてS31となり、S16に代えてS32となり、S19に代えてS33となっている点において異なる。
【0065】
まず、S11において、グラフ取得部24は、有向グラフを取得する。続いて、S12において、強連結成分検出部26は、取得した有向グラフに含まれる1または複数の強連結成分を検出する。
【0066】
続いて、経路検出装置10は、1または複数の強連結成分のそれぞれについて、S31からS20までの処理を実行する(S13とS21との間のループ処理)。
【0067】
S31において、問題生成部28は、対象の強連結成分について、QUBO問題を生成する。第2実施形態において、QUBO問題における目的関数に含まれる複数の決定変数は、対象の強連結成分に含まれる複数のノードに一対一で対応する。
【0068】
続いて、S15において、解取得部30は、対象の強連結成分について、生成されたQUBO問題をQUBOソルバー22に与えて、QUBO問題の求解を要求する。そして、解取得部30は、対象の強連結成分について、生成されたQUBO問題の解を、QUBOソルバー22から取得する。
【0069】
続いて、S32において、部分グラフ生成部32は、対象の強連結成分について、QUBO問題の解に基づき選択される部分グラフを生成する。第2実施形態においては、部分グラフ生成部32は、対象の強連結成分における、QUBO問題の解が1となる決定変数に対応する2以上のノードを含み、解が0となる決定変数に対応するノードを含まない一部分を、部分グラフとして検出する。
【0070】
ここで、第2実施形態において、問題生成部28は、QUBO問題における目的関数として、式(3)に示す関数を生成する。
【数3】
【0071】
Nは、対象の強連結成分に含まれるノードの個数である。iおよびjは、1以上N以下の整数であり、ノードのインデックスを表す。
【0072】
xiは、N個のノードのうちのi番目のノードに対応する決定変数である。xjは、N個のノードのうちのj番目のノードに対応する決定変数である。
【0073】
Qi,jは、QUBO行列に含まれるi番目のノードに対応する決定変数とj番目のノードに対応する決定変数との組に乗算される係数である。
【0074】
第2実施形態において、QUBO行列は、N×Nの正方行列である。第2実施形態において、QUBO行列は、部分グラフに含まれる2以上のノードのそれぞれにおける接続されていないノードの個数が第2設定値となる場合に、目的関数が最小値となるように設定される。
【0075】
第2実施形態において、QUBO行列に含まれる係数であるQ
i,jは、式(4)により表される。
【数4】
【0076】
Qi,jは、i番目のノードに対応する決定変数とj番目のノードに対応する決定変数との組に乗算される係数である。Edgesは、対象の強連結成分に含まれる複数のエッジの集合を表す。(i,j)は、i番目のノードから出てj番目のノードに入るエッジを表す。
【0077】
従って、式(4)により表されるQi,jは、同一のノードの組に対応する係数は、-1となる。異なるノードの組に対応する係数は、エッジにより接続される場合には、0とされ、エッジにより接続されていない場合には、1/(1+β)とされる。βは、正の実数であり、第2設定値に対応する。例えば、βは、初期値がユーザ等により設定される。
【0078】
式(4)に従って算出されたQUBO行列を含む目的関数は、部分グラフに含まれる2以上のノードのそれぞれにおける接続していないノードの個数がβとなるように、N個の決定変数の値が選択された場合に、最小値となる。すなわち、式(4)に従って算出されたQUBO行列を含む目的関数を用いたQUBO問題は、部分グラフに含まれる2以上のノードのそれぞれにおける接続していないノードの個数がβとなる近傍において、大域的最小値を返す。
【0079】
従って、式(4)に従って算出されたQUBO行列を含む目的関数を用いたQUBO問題は、対象の強連結成分のうちの、接続していないノードの個数がβより多いノードを除き、接続していないノードの個数がβ以下のノードを残すような、解を返すことができる。このため、式(4)に従って算出されたQUBO行列を含む目的関数を用いたQUBO問題は、エッジ数の多い単純閉路を除き、エッジ数の少ない単純閉路を残した相互に密に接続された2以上のノードを含む部分グラフを選択する解を返すことができる。
【0080】
なお、QUBO行列は、式(4)に示す行列に限らず他の行列であってもよい。例えば、QUBO行列は、式(4)に示す行列に係数が乗算された行列であってもよい。また、QUBO行列における、エッジにより接続される異なるノードの組に対応する係数は、1/(B+β)であってもよい。なお、Bは、正の整数である。
【0081】
S32に続いて、S17において、繰返制御部36は、部分グラフのエッジ数を検出する。続いて、S18において、繰返制御部36は、対象の強連結成分について、生成した部分グラフに含まれるエッジの個数が予め設定された閾値以下であるか否かを判断する。繰返制御部36は、生成した部分グラフに含まれるエッジの個数が閾値より多い場合(S18のNo)、処理をS33に進める。
【0082】
S33において、繰返制御部36は、QUBO行列の算出に用いるβを所定量減少させる。繰返制御部36は、S33を終えると、処理をS31に戻す。そして、問題生成部28は、S31から処理を繰り返す。
【0083】
部分グラフに含まれるエッジの個数は、ノードにおける接続されていないノードの個数の、部分グラフの全体の合計が多い程、多くなる。このため、部分グラフに含まれるエッジの個数は、βに比例する。従って、繰返制御部36は、βを変更して、QUBO問題の生成および部分グラフの生成を繰り返すことにより、部分グラフに含まれるエッジの個数を目的値に制御することができる。例えば、繰返制御部36は、二分探索により部分グラフに含まれるエッジの個数を目的値に制御することができる。
【0084】
繰返制御部36は、部分グラフに含まれるエッジの個数が閾値以下である場合(S18のYes)、処理をS20に進める。
【0085】
S20において、単純閉路検出部34は、対象の強連結成分のそれぞれについて、部分グラフに含まれる単純閉路を検出する。
【0086】
S21において、経路検出装置10は、1または複数の強連結成分の全てについて、S31からS20までの処理を実行したか否かを判断する。経路検出装置10は、1または複数の強連結成分の全てについては実行が完了していない場合には、未実行の強連結成分について、S31からS20までの処理を実行する。経路検出装置10は、1または複数の強連結成分の全てについて、S31からS20までの処理を完了した場合には、処理をS22に進める。
【0087】
S22において、出力部38は、1または複数の強連結成分の全てについて検出した単純閉路を、出力する。経路検出装置10は、S22を終了すると、本フローを終了する。
【0088】
以上のような第2実施形態に係る経路検出装置10は、有向グラフに含まれる1または複数の強連結成分のそれぞれについて、接続していないノードの個数が多いノードを除き、接続していないノードの個数が少ないノードを除かないように、部分ノードを検出する。これにより、経路検出装置10は、有向グラフから、エッジ数の多い単純閉路を高い確率で除いた部分グラフを検出することができる。
【0089】
そして、経路検出装置10は、このような部分グラフから単純閉路を検出する。従って、経路検出装置10は、有向グラフに含まれるエッジ数の少ない単純閉路を、少ない計算時間および少ない計算空間で検出することができる。
【0090】
(ハードウェア構成)
図8は、経路検出装置10のハードウェアブロック図である。経路検出装置10は、一例として、
図8に示すような一般のコンピュータ(情報処理装置)と同様のハードウェア構成により実現される。経路検出装置10は、
図8に示すような1つのコンピュータまたはサーバにより実現されてもよいし、協働して動作する複数のコンピュータまたはサーバにより実現されてもよい。また、経路検出装置10は、一部に専用のハードウェア回路を備える構成であってもよい。
【0091】
経路検出装置10は、メモリ204と、1または複数のハードウェアプロセッサ206と、記憶装置208と、操作装置210と、表示装置212と、通信装置214とを備える。各部は、バスにより接続される。
【0092】
メモリ204は、例えば、ROM222と、RAM224とを含む。ROM222は、経路検出装置10の制御に用いられるプログラムおよび各種設定情報等を書き換え不可能に記憶する。RAM224は、SDRAM(Synchronous Dynamic Random Access Memory)等の揮発性の記憶媒体である。RAM224は、1または複数のハードウェアプロセッサ206の作業領域として機能する。
【0093】
1または複数のハードウェアプロセッサ206は、メモリ204(ROM222およびRAM224)にバスを介して接続される。1または複数のハードウェアプロセッサ206のそれぞれは、例えば、CPU(Central Processing Unit)であってもよいし、演算用のハードウェア回路であってもよい。
【0094】
1または複数のハードウェアプロセッサ206は、RAM224の所定領域を作業領域としてROM222または記憶装置208に予め記憶された各種プログラムとの協働により各種処理を実行し、経路検出装置10を構成する各部の動作を統括的に制御する。また、1または複数のハードウェアプロセッサ206は、ROM222または記憶装置208に予め記憶されたプログラムとの協働により、操作装置210、表示装置212および通信装置214等を制御する。
【0095】
記憶装置208は、フラッシュメモリ等の半導体による記憶媒体、磁気的または光学的に記録可能な記憶媒体等の書き換え可能な記録装置である。記憶装置208は、経路検出装置10の制御に用いられるプログラムおよび各種設定情報等を記憶する。
【0096】
操作装置210は、マウスおよびキーボード等の入力デバイスである。操作装置210は、ユーザから操作入力された情報を受け付け、受け付けた情報を1または複数のハードウェアプロセッサ206に出力する。
【0097】
表示装置212は、情報をユーザに表示する。表示装置212は、1または複数のハードウェアプロセッサ206から情報等を受け取り、受け取った情報を表示する。なお、通信装置214または記憶装置208等に情報を出力する場合、経路検出装置10は、表示装置212を備えなくてもよい。通信装置214は、外部の機器と通信して、ネットワーク等を介して情報を送受信する。
【0098】
本実施形態の経路検出装置10で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD-ROM、フレキシブルディスク(FD)、CD-R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【0099】
また、本実施形態の経路検出装置10で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態の経路検出装置10で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、本実施形態の経路検出装置10で実行されるプログラムを、ROM等に予め組み込んで提供するように構成してもよい。
【0100】
情報処理装置を経路検出装置10として機能させるためのプログラムは、例えば、グラフ取得モジュール、強連結成分検出モジュール、問題生成モジュール、解取得モジュール、部分グラフ生成モジュール、単純閉路検出モジュール、繰返制御モジュール、および、出力モジュールを含むモジュール構成となっている。さらに、プログラムは、QUBOソルバーモジュールを含んでもよい。このプログラムは、1または複数のハードウェアプロセッサ206により実行されることにより各モジュールがメモリ204のRAM224にロードされ、1または複数のハードウェアプロセッサ206を、グラフ取得部24、強連結成分検出部26、問題生成部28、解取得部30、部分グラフ生成部32、単純閉路検出部34、繰返制御部36および出力部38として機能させる。さらに、このプログラムは、1または複数のハードウェアプロセッサ206を、QUBOソルバー22として機能させてもよい。なお、これらの構成は、一部または全部がハードウェアにより構成されていてもよい。
【0101】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0102】
10 経路検出装置
22 QUBOソルバー
24 グラフ取得部
26 強連結成分検出部
28 問題生成部
30 解取得部
32 部分グラフ生成部
34 単純閉路検出部
36 繰返制御部
38 出力部