(57)【要約】【課題】構造が変化する有向グラフの各点の特徴値を、分散計算環境下で、隣接行列Ｇに重み行列Ｃを再帰的に作用させて求める際、各コンピュータ間の通信量を低減し、高速に処理するグラフデータ演算方法を提供する。【解決手段】複数のバーテックスの各々に付与される特徴値を、バーテックス間を結ぶエッジの向きとエッジに付与される重みに関する情報を含む重み行列を用いて計算するグラフデータ演算方法が開示される。重み行列は、第１のエッジの終点のバーテックスである宛先バーテックスと第１のエッジに付与されている重みと第１のエッジの始点付与された特徴値に関する第１の情報と、第２のエッジの始点である参照元バーテックスと第２のエッジに付与されている重みと参照元バーテックス付与された特徴値に関する第２の情報に分解され、バーテックスの数の変化に伴い、第１の情報および第２の情報を更新することを特徴とする。【選択図】図８
2015215826.tif 000002
【特許請求の範囲】
【請求項１】
複数のバーテックスの各々に付与される特徴値を要素とするベクトルである特徴値ベクトルを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列を用いて、少なくとも第１の計算機ノードおよび第２の計算機ノードを含む複数の計算機ノードによって計算するグラフデータ演算方法であって、
前記重み行列を、前記複数のバーテックスの一つである第１のバーテックスから出ている第１のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のバーテックス付与された前記特徴値に関する第１の情報と、前記複数のバーテックスの一つである第２のバーテックスに入ってくる第２のエッジの始点のバーテックスである参照元バーテックスと前記第２のエッジに付与されている重みと前記参照元バーテックス付与された前記特徴値に関する第２の情報に分解することと、
前記複数のバーテックスの個数が変化したとき、前記第１の情報および前記第２の情報を更新し、更新された第１の情報および更新された第２の情報を得ることと、
前記第１の計算機ノードが、第１のバーテックスに付与された前記特徴値を更新するために、前記更新された第２の情報を参照して演算を行い、更新された第１のバーテックスに付与された特徴値を求めることと、
前記更新された第１の情報に前記第２の計算機ノードが担当する第２のバーテックスが含まれている場合、前記第１の計算機ノードが、前記更新された第１のバーテックスに付与された前記特徴値を前記第２の計算機ノードに送ること、
を含むグラフデータ演算方法。
【請求項２】
前記重み行列を分解することは、第１の計算機ノードにおいて、前記第１の計算機ノードが担当するバーテックスを始点とする第３のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第３の情報と、前記第１の計算機ノードが担当するバーテックスに入ってくる第４のエッジの始点である前記複数のバーテックスの一つである参照元バーテックスと前記第２のエッジに付与されている重みと前記第２のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第４の情報に分解する、請求項１に記載のグラフデータ演算方法。
【請求項３】
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスと前記複数の計算機ノードの対応を示す表を参照して特定すること、
を含む請求項１または２に記載のグラフデータ演算方法。
【請求項４】
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスの識別子と前記複数の計算機ノードの対応を示す表を参照して特定すること、
を含む請求項１または２に記載のグラフデータ演算方法。
【請求項５】
複数のバーテックスの各々に付与される特徴値を要素とするベクトルである特徴値ベクトルを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列を用いて、少なくとも第１の計算機ノードおよび第２の計算機ノードを含む複数の計算機ノードによって計算するグラフデータ演算システムであって、
前記複数のバーテックスの個数が変化したとき、前記重み行列から得られる、前記複数のバーテックスの一つである第１のバーテックスから出ている第１のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のバーテックス付与された前記特徴値に関する第１の情報と、前記複数のバーテックスの一つである第２のバーテックスに入ってくる第２のエッジの始点のバーテックスである参照元バーテックスと前記第２のエッジに付与されている重みと前記参照元バーテックス付与された前記特徴値に関する第２の情報を更新し、更新された第１の情報および更新された第２の情報を得るグラフ構造変化通知機構と、
前記グラフ構造変化通知機構が得た前記更新された第１の情報および前記更新された第２の情報を用いて、前記第１の計算機ノードが、第１のバーテックスに付与された前記特徴値を更新するために、前記更新された第２の情報を参照して演算を行い、更新された第１のバーテックスに付与された特徴値を求める演算機構と、
前記更新された第１の情報に前記第２の計算機ノードが担当する第２のバーテックスが含まれている場合、前記第１の計算機ノードが、前記更新された第１のバーテックスに付与された前記特徴値を前記第２の計算機ノードに送る伝播機構、
を含むグラフデータ演算システム。
【請求項６】
複数のバーテックスの各々に付与される特徴値を要素とするベクトルである特徴値ベクトルを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列を用いて、少なくとも第１の計算機ノードおよび第２の計算機ノードを含む複数の計算機ノードによって計算するグラフデータ演算プログラムであって、
前記重み行列を、前記複数のバーテックスの一つである第１のバーテックスから出ている第１のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のバーテックス付与された前記特徴値に関する第１の情報と、前記複数のバーテックスの一つである第２のバーテックスに入ってくる第２のエッジの始点のバーテックスである参照元バーテックスと前記第２のエッジに付与されている重みと前記参照元バーテックス付与された前記特徴値に関する第２の情報に分解させ、
前記複数のバーテックスの個数が変化したとき、前記第１の情報および前記第２の情報を更新し、更新された第１の情報および更新された第２の情報を得させと、
前記第１の計算機ノードが、第１のバーテックスに付与された前記特徴値を更新するために、前記更新された第２の情報を参照して演算を行い、更新された第１のバーテックスに付与された特徴値を求めさせと、
前記更新された第１の情報に前記第２の計算機ノードが担当する第２のバーテックスが含まれている場合、前記第１の計算機ノードが、前記更新された第１のバーテックスに付与された前記特徴値を前記第２の計算機ノードに送らせること、
処理をコンピュータに実行させることを特徴とするグラフデータ演算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフデータ演算方法、グラフデータ演算システムおよびグラフデータ演算プログラムに関するものである。
【背景技術】
【０００２】
有向グラフで表されるデータ構造において、各バーテックスにおける特徴値の計算を分散コンピューティング環境で行なうシステムが知られている。そのようなシステムとして、例えば、ＷＥＢページのリンク関係を有向辺で表し、各ページのランク付けの値を各点の特徴値として表した有向グラフにおいて、各ページのランク付けの値を分散コンピューティング環境で求めるものが知られている（たとえば、特許文献１、２）。
【０００３】
たとえば、Ｎ点からなるグラフの構造は、各バーテックスに付与された値を要素とするＮ×Ｎ行列の隣接行列Ｇで表すことができる。各バーテックスには特徴値が付与されている。特徴値は、隣接するバーテックスとの間を結ぶエッジに付与された特徴値や隣接点に付与された特徴値と関連する。各エッジは重みを持っており、これらを各バーテックスの特徴値を計算するための行列Ｃ（以下、重み行列と呼ぶことがある）として表す。たとえば、バーテックスＡとバーテックスＢを結ぶエッジには向きが付いていても良い。このようなエッジを有向辺と呼ぶことがある。有向辺では、たとえば、バーテックスＡからバーテックスＢに向かうときの重みと、バーテックスＢからバーテックスＡに向かうときの重みが異なり得る。
【０００４】
各バーテックスの特徴値の算出法としてべき乗法が用いられることがある。これは、初期値となるベクトルＶ０に対して重み行列Ｃを作用させてベクトルＶ１を求め、さらにベクトルＶ１に対して行列Ｃを作用させてＶ２を求める形で計算を行ない、ベクトルＶｎとベクトルＶｎ−１とがほぼ同じ値となるまで再帰的に重み行列Ｃを作用させる。このように、各バーテックスの特徴値は、重み行列Ｃを用いて求めることができる（たとえば、非特許文献１）。
【０００５】
このような計算を複数のコンピュータを用いる分散計算機環境で算出することが行われている。たとえば、随時構造が変化する可能性がある有向辺と点からなる有向グラフ構造に対して各バーテックスの特徴値をＨａｄｏｏｐ等の分散計算機環境で算出する処理を取り扱うことが行われている（たとえば、特許文献３、４）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平７−２９５９４４号公報
【特許文献２】特開平９−８１５３２号公報
【特許文献３】特開２００７−３１６９５６号公報
【特許文献４】特表２００９−５３７９０８号公報
【非特許文献】
【０００７】
【非特許文献１】Ｕ．Ｋａｎｇ、Ｈ．Ｔｏｎｇ、Ｊ．Ｓｕｎ、Ｃ−Ｙ．Ｌｉｎ、Ｃ．Ｆａｌｏｕｔｓｏｓ“ＧＢＡＳＥ：Ａ  Ｓｃａｌａｂｌｅ  Ｇｅｎｅｒａｌ  Ｇｒａｐｈ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ”、Ｋｎｏｗｌｅｄｇｅ  Ｄｉｓｃｏｖｅｒｙ  ａｎｄ  Ｄａｔａ  Ｍｉｎｉｎｇ  ＫＤＤ−２０１１、ｐｐ．１０９１−１０９９  （２０１１）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
構造が変化する有向グラフの各バーテックスの特徴値を、分散計算環境下で、隣接行列Ｇに重み行列Ｃを再帰的に作用させて求める際、ベクトルＶｎを求めるために用いるベクトルＶｎ−１のデータとして、対応する列の全ての値が必要である。つまり、各コンピュータの処理対象としてベクトルＶの特定の行を当てはめるだけでは処理ができない。したがって、各コンピュータは計算後の値を他のコンピュータに知らせる必要がある。このため、分散計算機環境での各コンピュータ間の通信量が膨大となってしまい、計算が高速に実行できないという問題がある。
【０００９】
よって、一つの側面として、本発明は、構造が変化する有向グラフの各点の特徴値を、分散計算環境下で、隣接行列Ｇに重み行列Ｃを再帰的に作用させて求める際、各コンピュータ間の通信量を低減するグラフデータ演算方法、システムおよびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
複数のバーテックスの各々に付与される特徴値を要素とするベクトルである特徴値ベクトルを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列を用いて、少なくとも第１の計算機ノードおよび第２の計算機ノードを含む複数の計算機ノードによって計算するグラフデータ演算方法が提示される。前記重み行列を、前記複数のバーテックスの一つである第１のバーテックスから出ている第１のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のバーテックスに付与された前記特徴値とに関する第１の情報と、前記複数のバーテックスの一つである第２のバーテックスに入ってくる第２のエッジの始点のバーテックスである参照元バーテックスと前記第２のエッジに付与されている重みと前記参照元バーテックスに付与された前記特徴値とに関する第２の情報に分解することと、前記複数のバーテックスの個数が変化したとき、前記第１の情報および前記第２の情報を更新し、更新された第１の情報および更新された第２の情報を得ることと、前記第１の計算機ノードが、第１のバーテックスに付与された前記特徴値を更新するために、前記更新された第２の情報を参照して演算を行い、更新された第１のバーテックスに付与された特徴値を求めることと、前記更新された第１の情報に前記第２の計算機ノードが担当する第２のバーテックスが含まれている場合、前記第１の計算機ノードが、前記更新された第１のバーテックスに付与された前記特徴値を前記第２の計算機ノードに送ること、を含むことを特徴とする。
【発明の効果】
【００１１】
構造が変化する有向グラフの各点の特徴値を、分散計算環境下で、隣接行列Ｇに重み行列Ｃを再帰的に作用させて求める際、各コンピュータ間の通信量を低減することができる。
【図面の簡単な説明】
【００１２】
【図１】有向グラフの例を示す図である。
【図２Ａ】各バーテックスに特徴値（Ｐ）と各エッジに辺重み（ｒ）が付与された有向グラフの例を示す図である。
【図２Ｂ】図２Ａに示された有向グラフの各エッジに付与された辺重みの例を示す図である。
【図２Ｃ】図２Ａに示された有向グラフの各バーテックスに付与された特徴値の例を示す図である。
【図３Ａ】有向グラフの構造の変化の例を示す図である。
【図３Ｂ】有向グラフの構造の変化の別の例を示す図である。
【図３Ｃ】有向グラフの構造の変化のさらに別の例を示す図である。
【図３Ｄ】有向グラフの構造の変化のさらに別の例を示す図である。
【図４】実施形態のグラフデータ演算システムの構成の例を示す図である。
【図５Ａ】実施形態のグラフデータ演算システムの構成の例を示す図である。
【図５Ｂ】実施形態のグラフデータ演算システムの構成の例を示す図である。
【図５Ｃ】実施形態のグラフデータ演算システムの構成の例を示す図である。
【図５Ｄ】実施形態のグラフデータ演算システムの変換配備機構を説明するための図である。
【図６】エッジが増えるような有向グラフの構造の変化の例を示す図である。
【図７】エッジが増える前の有向グラフの構造の例を示す図である。
【図８】実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【図９】実施形態のグラフデータ演算システムの各計算機ノードにおいて、エッジが増えるときのエッジ重みの計算式の例を示す図である。
【図１０】実施形態のグラフデータ演算システムの各計算機ノードにおいて、エッジが減るときのエッジ重みの計算式の例を示す図である。
【図１１】実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【図１２】実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【図１３】実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【図１４】実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【図１５】実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【図１６】実施形態のグラフデータ演算システムの各計算機ノードの構成の例を示す図である。
【図１７】実施形態のグラフデータ演算方法の処理の流れの例を示す図である。
【図１８】変換配備処理の流れの例を示す図である。
【図１９】ノードの特定処理の流れの例を示す図である。
【図２０】ノードの特定処理の流れの別の例を示す図である。
【図２１】パラメタ計算処理の流れの例を示す図である。
【図２２】ノード処理の流れの例を示す図である。
【図２３】計算処理の流れの例を示す図である。
【図２４】伝播処理の流れの例を示す図である。
【図２５】パラメタ伝播処理の流れの例を示す図である。
【図２６】タプル（ｓ，（ｅ，ｒ’））による更新処理の流れの例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、実施形態について説明する。以下で説明する実施形態は、構造が変化するような有向グラフの各点の特徴値を分散計算機環境で算出する処理を取り扱うグラフデータ演算方法、システムおよびプログラムに関する。特に分散計算機環境での計算機間通信量を低く抑えながら高速に実行するグラフデータ演算方法、システムおよびプログラムに関する。
【００１４】
まず、本明細書中で用いる用語の定義について簡単に説明する。
＜定義＞
図１は、有向グラフの例を示す図である。
【００１５】
有向グラフＧは、図１では数字を丸で囲まれているバーテックス（単に点とも呼ぶ）と、バーテックス間を結ぶ向き付きのエッジ（単に辺とも呼ぶ）を含んでいる。バーテックスに記載された数字は、バーテックスを指定する識別子（ＩＤ）であり得る。例えば、識別子“ｉ”（ｉは正整数とする）を有するバーテックスを単に、バーテックスｉと呼ぶことがある。
【００１６】
図１に示されている有向グラフＧは、３つのバーテックス１、２、３と３つのエッジａ、ｂ、ｃを含んでいる。図１に示されている有向グラフＧに含まれるバーテックスの集合をＶ＝｛１，２，３｝と表すことがある。また、図１に示されている有向グラフＧに含まれるエッジの集合をＥ＝｛ａ，ｂ，ｃ｝と表すことがある。バーテックスｉからバーテックスｊに向かうエッジｘをｘ＝ａｊｉ＝ｉ→ｊと表すことがある。図１に示されている有向グラフＧのエッジの集合Ｅは、Ｅ＝｛ａ，ｂ，ｃ｝＝｛１→２，１→３，３→１｝と表される。
【００１７】
一般にＮ個のバーテックスとＭ個のエッジを含むグラフ構造は、隣接行列Ｐと接続行列Ｑを用いて表すことができる。
【００１８】
一般にＮ個のバーテックスとＭ個のエッジを含むグラフ構造の隣接行列Ｐは、Ｎ×Ｎ行列である。隣接行列Ｐは、
【数１】
2015215826.tif 000003
として、バーテックスｉからバーテックスｊにエッジが存在するならばａj i＝１、そうでなければａj i＝０である行列として定義する。
【００１９】
図１に示されているグラフＧの隣接行列Ｐは、
【数２】
2015215826.tif 000004
となる。
【００２０】
一般にＮ個のバーテックスとＭ個のエッジを含むグラフ構造の接続行列Ｑは、Ｎ×Ｍ行列である。接続行列Ｑは、
【数３】
2015215826.tif 000005
として、エッジｘがバーテックスｉから出るときｋｉｘ＝１、エッジｘがバーテックスｉへ入るときｋｉｘ＝−１である行列として定義する。エッジｘがバーテックスｉから出るとき、バーテックスｉを出力点と呼ぶ。「出力点」は「始点」または「参照元」と呼ばれることもある。エッジｘがバーテックスｉへ入るとき、バーテックスｉを入力点と呼ぶ。「入力点」は、「終点」や「宛先」と呼ばれることもある。
【００２１】
図１に示されているグラフＧの接続行列Ｑは、
【数４】
2015215826.tif 000006
となる。
【００２２】
図２Ａは、各バーテックスに特徴値（Ｐ）と各エッジに辺重み（ｒ）が付与された有向グラフの例を示す図、図２Ｂは、図２Ａに示された有向グラフの各エッジに付与された辺重みの例を示す図、そして、図２Ｃは、図２Ａに示された有向グラフの各バーテックスに付与された特徴値の例を示す図である。
【００２３】
各バーテックスに付与される特徴値は、一般に隣接するバーテックスとの間を結ぶエッジに付与された特徴値や、隣接するバーテックスと特徴値と所定の関係を有することがある。この関係は、Ｎ個のバーテックスを含むグラフの場合、Ｎ×Ｎ行列で表される。
【００２４】
図２Ａに示されている例では、たとえば、図２Ｂに示されているようにバーテックス１に付与される特徴値は０．１４であり、これを“Ｐ［１］＝０．１４”と表す。同様に、バーテックス２、３についても、Ｐ［２］＝０．１１、Ｐ［３］＝０．１１である。
【００２５】
また、図２Ａに示されている例では、たとえば、図２Ｃに示されているようにエッジａ＝１→２に付与される辺重みは１／２であり、これを“ｒ（ａ）＝ａ２１＝１／２”と表す。同様に、エッジｂ、ｃについても、ｒ（ｂ）＝ａ３１＝１／２、ｒ（ｃ）＝ａ１３＝１である。
【００２６】
図２Ａ〜２Ｃに示されている例では、バーテックスはウェブページを表し、特徴値はそのウェブページのページランク（登録商標）であり得る。ページランクは、そのウェブページの重要度を示す指数である。ページランクは、「多くの良質なページからリンクされているページは、やはり良質なページである」 という再帰的な関係に基づいている。勿論、特徴値はページランクに限定されず、実施形態は、有向グラフ表示が有効なあらゆる例に適用可能である。
【００２７】
図２Ａ〜２Ｃに示されているグラフを用いて特徴値の算出に用いる関係式について説明する。
【００２８】
各バーテックスｖ∈Ｖに対して、バーテックスｖを出力点とするエッジｅ１、ｅ２、…、があったとして、それぞれのエッジの入力点をｗ１、ｗ２、…、とする。このとき、バーテックスｖの特徴値Ｐ（ｖ）は、
【数５】
2015215826.tif 000007
として求められ得る。上式で、｜Ｖ｜はバーテックスの総数、ｄは定数で、たとえば、ｄ＝０．８５である。
【００２９】
また、Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］をまとめてベクトルＰで表すこととする。さらに、接続行列Ｑの各要素に、辺重みを掛け合わせて定義される重み行列Ｃを導入する。例えば、図２Ａ〜２Ｃに示されている例では、重み行列Ｃを、
【数６】
2015215826.tif 000008
とする。すると、ベクトルＰは、
【数７】
2015215826.tif 000009
と書くことができる。ここで、ｂは要素が定数であるベクトル、ｄは定数のスカラーである。図２Ａ〜２Ｃに示されている例では、定数ベクトルｂは、
【数８】
2015215826.tif 000010
と書くことが出来る。
【００３０】
特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）を算出する方法の一つとして、冪乗法が知られている。
【００３１】
以下では、冪乗法を用いて特徴値を算出する例を示すが、算出方法は冪乗法に限定されない。分散環境下で特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）が計算できる方法であれば、任意の方法を用いることが出来る。
【００３２】
冪乗法では、まず、特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）の初期値を設定する。たとえば、図２Ａ〜２Ｃに示されている例では、
【数９】
2015215826.tif 000011
と設定しても良い。
【００３３】
冪乗法では、まず、第１ステップで、
【数１０】
2015215826.tif 000012
を計算する。同様にＰ２、Ｐ３、…と計算し、第ｍステップでは、
【数１１】
2015215826.tif 000013
によってＰｍを求める。そして、上記の処理を、ベクトルＰｍ−１とベクトルＰｍの差が所定の条件を満たすほどに小さくなるまで繰り返す。ベクトルＰｍ−１とベクトルＰｍの差としては、要素ごとに比べたとき、差が最も大きいものをベクトルＰｍ−１とベクトルＰｍの差としても良いし、ベクトルＰｍ−１とベクトルＰｍの各要素の差の２乗の和をベクトルＰｍ−１とベクトルＰｍの差としても良い。
【００３４】
たとえば、重み行列Ｃが
【数１２】
2015215826.tif 000014
であり、ｂｔ＝（０．０５，０．０５，０．０５）（ｔは転置を表す）、ｄ＝０．８５として、初期値Ｐ０が、
【数１３】
2015215826.tif 000015
の場合、Ｐｔ１＝（０．０５，０．４８，０．４８）、Ｐｔ２＝（０．４５，０．０７，０．０７）であり、Ｐｔ１７＝（０．１４，０．１１，０．１１）、Ｐｔ１８＝（０．１４，０．１１，０．１１）となり収束したとみなされる。
【００３５】
上記のように、演算を多数回行なって特徴値を算出する処理を複数個の計算機（計算ノード）で行うことを考える。たとえば、Ｎ個のバーテックスの特徴値を表すＮ要素のベクトルがｍ個に分割され、ｍ個の計算機で実行されるような場合が考えられる。
【００３６】
以下「バーテックス」はグラフの節点を表し，「ノード」は計算機を表すものとする。また、ノードを計算機ノードと呼ぶことがある。
【００３７】
分割した特徴値ベクトルの各部分を各計算機ノードで実行し、結果を他のノードに転送する方法では、次のような処理を行う。
【００３８】
以下では、Ｘ［ｉ；ｊ］を、行列Ｘの第ｉ行目から第ｊ行目までを表すこととする。Ｘがベクトルの場合、Ｘ［ｉ；ｊ］は、第ｉ要素から第ｊ要素を表す。
【００３９】
たとえば、まず、計算機ノード１では、
【数１４】
2015215826.tif 000016
を計算する。そして、得られたＰ１［１；１］を他の計算機ノードに送る。
【００４０】
同時に、計算機ノード２では、
【数１５】
2015215826.tif 000017
を計算する。そして、得られたＰ１［２；３］を他の計算機ノードに送る。
【００４１】
このように、有向グラフで表されるデータ構造において、各バーテックスにおける特徴値の計算を分散コンピューティング環境で行なう場合、密に結合するバーテックス同士を同一の計算機ノードに担当させ、計算機ノード間の転送を減らすなどの工夫がされ得る。
【００４２】
しかしながら、上記のようなアルゴリズムでは、構造が変化する有向グラフで表されるデータ構造において、各バーテックスにおける特徴値の計算を分散コンピューティング環境で行なうとき、構造が変化するたび、および計算のたびに計算結果を他の全ての計算機ノードに転送する。これは、各計算機ノードが、自身が担当するバーテックスがとのバーテックスと隣接しているかに関して、不完全な情報しか持たないためである。
【００４３】
また、密に結合する部分グラフを探す計算はＮＰ困難問題として知られており、計算コストが高い。
【００４４】
＜グラフデータ演算システム＞
以下で説明するグラフデータ演算システムでは、構造が変化するような有向グラフの各点の特徴値を、分散計算環境下で、隣接行列Ｇに重み行列Ｃを再帰的に作用させて求める際、重み行列Ｃに相当する情報を、接続行列Ｑに相当する情報に変換し、エッジに付与される重みを付加したデータ構造を用い、接続行列Ｑの形式のデータに対する演算アルゴリズムを用いて、各計算機ノードに送るデータを必要最低限に抑えることができる。
【００４５】
このような構成を採用することによって、各計算機ノード（以下、単にノードと呼ぶこともある）には、計算に値が必要となる値のみを伝播することができる。このため、システム全体で必要とするメモリ量は従来の方法と同程度に抑えたまま、必要最低限の計算機ノード間通信のみを行う演算を実現できる。後述の、変換配備機構により、グラフ構造の密結合部分を探すことなく通信量削減可能なデータ分散配置を行うことができ、時間コストを削減することができる。またその際、変換配備機構により一般的でよく知られた行列形式の算出方法表記をそのまま流用して演算を行えるため、従来法と同じ作業量で準備して演算を行うことができるといった効果を得ることができる。
【００４６】
本実施形態では、特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）の計算に上述の冪乗法を用いるが、特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）を計算する別の方法を用いても、計算機ノード間通信を最小限にすることができる。
【００４７】
図３Ａは有向グラフの構造の変化の例を示す図である。
図３Ａに示されている例では、図１に示されている有向グラフに新たにバーテックス４が加わり、バーテックス１からバーテックス４に向かうエッジａ４１が追加されている。
【００４８】
図３Ｂは有向グラフの構造の変化の別の例を示す図である。
図３Ｂに示されている例では、図１に示されている有向グラフから、バーテックス３からバーテックス１に向かうエッジａ３１が減っている。
【００４９】
図３Ｃは有向グラフの構造の変化のさらに別の例を示す図である。
図３Ｃに示されている例では、図１に示されている有向グラフから、バーテックス３が減り、さらに、バーテックス３が減るに伴い、バーテックス１からバーテックス３に向かうエッジａ３１と、バーテックス３からバーテックス１に向かうエッジａ１３も減っている。
【００５０】
図３Ｄは、有向グラフの構造の変化のさらに別の例を示す図である。
図３Ｄに示されている例では、図１に示されている有向グラフに、バーテックス４が加わっている。しかし、図３Ｄに示されている例では、既存のバーテックス１、２、３からバーテックス４に向かうエッジは加わっていないし、バーテックス４を始点とし、既存のバーテックス１、２、３のいずれかに向かうエッジも加わっていない。
【００５１】
図４は、実施形態のグラフデータ演算システム１０の概略を示す図である。
グラフデータ演算システム１０は、変換配備機構１００、計算機ノード（演算用ノード）３００、３５０、３６０を含んでいる。
【００５２】
また、計算機ノード（演算用ノード）３００は、演算機構３０２、宛先パラメタ集合データベース（ＤＢ）３０４、参照元パラメタ集合ＤＢ３０６、固定値パラメタＤＢ３０８、他バーテックス演算前情報ＤＢ３１０、自バーテックス演算前情報ＤＢ３１２、自バーテックス演算後情報ＤＢ３１４、受信機構３１６、伝播機構３１８、パラメタ計算機構１３０２、パラメタ一時蓄積機構１３１４、パラメタ受信機構１３１６、パラメタ伝播機構１３１８を含んでいる。計算機ノード（演算用ノード）３５０、３６０も、計算機ノード（演算用ノード）３００と同一または類似の構成であり得る。
【００５３】
変換配備機構１００は、計算機ノード（演算用ノード）３００、３５０、３６０とは異なる計算機であり得る。
【００５４】
変換配備機構１００には、算出方法を表すデータ１０２が入力される。算出方法を表すデータ１０２には、重み行列Ｃ、バーテックスの総数｜Ｖ｜、定数ｄが含まれる。
【００５５】
計算機ノード（演算用ノード）３００、３５０、３６０には、パラメタ計算アルゴリズム１０４が入力される。パラメタ計算アルゴリズムの例は、図９、１０に示されているような更新式を含む。すなわち、パラメタ計算アルゴリズムは、図３Ａ〜３Ｄに示されているような有向グラフの構造変化があった場合の、エッジ重みの更新の方法を規定するものであり、図９、１０に示されているものに限定されない。
【００５６】
また、計算機ノード（演算用ノード）３００、３５０、３６０には、グラフ構造変化通知機構１０６が接続されている。グラフ構造変化通知機構１０６は、有向グラフの構造変化の有無を検知し、計算機ノード（演算用ノード）３００、３５０、３６０に通知する。
【００５７】
図７、８を参照して、実施形態のグラフデータ演算システム１０の変換配備機構１００について説明する。
【００５８】
図７は、エッジが増える前の有向グラフの構造の例を示す図、図８は、実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【００５９】
今、図７に示されているような有向グラフ構造を考える。すなわち、バーテックス１、２、３が存在する。各バーテックスｉ（ｉ＝１、２、３）には、特徴値Ｐ［ｉ］が付与されている。さらに、バーテックス１からバーテックス２に向かうエッジａ２１、バーテックス１からバーテックス３に向かうエッジａ３１、バーテックス３からバーテックス１に向かうエッジａ１３が存在する。各エッジには、エッジ重みが付与されているが、たとえば、エッジａｉｊに付与されたエッジ重みをａｉｊで表すことがある。
【００６０】
グラフデータ演算システム１０の変換配備機構１００は、入力された算出方法を表すデータ１０２に含まれる重み行列Ｃから宛先とパラメタの対の集合である宛先集合パラメタ集合２０２と参照元とパラメタの対の集合である参照元パラメタ集合２０４を出力する。宛先パラメタ集合２０２と参照元パラメタ集合２０４は、各計算機ノードに対して定義され、各計算機ノードが必要とする最小限のデータである。
【００６１】
たとえば、重み行列Ｃが、
【数１６】
2015215826.tif 000018
で表される図１、２に示されている有向グラフでは、バーテックス１からはバーテックス２、３に向かうエッジが存在し、バーテックス３からはバーテックス１に向かうエッジが存在する。バーテックス２が出力点となるエッジは存在しない。
【００６２】
この場合、図７に示されているように、宛先とパラメタの対の集合である宛先パラメタ集合２０２は、次のような要素を含む：バーテックス１を出力点とする集合Ｌｄｓｔ（１）＝｛（２，（ａ２１，Ｐ［２］））、（３，（ａ３１，Ｐ［３］））｝、バーテックス２を出力点とする集合はＬｄｓｔ（２）＝｛  ｝、すなわち空集合である。バーテックス３を出力点とする集合Ｌｄｓｔ（３）＝｛（１，（ａ１３，Ｐ［１］））｝。すなわち、宛先パラメタ集合２０２は、Ｌｄｓｔ（ｉ）＝｛（バーテックスｉを始点とするエッジの終点のバーテックスｊ，（バーテックスｉから終点のバーテックスｊに向かうエッジのエッジ重み，終点ｊに付与された特徴値））｝である。バーテックスｉから終点のバーテックスｊに向かうエッジのエッジ重み、および／または終点ｊに付与された特徴値をパラメタと呼ぶことがある。
【００６３】
ここでバーテックス１は計算機ノード１が計算を担当し、バーテックス２は計算機ノード２が計算を担当し、バーテックス３は計算機ノード３が計算を担当するものとする。バーテックスｉ（ｉ＝１、２、３）に付与される特徴値をＰ［ｉ］とする。図８に示されている段階では、Ｐ［１］＝１、Ｐ［２］＝Ｐ［３］＝０であるとする。
【００６４】
また、バーテックス１に入ってくるエッジは、図７に示されているようにバーテックス３からのものが存在する。そのエッジに付与される重みはｒ（ｃ）＝ａ１３＝１である。このように、図８に示されているように、参照元パラメタ集合２０４は、バーテックス１を入力点とする参照元とパラメタ（エッジに付与される重みと参照元バーテックスの特徴値Ｐ［３］）の集合Ｌｓｒｃ（１）＝｛（３，（ａ１３，Ｐ［３］））｝＝｛（３，（１，０））｝、バーテックス２を入力点とする参照元とパラメタ（エッジに付与される重み）の集合Ｌｓｒｃ（２）＝｛（１，（ａ２１，Ｐ［１］））｝＝｛（１，（１／２，１））｝、バーテックス３を入力点とする参照元とパラメタ（エッジに付与される重み）の集合Ｌｓｒｃ（３）＝｛（１，（ａ３１，Ｐ［１］））｝＝｛（１，（１／２，１）｝から構成される。
【００６５】
すなわち、参照元パラメタ集合２０４は、Ｌｓｒｃ（ｉ）＝｛（バーテックスｉを終点とするエッジの始点のバーテックスｊ，（バーテックスｊを始点としバーテックスｉを終点とするエッジに付与される重み，始点のバーテックスｊに付与された特徴値Ｐ［ｊ］））｝である。バーテックスｉを終点とするエッジに付与される重み、および／または始点のバーテックスｊの特徴値Ｐ［ｊ］をパラメタと呼ぶことがある。
【００６６】
また、グラフデータ演算システム１０の変換配備機構１００は、たとえば、エッジに付与されたエッジ重みの更新も行う。
【００６７】
パラメタ計算機構１３０２は、参照元パラメタ集合ＤＢ３０６に含まれる情報を参照して、グラフのトポロジーが変化したときに、新パラメタ１３１５を計算する。
【００６８】
図９は、実施形態のグラフデータ演算システムの各計算機ノードにおいて、バーテックスｓからバーテックスｄに向かうエッジが増えるときのエッジ重みの計算式の例を示す図である。ここで、「ｏｕｔｇｏｉｎｇＥｄｇｅＣｏｕｎｔ（ｊ）」は、バーテックスｊから出るエッジの数である。「ｔ（ｊ）」は、バーテックスｊから出るエッジそれぞれに付与される重みの値の算術和である。
【００６９】
図１０は、実施形態のグラフデータ演算システムの各計算機ノードにおいて、バーテックスｓからバーテックスｄに向かうエッジが減るときのエッジ重みの計算式の例を示す図である。
【００７０】
グラフデータ演算システム１０の変換配備機構１００は、有向グラフの構造変化が、たとえば図３Ａに示されているようにエッジの増加を伴うものなのか、たとえば図３Ｂに示されているようにエッジの減少を伴うものなのかによって、図９または図１０の計算式を用いて、エッジ重み（パラメタ）を更新する。
【００７１】
図３Ｃに示されているようにバーテックスが減る場合、バーテックスの減少は、そのバーテックスを入力点または出力点とする、一般に複数本のエッジの減少を伴う。この場合グラフデータ演算システム１０の変換配備機構１００は、複数本のエッジの減少を、１本のエッジの削除を伴うグラフ構造の変化が連続して順次生じるとみなして扱っても良い。
【００７２】
図３Ｄに示されているように、バーテックスのみが増加し、エッジの増減がない場合は、エッジの増減がなければ、ただ孤立したバーテックスが生じただけなので、エッジが増えるまでパラメタ（エッジ重み）の更新を行わなくても良い。
【００７３】
このように以下では、有向グラフにエッジが１本加わる場合について説明するが、その他の場合、たとえばエッジが１本減る、バーテックスが減るような場合にも、類似の方法が適用可能であり、その方法の記載は省略する。
【００７４】
分散計算環境では、パラメタの再計算のみならず、再計算の結果として得られた更新されたパラメタを、担当するバーテックスに付与された特徴値の更新の際に必要とする計算機ノードに伝播する必要がある。
【００７５】
図４に示されているように、変換配備機構１００で生成された宛先パラメタ集合２０２と参照元パラメタ集合２０４は、各計算機ノード３００、３５０、３６０に送られる。
【００７６】
たとえば、計算機ノード３００では、宛先パラメタ集合２０２と参照元パラメタ集合２０４はそれぞれ、宛先パラメタ集合データベース（ＤＢ）３０４と参照元パラメタデータベース（ＤＢ）３０６に格納される。
【００７７】
図１１は、実施形態のグラフデータ演算システム１０の各計算機ノードにおけるデータの例を示す図である。
【００７８】
図１１ではエッジごとに、重み行列Ｃから宛先パラメタ集合２０２と参照元パラメタ集合２０４に変換する。
【００７９】
たとえば、計算機ノード１が担当するバーテックス１から計算機ノード２が担当するバーテックス２に向かうエッジａ２１の重みは１／２である。そこで、変換配備機構１００は、バーテックス１担当の演算用ノードの記憶領域の宛先集合データベース（ＤＢ）３０４にＬｄｓｔ（１）に（２，（ａ２１，Ｐ［２］）＝（２，（１／２，０）を追加する。また、変換配備機構１００は、バーテックス１担当の演算用ノードの記憶領域の参照元パラメタデータベース（ＤＢ）３０６に、Ｌｓｒｃ（２）に（１，（ａ２１，Ｐ［１］）＝（１，（１／２，１））を追加する。
【００８０】
計算機ノード１が担当するバーテックス１から計算機ノード３が担当するバーテックス３に向かうエッジａ３１の重みは１／２である。そこで、変換配備機構１００は、バーテックス１担当の演算用ノードの記憶領域の宛先パラメタ集合データベース（ＤＢ）３０４にＬｄｓｔ（１）に（３，（ａ３１，Ｐ［３］））＝（３，（１／２，０）を追加する。また、変換配備機構１００は、バーテックス３担当の演算用ノードの記憶領域の参照元パラメタデータベース（ＤＢ）３０６に、Ｌｓｒｃ（３）に（３，（ａ３１，Ｐ［１］））＝（１，（１／２，１））を追加する。
【００８１】
計算機ノード３が担当するバーテックス３から計算機ノード１が担当するバーテックス１に向かうエッジａ１３の重みは１である。そこで、変換配備機構１００は、バーテックス１担当の演算用ノードの記憶領域の参照元パラメタデータベース（ＤＢ）３０６に、Ｌｓｒｃ（１）に（３，（ａ１３，Ｐ［３］））＝（３，（１，０））を追加する。また、変換配備機構１００は、バーテックス３担当の演算用ノードの記憶領域の宛先集合データベース（ＤＢ）３０４にＬｄｓｔ（３）に｛（１，（ａ１３，Ｐ［１］）｝＝｛（１，（１／２，１）｝を追加する。
【００８２】
したがって、図１１に示されているように、バーテックス１担当の演算用ノードの記憶領域の宛先パラメタ集合データベース（ＤＢ）３０４にＬｄｓｔ（１）＝｛（２，（１／２，０），（３，（１／２，０））｝が、参照元パラメタデータベース（ＤＢ）３０６にはＬｓｒｃ（１）＝｛（３，（１，０））｝が格納される。バーテックス２担当の演算用ノードの記憶領域の宛先パラメタ集合データベース（ＤＢ）３０４にＬｄｓｔ（２）＝｛｝が、参照元パラメタデータベース（ＤＢ）３０６にはＬｓｒｃ（２）＝｛（１，（１／２，１）｝が格納される。バーテックス３担当の演算用ノードの記憶領域の宛先パラメタ集合データベース（ＤＢ）３０４にＬｄｓｔ（３）＝（１，（１，１））が、参照元パラメタデータベース（ＤＢ）３０６にはＬｓｒｃ（３）＝｛（１，（１／２，１））｝が格納される。
【００８３】
図１２は、バーテックス１からバーテックス４に向かうエッジが増えたときのバーテックス１担当の演算用ノードにおけるパラメタ計算の例を示す図である。
【００８４】
ここで、「処理タプル」とあるのは、Ｌｄｓｔ（ｉ）なら、（バーテックスｉを出力点とするエッジの終点のバーテックスｊ，（バーテックスｉからバーテックスｊに向かうエッジのエッジ重み，終点バーテックスｊに付与された特徴値Ｐ［ｊ］））の組、Ｌｓｒｃ（ｉ）なら（参照元のバーテックスｊ，（バーテックスｊからバーテックスｉに向かうエッジに付与される重み，参照元のバーテックスｊの特徴値Ｐ［ｊ］））の組を指す。
【００８５】
まず、バーテックス１担当の演算用ノードのパラメタ計算機構１３０２は、（２，（ａ２１，Ｐ［２］））＝（２，（１／２，０））について処理をする。エッジ（辺）パラメタｒ’は、図１２のようにｒ’＝１／３と計算される。計算結果は、パラメタ一時蓄積機構１３１４に蓄積される。そして、ＴｏＤｏリストＬに（２，（１／３，０））を追加する。
【００８６】
ＴｏＤｏリストＬに格納される要素は、有向グラフの構造変化によって発生する新たなタプルである。
【００８７】
次に、バーテックス１担当の演算用ノードのパラメタ計算機構１３０２は、（３，（ａ３１，Ｐ［３］）））＝（３，（１／２，０））について処理をする。エッジ（辺）パラメタｒ’は、図１２のようにｒ’＝１／３と更新される。そして、ＴｏＤｏリストＬに（３，（１／３，０））を追加する。この時点で、ＴｏＤｏリストＬには、（２，（１／３，０））と（３，（１／３，０））が含まれている。
【００８８】
最後に、バーテックス１担当の演算用ノードのパラメタ計算機構１３０２は、（４，（∞，Ｐ［４］）））＝（４，（∞，０））について処理をする。ここで、「∞」は任意の数を意味しても良い。エッジ（辺）パラメタｒ’は、図１２のようにｒ’＝１／３と計算される。そして、ＴｏＤｏリストＬに（４，（１／３，０））を追加する。この時点で、ＴｏＤｏリストＬには、（２，（１／３，０））と（３，（１／３，０））と（４，（１／３，０））が含まれている。
【００８９】
図１３は、実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。なお、図１１から値の変化がないデータは省略してある。図１３では、図３Ａのように、バーテックス１から４の辺が増えた場合を説明する。
【００９０】
タプル（２，（１／３，０））の処理では、バーテックス１担当の演算用ノードの変換配備機構１００は、Ｌｄｓｔ（１）中の（２，（１／２，０））を（２，（１／３，０））と変更する。また、バーテックス２担当の演算用ノードのパラメタ計算機構１３０２は、Ｌｓｒｃ（２）中の（１，（１／２，１））を用いて新たなパラメタ（１，（１／３，１））を得る。計算結果は、パラメタ一時蓄積機構１３１４に蓄積される。
【００９１】
タプル（３，（１／３，０））の処理では、バーテックス１担当の演算用ノードの変換配備機構１００は、Ｌｄｓｔ（１）を｛（２，（１／３，０））、（３，（１／３，０））｝と変更する。また、バーテックス３担当の演算用ノードのパラメタ計算機構１３０２は、Ｌｓｒｃ（３）に対する新たなパラメタ｛（３，（１／３，１））｝を得る。計算結果は、パラメタ一時蓄積機構１３１４に蓄積される。
【００９２】
タプル（４，（１／３，０））の処理では、バーテックス１担当の演算用ノードのパラメタ計算機構１３０２は、Ｌｄｓｔ（１）を｛（２，（１／３，０））、（３，（１／３，０））、（４，（１／３，０））｝と変更する。また、バーテックス４担当の演算用ノードのパラメタ計算機構１３０２は、Ｌｓｒｃ（４）に（４，（１／３，１））を追加する。
【００９３】
最終結果である新パラメタ１３１５は、パラメタ伝播機構１３１８によって、他のノードに送られ得る。
【００９４】
図１４は、図１３に示されている処理を終了した時点における、実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【００９５】
図１４に示されている例では、バーテックス１、２を計算機ノードＡが担当し、バーテックス３、４を計算機ノードＢが担当している。よって、ノードＡの「宛先とパラメタの集合Ｌｄｓｔ」には、（ｓｒｃ，ｄｓｔ，パラメタ）＝（１，２，（１／３，０））、（１，３，（１／３，０））。（１，４，（１／３，０））が格納される。また、ノードＡの「参照元とパラメタの集合Ｌｓｒｃ」には、（ｄｓｔ，ｓｒｃ，パラメタ）＝（２，１，（１／３，１））、（１，３，（１，０））が格納される。またノードＢの「宛先とパラメタの集合Ｌｄｓｔ」には、（ｓｒｃ，ｄｓｔ，パラメタ）＝（３，１，（１，１））が、「参照元とパラメタの集合Ｌｓｒｃ」には、（ｄｓｔ，ｓｒｃ，パラメタ）＝（３，１，（１／３，１））、（４，１，（１／３，１））が格納される。
【００９６】
算出方法を現すデータ１０２に含まれるバーテックスの総数｜Ｖ｜、定数ｄは、固定値パラメタデータベース（ＤＢ）に格納される。
【００９７】
各計算機ノードには、別の計算機ノードで計算された特徴値に関する情報も入力される。図４では更新情報３２０は、計算機ノード（演算用ノード）３５０で計算された特徴値に関する結果で計算機ノード（演算用ノード）３００に入力されるものである。更新情報３２２は、計算機ノード（演算用ノード）３００で計算された特徴値に関する情報で計算機ノード（演算用ノード）３６０に入力されるものである。
【００９８】
また、各計算機ノードには、別の計算機ノードで計算されたパラメタも入力される。図４では、別の計算機ノード３５０で計算されたパラメタ更新情報１３２０は、計算機ノード（演算用ノード）３００に入力される。また、パラメタ更新情報１３２２は、計算機ノード（演算用ノード）３００で計算されたパラメタで、計算機ノード（演算用ノード）３６０に入力されるものである。
【００９９】
計算機ノード３００では、受信機構３１６が計算機ノード３５０から更新情報３２０を受ける。受信機構３１６が受けた更新情報３２０に関するデータは、他バーテックス演算前情報データベース（ＤＢ）３１０に格納される。
【０１００】
自バーテックス演算前情報データベース（ＤＢ）３１２は、計算機ノード３００で直前に計算された特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）の値が格納されている。
【０１０１】
演算機構３０２は、参照元パラメタデータベース（ＤＢ）３０６に格納されているデータ、他バーテックス演算前情報データベース（ＤＢ）３１０に格納されているデータ、および自バーテックス演算前情報データベース（ＤＢ）３１２に格納されているデータを用いて、特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）の値を更新する。たとえば、演算機構３０２は、直前の計算の結果である特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）の値をＰｏとすると、
【数１７】
2015215826.tif 000019
によって新たな特徴値Ｐを計算することができる。定数ベクトルｂ、定数ｄは、参照元パラメタデータベース（ＤＢ）３０６に格納されているデータである。
【０１０２】
図１５に示されているように、直前の計算結果である特徴値Ｐ［１］、Ｐ［２］、…、Ｐ［｜Ｖ｜］（またはベクトルＰ）の値をＰｏとし、新たな特徴値をＰとする。
【０１０３】
Ｘ［ｉ］で、ベクトルＸのｉ番目の値を示すものとする。
たとえば、演算機構３０２において、バーテックス１の特徴値Ｐ［１］は、
【数１８】
2015215826.tif 000020
で計算される。このとき、「Ｐｏ［３］」の“３”は、Ｌｓｒｃ（１）＝｛（３、（１、０））｝中の“３”であり、「Ｐｏ［３］×１」の“１”は、Ｌｓｒｃ（１）＝｛（３、（１、０））｝中の“１”である。演算機構３０２は、このような処理をＬｓｒｃ（ｉ）が要素として持つ全てのタプル（ｊ，ｒ）について実行する。ここで、ｒ＝（エッジに付与される重みａｉｊ，参照元のバーテックスの特徴値Ｐ［ｊ］）である。
【０１０４】
例えば、図７に示される有向グラフ構造の、バーテックス３を担当する計算機ノードのデータ構造の変化を、図１５を参照して説明する。
【０１０５】
図１５は、実施形態のグラフデータ演算システムの各計算機ノードにおけるデータの例を示す図である。
【０１０６】
まず、１回目の計算の実施直前では、バーテックス３を担当する計算機ノードには、宛先パラメタの集合は Ｌｄｓｔ（３）＝｛（１，（１，１））｝、参照元パラメタ集合Ｌｓｒｃ（３）＝｛ （１，（１／２，１）） ｝、担当するバーテックスの前回演算後の特徴値Ｐｏ［３］＝０、演算で必要となる点の前回演算後のＬｓｒｃ（３）内に格納した特徴値Ｐｏ［１］＝１が格納されている。
【０１０７】
１回目の計算では、Ｐ［３］＝ｂ［３］＋ｄ×Ｐｏ［１］×ａ３１＝０．０５＋０．８５×１×（１／２）＝０．４７５が計算される。よって、１回目の計算の実施後では、担当するバーテックスの今回演算後の特徴値Ｐ［３］＝０．４７５となる。
【０１０８】
１回目の伝播実施後、担当する点の前回演算後の特徴値はＰｏ［３］＝０．４７５であり、演算で必要となる点の前回演算後のＬｓｒｃ（３）内に格納した特徴値はＰｏ［１］＝０．０５となる。演算結果は各バーテックスを担当する演算用ノードの他バーテックス演算前情報データベース（ＤＢ）３１０、または自バーテックス演算前情報データベース（ＤＢ）３１２に分散して格納、保持される。
【０１０９】
これを繰り返すと、２回目の計算の実施後では、担当するバーテックスの今回演算後の特徴値Ｐ［３］＝０．０７１となる。
【０１１０】
図４に戻って、演算機構３０２で計算された新たな特徴値Ｐは、自バーテックス演算後情報データベース（ＤＢ）３１４に格納される。
【０１１１】
伝播機構３１８では、演算機構３０２で計算された新たな特徴値Ｐを必要な計算機ノードに伝播する。
【０１１２】
伝播機構３１８は、演算機構３０２で新たに特徴値が計算されたバーテックスｊの特徴値Ｐ［ｊ］が、前の計算結果である特徴値Ｐｏと異なるときのみ、処理を行う。
【０１１３】
たとえば伝播機構３１８は、演算機構３０２で新たに特徴値が計算されたバーテックスｊが自分自身が担当するバーテックスではなく、自身の参照元パラメタデータベース（ＤＢ）３０６に格納されている集合Ｌｓｒｃ（ｉ）の要素（ｊ，ｒ）に含まれる場合、バーテックスｊ担当の計算機ノードに更新情報として特徴値Ｐ［ｊ］を送る。そして伝播機構３１８は、バーテックスｊ担当の計算機ノードの他バーテックス演算前情報データベース（ＤＢ）３１０に格納されているバーテックスｊの特徴値をＰ［ｊ］に変更させる。
【０１１４】
たとえば伝播機構３１８は、演算機構３０２で新たに特徴値が計算されたバーテックスｊは自分自身が担当するバーテックスではなく、自身の宛先集合データベース（ＤＢ）３０４に格納されているＬｄｓｔ（ｉ）の要素（ｊ，ｒ）に含まれるならば、バーテックスｊ担当の計算機ノードに更新情報として特徴値Ｐ［ｊ］を送る。そして伝播機構３１８は、バーテックスｊ担当の計算機ノードに自身の他バーテックス演算前情報データベース（ＤＢ）３１０に格納されているバーテックスｊの特徴値をＰ［ｊ］に変更させる。
【０１１５】
また伝播機構３１８は、演算機構３０２で新たに特徴値が計算されたバーテックスｊの特徴値Ｐ［ｊ］について、自身がバーテックスｊ担当の計算機ノードであり、この値がＰｏ［ｊ］とは異なるならば、自身の自バーテックス演算前データベース３１２に格納されている値をＰ［ｊ］に更新する。
【０１１６】
演算機構３０２と受信機構３１６と伝播機構３１８は組み合わされて、演算・伝播・受信機構３３０を構成する。
【０１１７】
図４に示されているように、計算機ノード３００の伝播機構３１８から送られた新たな特徴値は、更新情報３２２として、適切な計算機ノード３００に送られる。
【０１１８】
このように、複数のバーテックスの各々に付与される特徴値Ｐ［１］、…、Ｐ［ｎ］を要素とするベクトルである特徴値ベクトルＰを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列Ｃを用いて、少なくとも第１の計算機ノード３００および第２の計算機ノード３５０、３６０を含む複数の計算機ノードによって計算するグラフデータ演算システムは、変換配備機１００、演算機構３０２、伝播機構３１８を含む。
【０１１９】
変換配備機１００は、重み行列Ｃを、複数のバーテックスの一つである第１のバーテックスｊから出ている第１のエッジａｉｊの終点のバーテックスｉである宛先バーテックスと第１のエッジに付与されている重みａｉｊと前記第１のバーテックスｊに付与された前記特徴値Ｐ［ｊ］とに関する第１の情報「宛先とパラメタの対の集合Ｌｄｓｔ」と、複数のバーテックスの一つである第２のバーテックスｋに入ってくる第２のエッジａｋｌの始点のバーテックスｌである参照元バーテックスと第２のエッジに付与されている重みａｋｌと参照元バーテックスｌに付与された特徴値Ｐ［ｌ］とに関する第２の情報「参照元とパラメタの対の集合Ｌｓｒｃ」に分解する。
【０１２０】
グラフ構造変化通知機構１０６は、複数のバーテックスの個数が変化したとき、第１の情報および第２の情報を更新し、更新された第１の情報および更新された第２の情報を得る。
【０１２１】
演算機構３０２は、グラフ構造変化通知機構１０６が得た更新された第１の情報および更新された第２の情報を用いて、第１の計算機ノードが、第１のバーテックスに付与された特徴値を更新するために、更新された第２の情報「参照元とパラメタの対の集合Ｌｓｒｃ」を参照して演算を行い、更新された第１のバーテックスに付与された特徴値を求める。この際、パラメタ受信機構１３１６で受けたパラメタ更新情報１３２０が格納されている参照元パラメタ集合ＤＢ３０６に含まれる情報を参照し得る。
【０１２２】
パラメタ伝播機構１３１８は、第１の情報「宛先とパラメタの対の集合の集合Ｌｄｓｔ」に第２の計算機ノードが担当する第２のバーテックスが含まれている場合、第１の計算機ノードは、更新された第１のバーテックスに付与された特徴値を第２の計算機ノードに送る。
【０１２３】
実施形態のグラフデータ演算システムでは、上記のようなアルゴリズムでは、構造が変化する有向グラフで表されるデータ構造において、各バーテックスにおける特徴値の計算を分散コンピューティング環境で行なうとき、計算のたびに計算結果を、その計算結果を必要とする計算機ノードにのみ転送する。
【０１２４】
このように各コンピュータに割り当てられた計算に必要な値のみをコンピュータ間に伝播させることによって、有向グラフの各点の特徴値を、分散計算環境下で、隣接行列Ｇに重み行列Ｃを再帰的に作用させて求める際、各コンピュータ間の通信量を低減し、高速に処理することができる。
【０１２５】
図５Ａは実施形態のグラフデータ演算システム１１の構成の例を示す図である。
グラフデータ演算システム１１では、１台の変換配備用ノード１２０に変換配備機構１００およびグラフ構造変化通知機構１０６が含まれている。
【０１２６】
変換配備用ノード１２０には、有向グラフ構造データストア（配信サーバとも呼ばれる）１１０から、有向グラフの構造に関する情報が入力される。たとえば有向グラフの構造に関する情報には、隣接行列Ｐ、接続行列Ｑなどが含まれ得る。
【０１２７】
また、グラフの各バーテックスを担当する演算用ノード（計算機ノード）の割り当てを演算用ノードディレクトリサーバ１３０で管理する。演算用ノードディレクトリサーバ１３０は、グラフの各バーテックスと、バーテックスを担当する演算用ノード（計算機ノード）の対応に関する情報を含むバーテックス・ノード対応表１３２を含む。
【０１２８】
演算用ノードディレクトリサーバ１３０は、ノードのＩＤとＩＰアドレスの対応表１４２を含むＤＮＳサーバ１４０を必要に応じて参照する。
【０１２９】
演算用ノード３００、３５０、３６０のそれぞれは、演算・伝播・受信機構３３０を含む。演算用ノード３００、３５０、３６０のそれぞれは、演算用ノードディレクトリサーバ１３０を参照して、受信、計算、伝播を繰り返す。
【０１３０】
図５Ｂは、実施形態のシステム１２の構成の例を示す図である。
グラフデータ演算システム１２では、１台の変換配備用ノード１２２に変換配備機構１００、バーテックスＩＤ・ノードＩＤ変換機構１３２、グラフ構造変化通知機構１０６が含まれている。
【０１３１】
また、演算用ノード４００、３５０、３６０のそれぞれは、演算・伝播・受信機構３３０とバーテックスＩＤ・ノードＩＤ変換機構３４０を含む。
【０１３２】
バーテックスＩＤ・ノードＩＤ変換機構１２４、３４０は、グラフの各バーテックスを担当する演算用ノードの割り当ての際、バーテックスＩＤからノードＩＤへの変換を行う。
【０１３３】
グラフデータ演算システム１２では、図４に示されているグラフデータ演算システム１１の演算用ノードディレクトリサーバ１３０、ＤＮＳサーバ１４０は存在せず、その代わり、各計算機ノードはバーテックスＩＤ・ノードＩＤ変換機構１２４、３４０を含んでいる。
【０１３４】
図５Ｃは、実施形態のグラフデータ演算システム１３の構成の例を示す図である。
グラフデータ演算システム１３では、複数の計算機ノード５００、５０２、５０４で変換配備を担当する。演算用ノードと１対１で対応する変換配備ノードに変換配備処理が割り振られている。
【０１３５】
また、変換配備を複数の計算機ノード５００、５０２、５０４に振り分けるために、振り分け用ノード１２６が複数の計算機ノード６００、６０２、６０４に接続されている。
【０１３６】
振り分け用ノード１２６は、エッジの両端のバーテックスの担当演算ノードと直結する変換配備ノード２箇所に処理を振る。
【０１３７】
たとえば、変換配備用ノード５０２は、演算用ノード６０２と１対１に対応する。変換配備用ノード５０２は、変換配備機構１００とグラフ構造変化通知機構１０６を含み、演算用ノード０２は演算・伝播・受信機構３３０を含む。変換配備用ノード６０２の変換配備機構１００は、１つのエッジの変換につきＬｓｒｃ、Ｌｄｓｔいずれか一方の要素追加を指示する。
【０１３８】
演算用ノード７００、７０２、７０４のそれぞれは、対になる変換配備用ノードと一体に構成しても良い。
【０１３９】
図５Ｄは、実施形態のグラフデータ演算システム１４の構成の例を示す図である。
グラフデータ演算システム１４では、複数の計算機ノード５０６、５０８、５１０で変換配備を担当する。演算用ノードと多対多で接続する変換配備ノードに変換配備処理が割り振られる。
【０１４０】
グラフデータ演算システム１４の振り分け用ノード１２６は、ラウンドロビンで処理を分配する。グラフデータ演算システム１４は、図６に示されているグラフデータ演算システム１３で演算用ノードと変換配備ノードが１対１で対応していたものを、多対多に変更したものである。変換配備用ノード５０６、５０８、５１０の変換配備機構１００は、１つのエッジの変換につきＬｓｒｃ、Ｌｄｓｔを担当する各ノードに要素追加を指示する。
【０１４１】
図１６はグラフデータ演算システムを構成する計算機、たとえば、変換配備用ノード、演算用ノード、演算用ノードディレクトリサーバ、ＤＮＳサーバ、配信用サーバ等の構成の例を示す図である。
【０１４２】
このコンピュータ８００は、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）８０２、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）８０４、及びＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）８０６を備えている。コンピュータ８００は、さらに、ハードディスク装置８０８、入力装置８１０、表示装置８１２、インタフェース装置８１４、及び記録媒体駆動装置８１６を備えている。なお、これらの構成要素はバスライン８１８を介して接続されており、ＣＰＵ８０２の管理の下で各種のデータを相互に授受することができる。
【０１４３】
Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）８０２は、このコンピュータ８００全体の動作を制御する演算処理装置であり、コンピュータ８００の制御処理部として機能する。
【０１４４】
Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）８０４は、所定の基本制御プログラムが予め記録されている読み出し専用半導体メモリである。ＣＰＵ８０２は、この基本制御プログラムをコンピュータ８００の起動時に読み出して実行することにより、このコンピュータ８００の各構成要素の動作制御が可能になる。
【０１４５】
Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）８０６は、ＣＰＵ８０２が各種の制御プログラムを実行する際に、必要に応じて作業用記憶領域として使用する、随時書き込み読み出し可能な半導体メモリである。
【０１４６】
ハードディスク装置８０８は、ＣＰＵ８０２によって実行される各種の制御プログラムや各種のデータを記憶しておく記憶装置である。ＣＰＵ８０２は、ハードディスク装置８０８に記憶されている所定の制御プログラムを読み出して実行することにより、後述する各種の制御処理を行えるようになる。
【０１４７】
入力装置８１０は、例えばマウス装置やキーボード装置であり、情報処理装置のユーザにより操作されると、その操作内容に対応付けられている各種情報の入力を取得し、取得した入力情報をＣＰＵ８０２に送付する。
【０１４８】
表示装置８１２は例えば液晶ディスプレイであり、ＣＰＵ８０２から送付される表示データに応じて各種のテキストや画像を表示する。
【０１４９】
インタフェース装置８１４は、このコンピュータ８００に接続される各種機器との間での各種情報の授受の管理を行う。
【０１５０】
記録媒体駆動装置８１６は、可搬型記録媒体８１８に記録されている各種の制御プログラムやデータの読み出しを行う装置である。ＣＰＵ８０２は、可搬型記録媒体１１８に記録されている所定の制御プログラムを、記録媒体駆動装置８１６を介して読み出して実行することによって、後述する各種の制御処理を行うようにすることもできる。なお、可搬型記録媒体１１８としては、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格のコネクタが備えられているフラッシュメモリ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ−ＲＯＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などがある。
【０１５１】
このようなコンピュータ８００を用いて情報処理装置を構成するには、例えば、上述の各処理部における処理をＣＰＵ８０２に行わせるための制御プログラムを作成する。作成された制御プログラムはハードディスク装置８０８若しくは可搬型記録媒体８２０に予め格納しておく。そして、ＣＰＵ８０２に所定の指示を与えてこの制御プログラムを読み出させて実行させる。こうすることで、情報処理装置が備えている機能がＣＰＵ８０２により提供される。
【０１５２】
＜グラフデータ演算処理＞
図１７〜２６を参照して、グラフデータ演算処理について説明する。
【０１５３】
また、グラフデータ演算システムを構成する計算機が図１６に示されているような汎用コンピュータ８００である場合には、下記の説明は、そのような処理を行う制御プログラムを定義する。すなわち、以下では、下記に説明する処理を汎用コンピュータに行わせる制御プログラムの説明でもある。
【０１５４】
処理を開始すると、Ｓ１００で変換配備機構１００は、変換配備処理を行う。
変換配備処置を図１８を参照して説明する。
【０１５５】
Ｓ２００で変換配備機構１００は、ダミー変数ｉ、ｊをリセットする。たとえば、ｉ＝ｊ＝０とする。
【０１５６】
Ｓ２０２で変換配備機構１００は、ダミー変数ｉ、ｊを更新する。たとえば、ダミー変数ｉ、ｊのいずれかの値を１増やしても良い。ダミー変数ｉ、ｊは、バーテックスの数を｜Ｖ｜として、共に｜Ｖ｜以下の整数である。
【０１５７】
Ｓ２０４で変換配備機構１００は、重み行列Ｃのｉ行ｊ列の要素をａｉｊで表したときの、ａｉｊは非ゼロであるか否かを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちａｉｊは非ゼロである場合には、処理はＳ２０６に進む。もしこの判定の結果が“Ｎｏ”、すなわちａｉｊは非ゼロではない場合には、処理はＳ２０２に戻る。
【０１５８】
Ｓ２０６で変換配備機構１００は、本計算機ノードはバーテックスｊの変換を担当しているか否かを判断する。もしこの判定の結果が“Ｙｅｓ”、すなわち本計算機ノードはバーテックスｊの変換を担当している場合には、処理はＳ２０８に進む。もしこの判定の結果が“Ｎｏ”、すなわち本計算機ノードはバーテックスｊの変換を担当していない場合には、処理はＳ２１２に進む。
【０１５９】
Ｓ２０８で変換配備機構１００は、バーテックスｊの計算を担当する計算機ノードｎｊの特定処理を行う。
【０１６０】
計算機ノードｎｊの特定処理について、図１９、２０を参照して説明する。
図１９はノードの特定処理の流れの例を示す図であり、図２０はノードの特定処理の流れの別の例を示す図である。
【０１６１】
図１９に示されているように、処理が開始されるとＳ３００で変換配備機構１００は、演算用ノードディレクトリに問い合わせるなどして、バーテックスの識別子（ＩＤ）と担当するノードの識別子（ＩＤ）の対応表から、バーテックスｉを担当するノードの識別子（ＩＤ）とさらに対応するノードのＩＰアドレスを取得する。
【０１６２】
図２０に示されているノードの特定処理の流れの別の例では、Ｓ４００で変換配備機構１００は、（（「バーテックスの識別子（ＩＤ）」−１）  ｍｏｄ  ｍ）＋１を計算する。
【０１６３】
次のＳ４０２で変換配備機構１００は、計算結果をノードの識別子（ＩＤ）とし、同時にＤＮＳサーバ等に問い合わせてノードＩＤとＩＰアドレスの対応表からノードのＩＰアドレスを取得する。
【０１６４】
図１８に戻って、Ｓ２０８の次のＳ２１０で変換配備機構１００は、計算機ノードｎｊに対し集合Ｌｄｓｔ（ｊ）に（ｉ，（ａｉｊ，Ｐ［ｉ］））を追加するよう指示をする。計算機ノードｎｊはこれを実施する。処理が終了するとＳ２１２に進む。
【０１６５】
Ｓ２１２で変換配備機構１００は、本計算機ノードはバーテックスｉの変換を担当しているか否かを判断する。もしこの判定の結果が“Ｙｅｓ”、すなわち本計算機ノードはバーテックスｉの変換を担当している場合には、処理はＳ２１４に進む。もしこの判定の結果が“Ｎｏ”、すなわち本計算機ノードはバーテックスｉの変換を担当していない場合には、処理はＳ２１８に進む。
【０１６６】
Ｓ２１４で変換配備機構１００は、バーテックスｉの計算を担当する計算機ノードｎｉの特定処理を行う。計算機ノードｎｉの特定処理については、図１９、２０に示されている。
【０１６７】
Ｓ２１６で変換配備機構１００は、計算機ノードｎｉに対し集合Ｌｓｒｃ（ｉ）に（ｊ，（ａｉｊ，Ｐ［ｉ］））を追加するよう指示をする。計算機ノードｎｉはこれを実施する。処理が終了するとＳ２１８に進む。
【０１６８】
Ｓ２１８で変換配備機構１００は、全てのダミー変数ｉ、ｊについて計算したか否かを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわち全てのダミー変数ｉ、ｊについて計算した場合には、処理を終了する。もしこの判定の結果が“Ｎｏ”、すなわち全てのダミー変数ｉ、ｊについて計算していない場合には、処理はＳ２０２に戻る。ダミー変数ｉ、ｊは、バーテックスの数を｜Ｖ｜として、共に｜Ｖ｜以下の整数である。
【０１６９】
図１７に戻って、Ｓ１００の次のＳ１０２で変換配備機構１００は、各計算機ノードに演算で必要な固定値パラメタを配備する。図３に示されているシステム１０では、算出方法を表すデータ１０２を、たとえば、計算機ノード３００の固定値パラメタＤＢ３０８に送る。
【０１７０】
Ｓ１０２の次のＳ１０４で変換配備機構１００は、演算の指示が来るまで待つ。演算の指示が来たらＳ１０５に進む。
【０１７１】
Ｓ１０６で変換配備機構１００は、有向グラフ構造が変化したかどうかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわち有向グラフ構造が変化した場合には、処理はＳ１１０に進む。もしこの判定の結果が“Ｎｏ”、すなわち有向グラフ構造が変化していない場合には、処理はＳ１０８に進む。
【０１７２】
Ｓ１０８でパラメタ計算機構１３０２は、パラメタ計算処理を行う。本処理が終了すると、処理はＳ１１０に進む。
【０１７３】
パラメタ計算処理について、図２１を参照して説明する。
図２１は、バーテックスｓからバーテックスｄに向かうエッジが増えた場合の処理の例である。図３Ａ〜３Ｄに示されているような有向グラフの構造の変化に対しても、同様に処理を行うことができる。
【０１７４】
パラメタ計算処理が開始されるとパラメタ計算機構１３０２は、Ｓ５００でバーテックスｓの計算を担当する計算機ノードｎｓの特定処理を行う。
【０１７５】
Ｓ５００の処理は、計算機ノードｎｓの特定処理については、図１９、２０に示されている。
【０１７６】
Ｓ５００の次のＳ５０２で計算機ノードｎｓのパラメタ計算機構１３０２は、ダミー変数ｉをリセットする。たとえばｉ＝０とする。ここでのダミー変数ｉの値は０以上の整数であり、最大値は集合Ｌｄｓｔ（ｓ）∪｛（ｅ，（∞，Ｐ［ｄ］））｝の要素数である。本ステップの処理を終えると、処理はＳ５０４に進む。
【０１７７】
Ｓ５０４でパラメタ計算機構１３０２は、ダミー変数ｉを更新する。たとえば、ｉの値を一つ増やす。本ステップの処理を終えると、処理はＳ５０６に進む。
【０１７８】
Ｓ５０６で計算機ノードｎｓのパラメタ計算機構１３０２は、ノードｎｓで集合Ｌｄｓｔ（ｓ）∪｛（ｅ、（∞、Ｐ［ｄ］））｝の第i番目要素タプル（ｅ，（ｒ，ｑ））について、エッジパラメタを計算して新エッジパラメタ値ｒ’を得る。ここで、ｒは更新前のエッジａｅｓに付与されたエッジ重みである。これらの処理は、図８〜１３を参照して説明したのでここでは繰り返さない。本ステップの処理を終えると、処理はＳ５０８に進む。
【０１７９】
Ｓ５０８でパラメタ計算機構１３０２は、更新されたパラメタｒ’が更新前のパラメタｒと異なっているか（ｒ’≠ｒ）どうかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちパラメタ値が変化した場合には、処理はＳ５１０に進む。もしこの判定の結果が“Ｎｏ”、すなわちパラメタ値が変化していない場合には、処理はＳ５１２に進む。
【０１８０】
Ｓ５１０で計算機ノードｎｓのパラメタ計算機構１３０２は、ＴｏＤｏリストＬにタプル（ｅ，（ｒ’ ，ｑ））を追加する。本ステップの処理を終えると、処理はＳ５１２に進む。
【０１８１】
Ｓ５１２で計算機ノードｎｓのパラメタ計算機構１３０２は、集合Ｌｄｓｔ（ｓ）∪｛（ｅ，（∞，Ｐ［ｄ］））｝のすべての要素タプル（ｅ，（ｒ，ｑ））について処理したか、つまり全てのｉについて処理をしたかどうかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちＴｏｄｏリストＬの全ての要素について処理した場合には、処理Ｓ５１４に進む。もしこの判定の結果が“Ｎｏ”、すなわち集合Ｌｄｓｔ（ｓ）∪｛（ｅ，（∞，Ｐ［ｄ］））｝の全ての要素タプルについて処理していない場合には、処理はＳ５０４に戻る。
【０１８２】
Ｓ５１４で計算機ノードｎｓのパラメタ計算機構１３０２は、ダミー変数ｉをリセットする。たとえばｉ＝０とする。ここでのダミー変数ｉは直前の同名のダミー変数ｉとは異なり、バーテックスの数を｜Ｖ｜として、｜Ｖ｜以下の整数である。本ステップの処理を終えると、処理はＳ５１６に進む。
【０１８３】
Ｓ５１６で計算機ノードｎｓのパラメタ計算機構１３０２は、ダミー変数ｉを更新する。たとえば、ｉの値を一つ増やす。
【０１８４】
Ｓ５１６の次のＳ５１８で計算機ノードｎｓのパラメタ計算機構１３０２は、ＴｏＤｏリストＬのｉ番目の要素タプルの第一要素を「ｅ」としたときＬｄｓｔ（ｓ）内に第１要素が「ｅ」のタプル（ｅ，（ｒ，ｑ））があるかどうかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちＴｏＤｏリストＬのｉ番目の要素タプルと第一要素が同一のタプルがＬｄｓｔ（ｓ）内にある場合には、処理はＳ５２０に進む。もしこの判定の結果が“Ｎｏ”、すなわちＴｏＤｏリストＬのｉ番目の要素タプルと第一要素が同一のタプルがＬｄｓｔ（ｓ）内にない場合には、処理はＳ５２４に進む。
【０１８５】
Ｓ５２０で計算機ノードｎｓのパラメタ計算機構１３０２は、Ｌｄｓｔ（ｓ）中のタプル（ｅ，（ｒ，ｑ））をタプル（ｅ，（ｒ’ ，ｑ））に変更する。本ステップの処理を終えると、処理はＳ５２２に進む。
【０１８６】
Ｓ５２２で計算機ノードｎｓのパラメタ計算機構１３０２は、自身のパラメタ伝播機構１３１８に、ノードｅを担当するノードｎｅに対して、更新情報としてタプル（ｓ，（ｒ’ ，ｑ））を伝え、変更されたパラメタｒ’をノードｎｅのＬｓｒｃに反映させる。
【０１８７】
本ステップの処理を図２５〜２６を参照してより詳細に説明する。
図２５はパラメタ伝播処理の流れの例を示す図である。
【０１８８】
処理が開始されると、Ｓ９００でパラメタ伝播機構１３１８は、点ｅを担当するノードｎｅを特定する。本ステップの処理が終了すると、処理はＳ９０２に進む。
【０１８９】
Ｓ９０２でパラメタ伝播機構１３１８は、点ｅを担当するノードｎｅが現在処理中のノードであるか否かを判定する。もし、判定の結果が“ＹＥＳ”、すなわち点ｅを担当するノードｎｅが現在処理中のノードである場合には、処理はＳ９０４に進む。もし、判定の結果が“ＮＯ”、すなわち点ｅを担当するノードｎｅが現在処理中のノードではない場合は、処理はＳ９０６に進む。
【０１９０】
Ｓ９０４ではタプル（ｓ，（ｅ，ｒ’））による更新処理を行う。
本処理について、図２６を参照して説明する。
【０１９１】
図２６は、タプル（ｓ，（ｅ，ｒ’））による更新処理の流れの例を示す図である。
処理が開始されるとＳ１００２でパラメタ伝播機構１３１８は、Ｌｓｒｃ（ｅ）に第１要素がｓであるタプル（（ｓ，（ｅ，ｒ））があれば削除する。
【０１９２】
次のＳ１００４でパラメタ伝播機構１３１８は、Ｌｓｒｃ（ｅ）に（ｓ，（ｅ，ｒ’））を追加する。本ステップの処理が終了すると、図２５に戻り、パラメタ伝播処理は終了する。
【０１９３】
図２５に戻り、Ｓ９０６でパラメタ伝播機構１３１８は、ノードｎｅにパラメタ更新情報として（ｓ，（ｅ，ｒ’））を送る。
【０１９４】
次のＳ９０８でノードｎｅのパラメタ伝播機構１３１８は、タプル（ｓ，（ｅ，ｒ’））による更新処理を行う。この処理の例は図２６に示されており、既に説明したのでここでは繰り返さない。本処理が終了すると、パラメタ伝播処理は終了する。
【０１９５】
Ｓ５２２の処理を終えると、処理はＳ５２４に進む。
Ｓ５２４で計算機ノードｎｓのパラメタ計算機構１３０２は、ＴｏｄｏリストＬの全ての要素について処理したか、つまり全てのｉについて処理をしたかどうかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちＴｏｄｏリストＬの全ての要素について処理した場合には、処理を終了しＳ１１２に進む。もしこの判定の結果が“Ｎｏ”、すなわちＴｏｄｏリストＬの全ての要素について処理していない場合には、処理はＳ５１６に戻る。
【０１９６】
図１７に戻って、Ｓ１１０で計算ノードの演算機構、たとえば計算機ノード３００の演算機構３０２は、各計算機ノードに割り当てられた計算を行う計算処理と、計算結果の伝播を行う伝播処理を含むノード処理を実行する。本ステップの処理が終わると、処理はＳ１１２に進む。
【０１９７】
図２２は、ノード処理の流れの例を示す図である。
図２２に示されているように、処理が開始されるとＳ６００で演算機構３０２は計算処理を行う。
【０１９８】
計算処理について、図２３を参照して説明する。
図２３は計算処理の流れの例を示す図である。
【０１９９】
処理が開始されるとＳ７００で演算機構３０２は、ダミー変数ｉをリセットする。たとえば、ｉ＝０とする。ダミー変数ｉは、バーテックスの数を｜Ｖ｜として、｜Ｖ｜以下の整数である。
【０２００】
次のＳ７０２で演算機構３０２は、ダミー変数ｉを更新する。たとえば、ダミー変数ｉの値を１増やしても良い。
【０２０１】
次のＳ７０４で演算機構３０２は、バーテックスｉの特徴値Ｐ［ｉ］に、定数ｂ［ｉ］を代入する。
【０２０２】
次のＳ７０６で演算機構３０２は、ダミー変数ｊをリセットする。たとえばｊ＝０とする。ｊは０以上の整数であり、最大値はＬｓｒｃ（ｉ）の要素数である。
【０２０３】
次のＳ７０８で演算機構３０２は、ｊを更新する。例えばダミー変数ｊの値を１増やしても良い。本ステップの処理を終了すると、処理はＳ７１０に進む。
【０２０４】
Ｓ７１０で演算機構３０２は、Ｌｓｒｃ（ｉ）が要素のうちｊ番目のタプル（ｓ、（ｒ、ｑ））に対して
【数１９】
2015215826.tif 000021
を計算し、Ｐ［ｉ］を更新する。本ステップの処理を終了すると、処理はＳ７１２に進む。
【０２０５】
Ｓ７１２で演算機構３０２は、Ｌｓｒｃ（ｉ）が要素として持つタプルの全てについて処理をしたかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちＬｓｒｃ（ｉ）の全ての要素について処理をした場合には、Ｓ７１４に進む。もしこの判定の結果が“Ｎｏ”、すなわちＬｓｒｃ（ｉ）の全ての要素について処理をしていない場合には、処理はＳ７０８に戻る。
【０２０６】
Ｓ７１４で演算機構３０２は、全てのｉについて処理をしたかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわち全てのｉについて処理をした場合には、処理を終了する。もしこの判定の結果が“Ｎｏ”、すなわち全てのｉについて処理をしていない場合には、処理はＳ７０２に戻る。
【０２０７】
図２２に戻って、Ｓ６００の計算処理が終了すると、Ｓ６０２で伝播機構３１８は、伝播処理を行う。
【０２０８】
伝播処理について図２４〜図２６を参照して説明する。
図２４は、伝播処理の流れの例を示す図である。
【０２０９】
処理が開始されると、Ｓ８００で伝播機構３１８は、ダミー変数ｊをリセットする。たとえば、ｊ＝０とする。ダミー変数ｊはバーテックスの数を｜Ｖ｜として、｜Ｖ｜以下の整数である。
【０２１０】
次のＳ８０２で伝播機構３１８は、ダミー変数ｊを更新する。たとえば、ダミー変数ｊの値を１増やしても良い。
【０２１１】
Ｓ８０４で伝播機構３１８は、バーテックスｊにおいて、Ｐ［ｊ］≠Ｐｏ［ｊ］かどうかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちＰ［ｊ］≠Ｐｏ［ｊ］の場合には、処理はＳ８０６に進む。もしこの判定の結果が“Ｎｏ”、すなわちＰ［ｊ］≠Ｐｏ［ｊ］ではない場合には、処理はＳ８０２に戻る。
【０２１２】
以降、Ｐ［ｊ］の値をｖｎｅｗで表して参照する。
Ｓ８０６で伝播機構３１８は、直前の計算結果であるＰｏ［ｊ］をＰ［ｊ］＝ｖｎｅｗに更新する。本ステップの処理を終了すると、処理はＳ８０８に進む。
【０２１３】
Ｓ８０８で伝播機構３１８は、Ｌｓｒｃの要素（ｊ、ｒ）のｒにバーテックス特徴値Ｐ［ｊ］が含まれるか否かを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわちＬｓｒｃの要素（ｊ、ｒ）のｒにバーテックス特徴値Ｐ［ｊ］が含まれる場合には、処理はＳ８１０に進む。もしこの判定の結果が“Ｎｏ”、すなわちＬｓｒｃの要素（ｊ、ｒ）のｒにバーテックス特徴値Ｐ［ｊ］が含まれない場合には、処理はＳ８２４に進む。
【０２１４】
Ｓ８１０で伝播機構３１８は、ダミー変数ｋをリセットする。
次のＳ８１２で伝播機構３１８は、ｋを更新する。たとえば、ｋの値を１つ増やす。Ｌｄｓｔ（ｊ）のｋ番目の要素をタプル（ｉ，ｒ’）で表す。
【０２１５】
次のＳ８１４で伝播機構３１８は、バーテックスｉの計算を担当する計算機ノードｎｉの特定処理を行う。計算機ノードｎｉの特定処理については、図１９、２０に示されているので、ここでは繰り返さない。本ステップの処理を終了すると、処理はＳ８１６に進む。
【０２１６】
Ｓ８１６で伝播機構３１８は、計算機ノードｎｉは自ノードかどうかを判定する。もしこの判定の結果が“Ｙｅｓ”、すなわち計算機ノードｎｉは自ノードである場合には、処理はＳ８１８に進む。もしこの判定の結果が“Ｎｏ”、すなわち計算機ノードｎｉは自ノードではない場合には、処理はＳ８２０に進む。
【０２１７】
Ｓ８１８で伝播機構３１８は、Ｌｓｒｃ（ｉ）の要素（ｊ，ｒ）のｒに含まれるバーテックス特徴値Ｐ［ｊ］、たとえば、自バーテックス演算前情報ＤＢに格納されている値をｖｎｅｗに更新する。本ステップの処理を終了すると、処理はＳ８２２に進む。
【０２１８】
Ｓ８２０で伝播機構３１８は、計算機ノードｎｉに更新情報としてｊの値とｖｎｅｗを送る。そして、計算機ノードｎｉは、Ｌｓｒｃ（ｉ）の要素（ｊ，、ｒ）のｒに含まれるバーテックス特徴値Ｐ［ｊ］、たとえば計算機ノードｎｉの他バーテックス演算前情報ＤＢに格納されている値をｖｎｅｗに更新する。本ステップの処理を終了すると、処理はＳ８２２に進む。
【０２１９】
Ｓ８２２で伝播機構３１８は、全てのｋについて処理をしたか否かを判定する。この判定の結果が“Ｙｅｓ”、すなわちＬｄｓｔ（ｊ）の全ての要素について処理をした場合には、処理はＳ８２４に進む。もしこの判定の結果が“Ｎｏ”、すなわちＬｄｓｔ（ｊ）の全ての要素について処理をしていない場合には、処理はＳ８１２に進む。
【０２２０】
Ｓ８２４で伝播機構３１８は、Ｓ８０８〜Ｓ８２２における「Ｌｓｒｃ」と「Ｌｄｓｔ」を入れ替えた処理を行う。本ステップの処理を終了すると、処理はＳ８２６に進む。
【０２２１】
Ｓ８２２で伝播機構３１８は、全てのｊについて処理をしたか否かを判定する。この判定の結果が“Ｙｅｓ”、すなわち全てのｊについて処理をした場合には、処理を終了する。もしこの判定の結果が“Ｎｏ”、すなわち全てのｊについて処理をしていない場合には、処理はＳ８０２に戻る。
【０２２２】
図１７に戻ってＳ１１０の処理が終了すると、処理はＳ１１２に進む。
Ｓ１１２で演算機構３０２は、特徴値の計算状況が終了条件に合致するか否かを判定する。たとえば、特徴値を冪乗法で計算する場合、終了条件は、ベクトルＰｍ−１とベクトルＰｍの差が所定の条件を満たすことであっても良い。また、繰り返しによって特徴値を計算する方法を用いる場合、所定の繰り返し回数を行う、という終了条件であっても良い。この判定の結果が”ＹＥＳ”、すなわち特徴値の計算状況が終了条件に合致する場合は、Ｓ１１４に進む。また、の判定の結果が”ＮＯ”、すなわち特徴値の計算状況が終了条件に合致しない場合は、Ｓ１１０に戻る。
【０２２３】
Ｓ１１４で演算機構３０２は、外部から終了の指示があるか否かを判定する。この判定の結果が”ＹＥＳ”、すなわち外部から終了の指示がある場合は、処理を終了する。また、の判定の結果が”ＮＯ”、すなわち外部から終了の指示がない場合は、Ｓ１０６に戻る。
【０２２４】
上記のような処理を行うことで、重み行列Ｃに相当する情報を、接続行列Ｑに相当する情報に変換し、エッジの属性値を付加したデータ構造を用い、接続行列Ｑの形式のデータに対する演算アルゴリズムを用いて、各計算機ノードに送るデータを必要最低限に抑えることができる。
【０２２５】
以上の実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数のバーテックスの各々に付与される特徴値を要素とするベクトルである特徴値ベクトルを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列を用いて、少なくとも第１の計算機ノードおよび第２の計算機ノードを含む複数の計算機ノードによって計算するグラフデータ演算方法であって、
前記重み行列を、前記複数のバーテックスの一つである第１のバーテックスから出ている第１のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のバーテックス付与された前記特徴値に関する第１の情報と、前記複数のバーテックスの一つである第２のバーテックスに入ってくる第２のエッジの始点のバーテックスである参照元バーテックスと前記第２のエッジに付与されている重みと前記参照元バーテックス付与された前記特徴値に関する第２の情報に分解することと、
前記複数のバーテックスの個数が変化したとき、前記第１の情報および前記第２の情報を更新し、更新された第１の情報および更新された第２の情報を得ることと、
前記第１の計算機ノードが、前記更新された第２の情報を参照して演算を行い、第１のバーテックスに付与された特徴値の更新値を求めることと、
前記更新された第１の情報に前記第２の計算機ノードが担当する第２のバーテックスが含まれている場合、前記第１の計算機ノードが、前記更新値を前記第２の計算機ノードに送ること、
を含むグラフデータ演算方法。
（付記２）
前記重み行列を分解することは、第１の計算機ノードにおいて、前記第１の計算機ノードが担当するバーテックスを始点とする第３のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第３の情報と、前記第１の計算機ノードが担当するバーテックスに入ってくる第４のエッジの始点である前記複数のバーテックスの一つである参照元バーテックスと前記第２のエッジに付与されている重みと前記第２のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第４の情報に分解する、付記１に記載のグラフデータ演算方法。
（付記３）
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスと前記複数の計算機ノードの対応を示す表を参照して特定すること、
を含む付記１または２に記載のグラフデータ演算方法。
（付記４）
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスの識別子と前記複数の計算機ノードの対応を示す表を参照して特定すること、
を含む付記１または２に記載のグラフデータ演算方法。
（付記５）
複数のバーテックスの各々に付与される特徴値を要素とするベクトルである特徴値ベクトルを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列を用いて、少なくとも第１の計算機ノードおよび第２の計算機ノードを含む複数の計算機ノードによって計算するグラフデータ演算システムであって、
前記重み行列を、前記複数のバーテックスの一つである第１のバーテックスから出ている第１のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のバーテックス付与された前記特徴値に関する第１の情報と、前記複数のバーテックスの一つである第２のバーテックスに入ってくる第２のエッジの始点のバーテックスである参照元バーテックスと前記第２のエッジに付与されている重みと前記参照元バーテックス付与された前記特徴値に関する第２の情報に分解する変換配備機構と、
前記複数のバーテックスの個数が変化したとき、前記第１の情報および前記第２の情報を更新し、更新された第１の情報および更新された第２の情報を得るグラフ構造変化通知機構と、
前記グラフ構造変化通知機構が得た前記更新された第１の情報および前記更新された第２の情報を用いて、前記第１の計算機ノードが、第１のバーテックスに付与された前記特徴値を更新するために、前記更新された第２の情報を参照して演算を行い、更新された第１のバーテックスに付与された特徴値を求める演算機構と、
前記更新された第１の情報に前記第２の計算機ノードが担当する第２のバーテックスが含まれている場合、前記第１の計算機ノードが、前記更新された第１のバーテックスに付与された前記特徴値を前記第２の計算機ノードに送る伝播機構、
を含むグラフデータ演算システム。
（付記６）
前記変換配備機構は、第１の計算機ノードにおいて、前記第１の計算機ノードが担当するバーテックスを始点とする第３のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第３の情報と、前記第１の計算機ノードが担当するバーテックスに入ってくる第４のエッジの始点である前記複数のバーテックスの一つである参照元バーテックスと前記第２のエッジに付与されている重みと前記第２のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第４の情報に分解する、付記５に記載のグラフデータ演算システム。
（付記７）
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスと前記複数の計算機ノードの対応を示す表を参照して特定する演算用ノードディレクトリサーバ、
を含む付記５または６に記載のグラフデータ演算システム。
（付記８）
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスの識別子と前記複数の計算機ノードの対応を示す表を参照して特定するＤＮＳサーバ、
を含む付記１または２に記載のグラフデータ演算システム。
（付記９）
複数のバーテックスの各々に付与される特徴値を要素とするベクトルである特徴値ベクトルを、バーテックス間を結ぶエッジの向きと前記エッジに付与される重みに関する情報を含む重み行列を用いて、少なくとも第１の計算機ノードおよび第２の計算機ノードを含む複数の計算機ノードによって計算するグラフデータ演算プログラムであって、
前記重み行列を、前記複数のバーテックスの一つである第１のバーテックスから出ている第１のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のバーテックス付与された前記特徴値に関する第１の情報と、前記複数のバーテックスの一つである第２のバーテックスに入ってくる第２のエッジの始点のバーテックスである参照元バーテックスと前記第２のエッジに付与されている重みと前記参照元バーテックス付与された前記特徴値に関する第２の情報に分解させ、
前記複数のバーテックスの個数が変化したとき、前記第１の情報および前記第２の情報を更新し、更新された第１の情報および更新された第２の情報を得させと、
前記第１の計算機ノードが、第１のバーテックスに付与された前記特徴値を更新するために、前記更新された第２の情報を参照して演算を行い、更新された第１のバーテックスに付与された特徴値を求めさせと、
前記更新された第１の情報に前記第２の計算機ノードが担当する第２のバーテックスが含まれている場合、前記第１の計算機ノードが、前記更新された第１のバーテックスに付与された前記特徴値を前記第２の計算機ノードに送らせること、
処理をコンピュータに実行させることを特徴とするグラフデータ演算プログラム。
（付記１０）
前記重み行列を分解することは、第１の計算機ノードにおいて、前記第１の計算機ノードが担当するバーテックスを始点とする第３のエッジの終点のバーテックスである宛先バーテックスと前記第１のエッジに付与されている重みと前記第１のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第３の情報と、前記第１の計算機ノードが担当するバーテックスに入ってくる第４のエッジの始点である前記複数のバーテックスの一つである参照元バーテックスと前記第２のエッジに付与されている重みと前記第２のエッジの始点である前記複数のバーテックスの一つ付与された前記特徴値に関する第４の情報に分解する処理をコンピュータに実行させることを特徴とする、付記９に記載のグラフデータ演算プログラム。
（付記１１）
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスと前記複数の計算機ノードの対応を示す表を参照して特定させる、
処理をコンピュータに実行させることを特徴とする、付記９または１０に記載のグラフデータ演算プログラム。
（付記１２）
さらに、
前記複数のバーテックスの一つを担当する前記複数の計算機ノードの一つを、前記複数のバーテックスの識別子と前記複数の計算機ノードの対応を示す表を参照して特定させる、
処理をコンピュータに実行させることを特徴とする、付記９または１０に記載のグラフデータ演算プログラム。
【符号の説明】
【０２２６】
１００  変換配備機構
３００、３５０、３６０  計算機ノード（演算用ノード）
３０２  演算機構
３１６  受信機構
３１８  伝播機構
【図１】
2015215826.tif 000022
【図２Ａ】
2015215826.tif 000023
【図２Ｂ】
2015215826.tif 000024
【図２Ｃ】
2015215826.tif 000025
【図３Ａ】
2015215826.tif 000026
【図３Ｂ】
2015215826.tif 000027
【図３Ｃ】
2015215826.tif 000028
【図３Ｄ】
2015215826.tif 000029
【図４】
2015215826.tif 000030
【図５Ａ】
2015215826.tif 000031
【図５Ｂ】
2015215826.tif 000032
【図５Ｃ】
2015215826.tif 000033
【図５Ｄ】
2015215826.tif 000034
【図６】
2015215826.tif 000035
【図７】
2015215826.tif 000036
【図８】
2015215826.tif 000037
【図９】
2015215826.tif 000038
【図１０】
2015215826.tif 000039
【図１１】
2015215826.tif 000040
【図１２】
2015215826.tif 000041
【図１３】
2015215826.tif 000042
【図１４】
2015215826.tif 000043
【図１５】
2015215826.tif 000044
【図１６】
2015215826.tif 000045
【図１７】
2015215826.tif 000046
【図１８】
2015215826.tif 000047
【図１９】
2015215826.tif 000048
【図２０】
2015215826.tif 000049
【図２１】
2015215826.tif 000050
【図２２】
2015215826.tif 000051
【図２３】
2015215826.tif 000052
【図２４】
2015215826.tif 000053
【図２５】
2015215826.tif 000054
【図２６】
2015215826.tif 000055