(57)【特許請求の範囲】
【請求項１】
モンテカルロシミュレーションを用いたシミュレーションを複数のコンピュータで分散処理して行うシステムであって、
上記モンテカルロシミュレーションのシミュレーション回数を分割して上記複数のコンピュータに割り当て、上記シミュレーションに用いる算術乱数を各コンピュータで発生させる手段と、
上記複数のコンピュータのそれぞれに割り当てるシミュレーション回数を、各コンピュータでの算術乱数発生処理時間を含むシミュレーション処理時間が均一化するよう算出する手段とを有し、
該シミュレーション回数を算出する手段は、
シミュレーション１回分の算術乱数の発生処理時間Ｔｒと、該算術乱数の発生処理時間Ｔｒを含むシミュレーション１回の処理時間Ｔｍとを測定し、
測定した上記シミュレーション１回分の算術乱数発生処理時間Ｔｒと上記シミュレーション１回の処理時間Ｔｍ、および、プロセス数Ｐとシミュレーション回数Ｓａを用いて、下記の式に基づき、プロセスｐ（１≦ｐ≦Ｐ）に割り当てるシミュレーション回数Ｓｐを算出することを特徴とするモンテカルロシミュレーション並列処理システム。
Ｓｐ＝Ｓａ×｛（Ｔｍ−Ｔｒ）／Ｔｍ｝ｐ−１／Σ｛（Ｔｍ−Ｔｒ）／Ｔｍ｝ｉ…（ｉ＝０〜Ｐ−１）
【請求項２】
モンテカルロシミュレーションを用いたシミュレーションを複数のプロセスで分散処理して行うシステムの並列処理方法であって、
プログラムされたコンピュータ処理手段として、乱数発生処理手段と並列処理制御手段を具備し、
上記乱数発生処理手段は、
上記モンテカルロシミュレーションのシミュレーション回数を分割して上記複数のプロセスに割り当て、上記シミュレーションに用いる算術乱数を各プロセスで発生させる手順を実行し、
上記並列処理制御手段は、
上記複数のプロセスのそれぞれに割り当てるシミュレーション回数を、各プロセスでの算術乱数発生処理時間を含むシミュレーション処理時間が均一化するよう算出する手順を実行すると共に、該シミュレーション回数を算出する手順として、
シミュレーション１回分の算術乱数の発生処理時間Ｔｒと、該算術乱数の発生処理時間Ｔｒを含むシミュレーション１回の処理時間Ｔｍとを測定し、
測定した上記シミュレーション１回分の算術乱数発生処理時間Ｔｒと上記シミュレーション１回の処理時間Ｔｍ、および、プロセス数Ｐとシミュレーション回数Ｓａを用いて、下記の式に基づき、プロセスｐ（１≦ｐ≦Ｐ）に割り当てるシミュレーション回数Ｓｐを算出することを特徴とするモンテカルロシミュレーション並列処理方法。
Ｓｐ＝Ｓａ×｛（Ｔｍ−Ｔｒ）／Ｔｍ｝ｐ−１／Σ｛（Ｔｍ−Ｔｒ）／Ｔｍ｝ｉ…（ｉ＝０〜Ｐ−１）
【請求項３】
コンピュータに、請求項２に記載のモンテカルロシミュレーション並列処理方法における各手順を実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、モンテカルロシミュレーションを並列処理化する技術に係わり、特に、モンテカルロシミュレーションによる金融リスク計量等を高速処理化するのに好適なモンテカルロシミュレーション並列処理技術に関するものである。
【０００２】
【従来の技術】
現在、例えば金融機関において、コンピュータを用いて金融リスクを計量化する技術としてモンテカルロシミュレーションが使用されている。このモンテカルロシミュレーションとは、乱数を使用したシミュレーションのことである。
【０００３】
このモンテカルロシミュレーションを金融リスク計量化にどのように使用するかを以下に説明する。
【０００４】
まず、乱数を発生させ、次に、その乱数により、コンピュータにおいて、将来の信用格付変動、金利変動、為替変動、株価変動を予測計算し、損失額を算出する。さらに、この処理を多数回（数千回〜数万回）繰り返す。そして、算出した損失額を額の多い順にソートし、最大損失額を割り出す。
【０００５】
この最大損失額は最悪の状況下で発生し得る損失額を意味し、割り出した最大損失額を考慮して、保有資産内容や取引内容を見直すことができる。この最大損失額の割り出しには、通常は「９９％点〜９５％点」を使用する。
【０００６】
「９９％点」は、例えばシミュレーション回数を１万回とすると、額の多いほうから１００番目（１万回×１％）の損失額を指す。このことは、９９％の確率で、現実の損失額が予測した９９％点の額内に収まるはずであることを意味する。「９５％点」についても同様である。
【０００７】
ところで近年、より悪い条件下での損失額を予測しようとして「９９．９％点」を使用しようとする動きがある。しかし、シミュレーション回数が数万回程度では、その数万回の内、数回しか「９９．９％点」付近で発生しない。この場合、使用する乱数によって、「９９．９％点」の損失額が大きくぶれる。
【０００８】
これに対処して、「９９．９％点」の損失額を精緻に予測するためには、コンピュータでのシミュレーション回数を数百万回まで増やす必要がある。
【０００９】
また、従来のコンピュータによる金融リスク計量化は、信用リスクと金利リスクおよび為替リスクのそれぞれを個別に計量化するもので、信用リスクと金利リスク等の複合リスクには対応していないことが多い。
【００１０】
しかし現実には、「日本円下落」と「国内企業信用格付下落」さらに「国内金利上昇」が同時に起きることもあり得るので、複合リスクへの対応は不可欠である。
【００１１】
以上のとおり、モンテカルロシミュレーションを使ったコンピュータによる金融リスク計量化においては、シミュレーション回数の増加と複合リスクへの対応が不可欠である。
【００１２】
しかし、シミュレーション回数の増加と複合リスクへの対応は、コンピュータでの計算量の増加、処理時間の増加をもたらす。
【００１３】
このような問題に対処して、処理時間短縮を図るための従来技術として、（Ａ）取引明細と保有債権を分割して並列処理化する技術や、（Ｂ）シミュレーション回数で分割して、将来の信用格付変動、金利変動、為替変動、株価変動の予測、損失額算出を並列処理化する技術（尚、この技術では、乱数発生処理は１台のコンピュータで行う）がある。
【００１４】
しかし、これらの技術には、それぞれ下記の問題点がある。
【００１５】
従来技術（Ａ）においては、各並列プロセス毎に算出した損失額を、最終的には１プロセスに転送して集計する必要がある。この場合、並列度を上げるに従って、転送されるデータ量が増加するので、データ転送が処理性能上のボトルネックになる。特に、プロセス間のデータ転送を、直接プロセス間で行わず、データベースを介するシステムにおいては、致命的なボトルネックとなる。
【００１６】
これに対して、従来技術（Ｂ）においては、各並列プロセスが全取引明細および全保有債権を処理するので、各並列プロセス毎に算出した損失額を、最終的に、１プロセスに転送する必要がない。しかし、この技術では、使用する乱数が多くなると、乱数発生、転送がボトルネックとなる。
【００１７】
なぜなら、この技術（Ｂ）においては、乱数発生に１台しかコンピュータを割り当ておらず、このコンピュータで発生させた乱数を各コンピュータに転送しなくてはならないからである。
【００１８】
【発明が解決しようとする課題】
解決しようとする問題点は、従来の技術では、モンテカルロシミュレーションを使って例えば金融リスク計量化を並列処理化する場合、高速化のボトルネックとなるデータ転送を回避することができない点である。
【００１９】
本発明の目的は、これら従来技術の課題を解決し、モンテカルロシミュレーションを使った並列処理化を高速化して、例えば、金融リスク計量化のシミュレーション回数の増加および複合リスクへの対応を可能とし、コンピュータを用いた金融リスク計量化における予測精度を向上させることである。
【００２０】
【課題を解決するための手段】
上記目的を達成するため、本発明では、モンテカルロシミュレーションをシミュレーション回数で分割する際、乱数発生も含めて並列処理化する。すなわち、各並列処理プロセスにおいて乱数を発生させる。さらに、この際、単純な分割であれば、例えば、第１プロセスでシミュレーション回数１〜５０万回を分担し、第２プロセスでシミュレーション回数５０万１〜１００万回を分担することになるが、この場合、第２プロセスでは１〜５０万回分の乱数も発生させることになるので、本発明では、このような第２プロセスにおいては余分に乱数を発生させる処理時間を考慮して、例えば、第１プロセスでシミュレーション回数１〜６０万回を分担し、第２プロセスでシミュレーション回数６０万１〜１００万回を分担するようにする。このように、各プロセスにおいて余分に乱数を発生させる処理時間を考慮して、各並列処理プロセスで分担するシミュレーション回数を調整することにより、各並列処理プロセス間の処理時間が均一化し、全体の処理時間をさらに短縮することができる。
【００２１】
【発明の実施の形態】
以下、本発明の実施の形態を、図面により詳細に説明する。
図１は、本発明に係わるモンテカルロシミュレーション並列処理システムの構成例を示すブロック図であり、図２は、図１におけるモンテカルロシミュレーション並列処理システムの本発明に係わる処理手順例を示すフローチャート、図３は、図１における各サーバ機のハードウェア構成例を示すブロック図である。
【００２２】
図３において、３１はＣＲＴ（Cathode Ray Tube）やＬＣＤ（Liquid Crystal Display）等からなる表示装置、３２はキーボードやマウス等からなる入力装置、３３はＨＤＤ（Hard Disk Drive）等からなる外部記憶装置、３４はＣＰＵ（Central Processing Unit）３４ａや主メモリ３４ｂおよび入出力インタフェース３４ｃ等を具備してコンピュータ処理を行なう情報処理装置、３５は本発明に係わるプログラムやデータを記録したＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）もしくはＤＶＤ（Digital Video Disc/Digital Versatile Disc）等からなる光ディスク、３６は光ディスク３５に記録されたプログラムおよびデータを読み出すための駆動装置、３７はＬＡＮ（Local Area Network）カード等からなる通信装置である。
【００２３】
光ディスク３５に格納されたプログラムおよびデータを情報処理装置３４により駆動装置３６を介して外部記憶装置３３内にインストールした後、外部記憶装置３３から主メモリ３４ｂに読み込みＣＰＵ３４ａで処理することにより、情報処理装置３４内に図１に示す各サーバの各機能が構成される。
【００２４】
図１において、１はクライアント機、１１はサーバ１号機、１２はサーバ２号機であり、本例のシステムのオペレータは、クライアント機１を介して、シミュレーションの指示操作を行い、サーバ１号機１１とサーバ２号機１２においては、クライアント機１から指示されたシミュレーションを並列処理する。
【００２５】
本例においては、クライアント機１には、並列処理制御部１ａとソート処理部１ｂ、データベース（図中「取引明細、保有債権のデータベース」と記載）１ｃ、データベース（図中「損失額のデータベース」と記載）１ｄ、入力装置１ｅ、表示装置１ｆが設けられており、サーバ１号機１１とサーバ２号機１２には、第１プロセス１１ａと第２プロセス１２ａ（図中「モンテカルロシミュレーション並列処理  第１，第２プロセス」と記載）が実装される。
【００２６】
このような構成において、本例のシステムでは、モンテカルロシミュレーションをシミュレーション回数で分割するが、従来技術の（Ｂ）で説明した技術とは異なり、乱数発生も含めて並列処理化する。
【００２７】
つまり、従来技術（Ｂ）では、１プロセス（例えば、クライアント機１）で乱数発生をさせ、発生させた乱数を、各並列処理プロセス（例えば、サーバ１号機１１とサーバ２号機１２）に転送していたが、本例では、各並列処理プロセス、すなわち、サーバ１号機１１とサーバ２号機１２において乱数を発生させる。
【００２８】
この場合、例えば、サーバ１号機の第１プロセス１１ａでシミュレーション回数１〜５０万回を分担し、サーバ２号機の第２プロセス１２ａでシミュレーション回数５０万１〜１００万回を分担した場合、第２プロセス１１ａは１〜５０万回分の乱数も発生させることになる。
【００２９】
これは、現在の金融機関等においてのモンテカルロシミュレーションでは、物理乱数を使わず、算術乱数（擬似乱数）を使用することが多いことと関係する。
【００３０】
すなわち、そもそも算術乱数は、ランダムな物理現象（例：サイコロ）を利用して発生させる物理乱数と異なり、前回の乱数を算術式に代入して、新たな乱数を発生させるというものである。従って、算術乱数では、第２のプロセス１２ａにおいて、１〜５０万回分の乱数を発生させないと、５０万１回以降の乱数を算出できない。
【００３１】
しかし、このように、５０万回分の乱数を余分に発生させるほうが、従来技術（Ｂ）のように５０万回分の乱数を転送するよりも、全体としての処理時間は短くなる。
【００３２】
さらに、本例では、このように、乱数の発生処理を並列化するだけではなく、第２プロセス１２ａにおいて余分に乱数を発生させる処理時間を考慮して、第１プロセス１１ａと第２プロセス１２ａで分担するシミュレーション回数を調整することにより、第１，第２プロセス１１ａ，１２ａ間の処理時間を均一化し、システム全体の処理時間の短縮を図っている。以下、その説明を行う。
【００３３】
上述したように、各並列処理プロセス（サーバ１号機１１とサーバ２号機１２の第１，第２プロセス１１ａ，１２ａ）に均等にシミュレーション回数を割り振ると、サーバ２号機１２における第２プロセス１２ａにおいては、余分に乱数を発生させているので、サーバ１号機１１における第１プロセス１１ａとの処理時間に差が生じる。
【００３４】
ここで、システム全体でのシミュレーションの処理時間を考えると、各並列処理プロセスの処理時間の内、最も長い処理時間がシステム全体での処理時間となる。従って、各並列処理プロセスの処理時間の差が大きい場合、シミュレーションの全体の処理時間を効果的に短縮できず、その結果、並列処理化の効率を最大限まで発揮できない。
【００３５】
各並列処理プロセスの処理時間の差が大きい場合として、第１に、高度な算術式の乱数を使用しているため、シミュレーション処理時間における乱数発生処理時間の割合が大きい場合が想定できる。
【００３６】
また、第２に、更なる高速化を狙って、サーバの台数を増やし並列度を上げた場合も想定できる。すなわち、このように並列度を上げると、最後の並列処理プロセスにおいて余分に発生させる乱数の個数が多くなり、その分の乱数発生処理時間が増加するため、各並列処理プロセスの処理時間の差が大きくなる。
【００３７】
このような問題に対処するためには、各並列処理プロセスの処理時間を均一にすることが有効である。
【００３８】
そこで本例では、このように余分に乱数を発生させる処理時間を考慮して、サーバ１号機１１における第１プロセス１１ａとサーバ２号機１２における第２プロセス１２ａのそれぞれで分担するシミュレーション回数を調整する。
【００３９】
例えば、本例では、サーバ１号機１１における第１プロセス１１ａでシミュレーション回数１〜６０万回、サーバ２号機１２における第２プロセス１２ａでシミュレーション回数６０万１〜１００万回を分担する。
【００４０】
これにより、サーバ１号機１１における第１プロセス１１ａとサーバ２号機１２における第２プロセス１２ａ間の処理時間が均一化し、システム全体の処理時間をさらに短縮することができる。
【００４１】
以下、図１を用いて、このような処理動作を説明する。
【００４２】
まず、クライアント機１において、例えばオペレータの操作に基づき入力装置１ｅから実行要求（モンテカルロシミュレーション実効要求）が並列処理制御部１ａに対して出力されると、並列処理制御部１ａが、各並列処理プロセス（サーバ１号機１１の第１プロセス１１ａとサーバ２号機１２の第２プロセス１２ａ）毎に分担すべきシミュレーション回数を算出し、各並列処理プロセスに指示を出す。
【００４３】
このようにして、クライアント機１の並列処理制御部１ａからの指示を受けた各並列処理プロセス（サーバ１号機１１の第１プロセス１１ａとサーバ２号機１２の第２プロセス１２ａ）は、まず、クライアント機１のデータベース１ｃから、全取引明細や全保有債権分のデータを取得する。
【００４４】
次に、各並列処理プロセス、すなわち、サーバ１号機１１の第１プロセス１１ａとサーバ２号機１２の第２プロセス１２ａは、余分な乱数発生処理部１１ｂ，１２ｂにおいて、分担するシミュレーションで使用する乱数の直前の乱数までを発生させる。
【００４５】
さらに、乱数発生処理部１１ｃ，１２ｃにおいて、余分な乱数発生処理部１１ｂ，１２ｂで既に発生させた乱数以降の乱数を、シミュレーション１回分発生させ、その後、予測部１１ｄ，１２ｄにおいて、乱数発生処理部１１ｃ，１２ｃで発生させた乱数をもとに、将来の格付変動や金利変動、為替変動、株価変動等の予測をする。
【００４６】
そして、損失額算出部１１ｅ，１２ｅにおいて、予測部１１ｄ，１２ｄで予測した将来の格付変動、金利変動、為替変動、株価変動をもとに、損失額を算出し、算出した損失額を、クライアント機１のデータベース１ｄに出力する。
【００４７】
尚、サーバ１号機１１の第１プロセス１１ａとサーバ２号機１２の第２プロセス１２ａは、乱数発生処理部１１ｃ，１２ｃと予測部１１ｄ，１２ｄおよび損失額算出部１１ｅ，１２ｅのそれぞれによる処理、並びに、クライアント機１のデータベース１ｄへの書き出し処理を、開始シミュレーション回数から終了シミュレーション回数分、実行する。
【００４８】
クライアント機１では、ソート処理部１ｂにより、サーバ１号機１１とサーバ２号機１２からの出力が完了したデータベース１ｄを損失額でソートして、その最大損失額を求め、表示装置１ｆで表示する。
【００４９】
以下、このような動作を図２を用いて説明する。尚、この図２では、図１における構成、すなわち、サーバ１号機１１とサーバ２号機１２の２台の第１，第２プロセス１１ａ，１２ａに限らない、複数の各並列処理プロセスｐ（１≦ｐ≦Ｐ）に対し、分担すべきシミュレーション回数を指示する内容とする。
【００５０】
まず、ステップ２０１において、シミュレーション１回分の乱数発生処理時間Ｔｒと、シミュレーション１回の処理時間Ｔｍ（乱数発生処理時間を含む）を取得する。尚、これらの値は予め測定しておく。
【００５１】
次に、ステップ２０２において、並列処理プロセス数Ｐと、シミュレーション回数Ｓａを取得し、ステップ２０３において、シミュレーション１回の処理時間Ｔｍ（乱数発生処理時間を含む）、シミュレーション１回分の乱数発生処理時間Ｔｒ、並列処理プロセス数Ｐ、シミュレーション回数Ｓａから、並列処理プロセスｐ（１≦ｐ≦Ｐ）が分担すべきシミュレーション回数Ｓｐを、次の数式により算出する。
【００５２】
【数１】
0004032339.tif 000002
【００５３】
このようにして、各並列処理プロセス間の処理時間が均一となるシミュレーション回数Ｓｐが求められ、このようにして求めた各並列処理プロセスｐ（１≦ｐ≦Ｐ）が分担すべきシミュレーション回数Ｓｐから、各並列処理プロセス毎の開始シミュレーション回数と終了シミュレーション回数を算出し、各並列処理プロセスに処理要求を出す（ステップ２０４〜２０９）。
【００５４】
例えば、１番目のプロセスに対しては、開始シミュレーション回数「１」〜終了シミュレーション回数「Ｓ１」を実行するよう指示し（ステップ２０６）、ｐ番目（１＜ｐ＜Ｐ）のプロセスに対しては、「前プロセスの終了シミュレーション回数＋１」からなる開始シミュレーション回数〜「前プロセスの終了シミュレーション回数＋Ｓｐ」からなる終了シミュレーション回数を実行するよう指示し（ステップ２０７）、Ｐ番目のプロセスに対しては、「前プロセスの終了シミュレーション回数＋１」からなる開始シミュレーション回数〜終了シミュレーション回数「Ｓａ」を実行するよう指示する（ステップ２０８）。
【００５５】
このようにして、余分な乱数発生にかかる処理時間を考慮し、各並列処理プロセスが分担するシミュレーション回数を調整する。
【００５６】
以上、図１〜図３を用いて説明したように、本例では、モンテカルロシミュレーションをシミュレーション回数で分割する際、乱数発生も含めて並列処理化する。すなわち、サーバ１号機１１とサーバ２号機のそれぞれの並列処理プロセス（第１，第２プロセス１１ａ，１２ａ）において乱数を発生させる。さらに、この際、単に、第１プロセス１１ａでシミュレーション回数１〜５０万回を分担し、第２プロセス１２ａでシミュレーション回数５０万１〜１００万回を分担するといった単純な均等分割でなく、第２プロセス１２ａにおいて余分に乱数を発生させる処理時間を考慮して、第１，第２の各プロセス１１ａ，１２ａで分担するシミュレーション回数を調整する。本例では、第１プロセス１１ａでシミュレーション回数１〜６０万回を分担し、第２プロセス１２ａでシミュレーション回数６０万１〜１００万回を分担する。
【００５７】
このように、第２のプロセス１２ａにおいて余分に乱数を発生させる処理時間を考慮して、各並列処理プロセスで分担するシミュレーション回数を調整することにより、第１，第２の各プロセス１１ａ，１２ａ間の処理時間が均一化し、システム全体の処理時間をさらに短縮することができる。
【００５８】
本例の技術を、例えば、モンテカルロシミュレーションを使った金融リスク計量化の並列処理化に適用することにより、その金融リスク計量化の並列処理化をさらに効果的に行うことができるので、金融リスクシミュレーションの高精度化に必要な、シミュレーション回数の増加や複合リスクへの対応が可能となる。
【００５９】
尚、本発明は、図１〜図３を用いて説明した例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。例えば、本例では、並列処理制御部１ａをクライアント機１側に搭載する構成としているが、並列処理制御部１ａをサーバ１号機１１もしくはサーバ２号機１２のいずれかの１台に搭載しても良い。
【００６０】
また、本例では、金融リスク計量化システムを中心に説明してきたが、他のモンテカルロシミュレーションを使用したシステムの高速化にも適用可能である。
【００６１】
また、本例では、クライアント機およびサーバ機の構成として図２のコンピュータ構成例を示したが、キーボードや光ディスクの駆動装置の無いコンピュータ構成としても良い。また、本例では、光ディスクを記録媒体として用いているが、ＦＤ（Flexible Disk）等を記録媒体として用いることでも良い。また、プログラムのインストールに関しても、通信装置を介してネットワーク経由でプログラムをダウンロードしてインストールすることでも良い。
【００６２】
【発明の効果】
本発明によれば、モンテカルロシミュレーションを使った並列処理化を高速化することができ、例えば、金融リスク計量化のシミュレーション回数の増加および複合リスクへの対応が可能となり、コンピュータを用いた金融リスク計量化における予測精度を向上させることが可能である。
【図面の簡単な説明】
【図１】本発明に係わるモンテカルロシミュレーション並列処理システムの構成例を示すブロック図である。
【図２】図１におけるモンテカルロシミュレーション並列処理システムの本発明に係わる処理手順例を示すフローチャートである。
【図３】図１における各サーバ機のハードウェア構成例を示すブロック図である。
【符号の説明】
１：クライアント機、１ａ：並列処理制御部、１ｂ：ソート処理部、１ｃ：データベース（「取引明細、保有債権のデータベース」）、１ｄ：データベース（「損失額のデータベース」）、１ｅ：入力装置、１ｆ：表示装置、１１：サーバ１号機、１２：サーバ２号機、１１ａ：第１プロセス、１２ａ：第２プロセス、１１ｂ，１２ｂ：余分な乱数発生処理部、１１ｃ，１２ｃ：乱数発生処理部、１１ｄ，１２ｄ：予測部、１１ｅ，１２ｅ：損失額算出部、３１：表示装置、３２：入力装置、３３：外部記憶装置、３４：情報処理装置、３４ａ：ＣＰＵ、３４ｂ：主メモリ、３４ｃ：入出力インタフェース、３５：光ディスク、３６：駆動装置、３７：通信装置。
【図１】
0004032339.tif 000003
【図２】
0004032339.tif 000004
【図３】
0004032339.tif 000005