(57)【要約】【課題】エンティティに対して入力されたコマンドが原因となって発生するシミュレーション停止を防止することのできる分散シミュレーションシステムを得る。【解決手段】ＣＰＸフェデレート３０−１〜３０−ｎは、シミュレーションを分散して実行する。コマンド入力フェデレート１０は、コマンド入力を受けて、コマンドをＣＰＸフェデレート３０−１〜３０−ｎに出力する前にコマンド検査フェデレート２０−１〜２０−ｍに出力する。コマンド検査フェデレート２０−１〜２０−ｍは、将来の時刻のシミュレーションを投機的に実行してコマンドによる障害発生の検査を行う。コマンド入力フェデレート１０は、コマンド検査フェデレート２０−１〜２０−ｍで障害が発生した場合は、入力されたコマンドによる障害発生を表示する。【選択図】図３
2015201086.tif 000002
【特許請求の範囲】
【請求項１】
シミュレーションエンティティに対するコマンド入力に応じてリアルタイムにシミュレーションを実行する分散シミュレーションシステムにおいて、
前記シミュレーションを分散して実行するコマンド実行シミュレータと、
前記コマンド実行シミュレータと同じシミュレーションを実行し、コマンドを実行したことによる障害が発生するか否かを検査するコマンド検査シミュレータと、
前記コマンド入力を受けて、当該コマンドを前記コマンド実行シミュレータに出力する前に前記コマンド検査シミュレータに出力し、当該コマンド検査シミュレータによる障害発生の有無を示す情報を取得するコマンド処理部とを備えた分散シミュレーションシステム。
【請求項２】
前記コマンド検査シミュレータは、前記コマンド実行シミュレータと時刻同期を行って、当該コマンド実行シミュレータと同じ時刻までのシミュレーションの同一性を確保すると共に、いずれかのコマンドが与えられた場合は、当該コマンドに基づく前記コマンド実行シミュレータよりも将来の時刻のシミュレーションを投機的に実行することで、前記コマンドによる障害発生の検査を行うことを特徴とする請求項１記載の分散シミュレーションシステム。
【請求項３】
前記コマンド検査シミュレータは、シミュレーションエンティティへのコマンド入力によるシミュレーションを実行中、異なるシミュレーションエンティティへのコマンド入力を受けた場合、シミュレーションエンティティ毎にシミュレーションを実行することを特徴とする請求項１または請求項２記載の分散シミュレーションシステム。
【請求項４】
前記コマンド処理部は、前記コマンド検査シミュレータにコマンドを出力した後、予め定めた制約時間が経過するまでに、当該コマンド検査シミュレータで障害発生が無いことを確認した場合に、前記コマンドを前記コマンド実行シミュレータに出力することを特徴とする請求項１から請求項３のうちのいずれか１項記載の分散シミュレーションシステム。
【請求項５】
前記コマンド検査シミュレータは、前記制約時間経過後も前記シミュレーションを実行することで、前記コマンド入力の時刻よりも将来の時刻の当該コマンドによる障害発生の検査を行うことを特徴とする請求項４記載の分散シミュレーションシステム。
【請求項６】
前記コマンド検査シミュレータは、シミュレーションエンティティへのコマンド入力によるシミュレーションを実行中、当該実行中のシミュレーションエンティティへの異なるコマンド入力を受けた場合、当該実行中のシミュレーションを破棄し、前記異なるコマンド入力によるシミュレーションを新たに実行することを特徴とする請求項１から請求項５のうちのいずれか１項記載の分散シミュレーションシステム。
【請求項７】
前記コマンド処理部は、前記コマンド検査シミュレータで障害が発生した場合、入力されたコマンドと当該コマンドがシミュレーションにおいて障害の原因となることを表示することを特徴とする請求項１から請求項６のうちのいずれか１項記載の分散シミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＨＬＡ（Ｈｉｇｈ  Ｌｅｖｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）によって規定される分散シミュレーションシステムに関する。
【背景技術】
【０００２】
ＨＬＡは、ＩＥＥＥによって標準化された分散シミュレーションシステムのソフトウェアアーキテクチャである。
図１は、ＨＬＡによって規定される分散シミュレーションシステムの例を示している。図において、１０１はＨＬＡに準拠したシステム全体を示し、フェデレーションと呼ぶ。１０２−１〜１０２−ｎは、システムを構成する個々のシミュレータ等のサブシステムを示し、フェデレートと呼ぶ。１０３は、フェデレーション１０１と複数のフェデレート１０２に対する共通機能を提供する基盤ソフトウェアであり、ＲＴＩ（Ｒｕｎ−Ｔｉｍｅ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）と呼ぶ。１０４−１〜１０４−ｎは、フェデレート１０２−１〜１０２−ｎにおける、ＲＴＩ１０３とのインタフェース機能であり、フェデレートが共通的に保有するフェデレートＲＴＩインタフェース部である。１０５−１〜１０５−ｎは、フェデレート１０２−１〜１０２−ｎにおいて、ＲＴＩインタフェース部１０４−１〜１０４−ｎ以外のフェデレート固有の機能であるフェデレート処理部である。ＲＴＩ１０３が保持しなければならない機能仕様とフェデレートＲＴＩインタフェース部の機能仕様は、非特許文献１に規定されている。
【０００３】
非特許文献１等のＨＬＡ規約に基づいたシミュレーションシステムでは、あるフェデレーションの一機能として作成されたフェデレートを、変更することなく別のフェデレーションで利用することが可能となり、フェデレートの再利用によるシステム構築コストの低減化や、異なる目的のために作成されたフェデレート同士の相互接続性の向上を実現することができる。
【０００４】
非特許文献１には、ＲＴＩがフェデレーションとフェデレートを実行制御するための機能が定義されている。その機能の一つに、多数のフェデレートの実行進捗を論理的なシミュレーション時刻（論理時刻と呼ぶ。）によって時刻同期を行いつつ制御する、Ｔｉｍｅ  Ｍａｎａｇｅｍｅｎｔ機能がある。Ｔｉｍｅ  Ｍａｎａｇｅｍｅｎｔ機能による時刻進行の一例を図２に示す。
【０００５】
図２は、２つのフェデレートがＲＴＩによって時刻同期の実行を管理されている例である。図において、まずフェデレート１における時刻ｔiの処理について説明する。フェデレート１は、時刻ｔiにおける模擬処理を実行し、その処理結果として発生した時刻ｔi+1がＴｉｍｅ  Ｓｔａｍｐ（有効時刻）に設定されたデータ交換メッセージｍｓｇ１を、フェデレート２に送信する。データ交換メッセージの送信は、ＲＴＩの機能であるＵｐｄａｔｅ  Ａｔｔｒｉｂｕｔｅ  Ｖａｌｕｅｓ（ＵＡＶ）の呼び出しによって、ＲＴＩに委託される。フェデレート１は、ｔi時刻における模擬処理およびデータ交換メッセージ送信処理が完了すると、ＲＴＩに対し、次時刻である時刻ｔi+1への時刻進行要求を、ＲＴＩの機能であるＴｉｍｅ  Ａｄｖａｎｃｅ  Ｒｅｑｕｅｓｔ（ＴＡＲ）の呼び出しによって通知する。
【０００６】
次に、フェデレート２の時刻ｔiにおける処理について説明する。フェデレート２も時刻ｔiの模擬処理を実行し、その結果として発生した時刻ｔi+1が有効時刻に設定されたデータ交換メッセージｍｓｇ２をＵＡＶ呼び出しによってＲＴＩに委託し、次時刻である時刻ｔi+1への時刻進行要求を、ＴＡＲ呼び出しによってＲＴＩに通知する。
【０００７】
フェデレート１とフェデレート２がそれぞれ次時刻である時刻ｔi+1への時刻進行要求を通知すると、ＲＴＩは、まず時刻ｔi+1が有効時刻に設定されたデータ交換メッセージｍｓｇ１およびｍｓｇ２をフェデレート２およびフェデレート１に、フェデレートに対するコールバック機能であるＲｅｆｌｅｃｔ  Ａｔｔｒｉｂｕｔｅ  Ｖａｌｕｅｓ（ＲＡＶ）呼び出しによって受信させる。次に、フェデレーション中の全てのフェデレートが時刻ｔi+1以上へ進行要求しているため、シミュレーション全体でのデータの整合性を確保できる最も遅い論理時刻が時刻ｔi+1であることを計算し、フェデレート１とフェデレート２に対し、フェデレートに対するコールバック機能であるＴｉｍｅ  Ａｄｖａｎｃｅ  Ｇｒａｎｔ（ＴＡＧ）呼び出しによって時刻ｔi+1への進行許可を通知する。ここまでの処理によって、フェデレート１およびフェデレート２の時刻同期が完了し、フェデレート１およびフェデレート２は、時刻進行許可された時刻ｔi+1の模擬処理を実行する。なお、フェデレートがＴＡＲを呼び出してＴＡＧを待つ間の状態をＴｉｍｅ  Ａｄｖａｎｃｉｎｇ状態と呼び、ＴＡＧを受けてＴＡＲを出すまでの間の状態をＴｉｍｅ  Ｇｒａｎｔｅｄ状態と呼ぶ。以上の処理を各フェデレートが時刻進行する都度繰り返すことにより、フェデレーション全体の時刻進行が制御される。
【０００８】
なお、図２の処理における時刻は全て論理時刻であり、現実世界における時刻（実時刻と呼ぶ。）と全く無関係に処理される時刻である。論理時刻は、コンピュータプログラムであるフェデレートにおいて模擬処理やデータ交換メッセージ通信の順番を決定するために利用される数値情報であり、複数のフェデレートが並列に模擬処理の実行やデータ交換メッセージ通信を行う場合に、シミュレーション中の全ての模擬処理とデータ交換メッセージ通信が論理時刻によって整列化され順番に処理することを保証するために使用される。論理時刻を用いることにより、多数のフェデレートを多数のコンピュータで並列処理し、シミュレーションを高速化した場合でも、シミュレーションの再現性を保証することができる。
【０００９】
ＨＬＡに基づいたシミュレーションの応用の一つに、指揮官が行う部隊指揮の訓練を目的としたＣＰＸ（Ｃｏｍｍａｎｄ  Ｐｏｓｔ  Ｅｘｅｒｃｉｓｅ）シミュレーションがある。ＣＰＸシミュレーションでは、例えば捜索救難を例にとると、捜索機や救難部隊などがフェデレートにおいて模擬されている（これら模擬物体をエンティティと呼ぶ）。ＣＰＸシミュレーションの実行中は、訓練対象者は、各エンティティの状態を観察し、次にエンティティをどう動かせば良いか（例えば、どのように救難部隊を向かわせればより速く救難できるか）を判断し、エンティティに対しエンティティの次の動作を指示するコマンド入力を行う。ＣＰＸシミュレーションが終了した後、訓練対象者が行ったコマンド入力の結果を解析し、訓練対象者の問題点や改善点の評価を行う。
【００１０】
ＣＰＸシミュレーションは、人間である訓練対象者の状況判断や意思決定の訓練を目的とするため、リアルタイムで実行する必要があるが、エンティティ数が数千にも及ぶ大規模なシミュレーションとなる場合もあるため、ＣＰＸシミュレータには、多数のフェデレートを論理時刻によって実行制御することにより高速化を図った分散シミュレーションシステムが用いられ、論理時刻と実時刻の同期によってリアルタイムに実行される。
【００１１】
ＣＰＸシミュレーションでは、エンティティに対して入力されたコマンドが基となった不具合により、シミュレーションを実行しているシミュレータが障害を起こして停止してしまうような場合がある。なお、コマンド入力直後に、当該コマンドそのものが原因となって不具合が発生する第一のケースの他に、当該コマンドを基にエンティティが模擬処理を進めていった結果、先の時刻になってから不具合が発生する第二のケースもある。第二のケースの具体例として、航空機をエンティティとした航空管制シミュレーションにおいて、訓練者がある航空機に対して進行方向と速度を指定した結果、シミュレータが管理できないシミュレーション中の空域に当該航空機が進行してしまい、不定なメモリ領域等を参照することによって発生するエラー等が挙げられる。エンティティのエラーによってフェデレートが異常終了した場合、他のフェデレートに対して直接の影響は無いが、異常終了したフェデレートが模擬していたエンティティの情報を利用できなくなるため、シミュレーション全体の整合性を保つことができなくなる。そのため、多くのＣＰＸシミュレータでは、このような障害が発生した場合には、シミュレーション全体を停止させるか、異常終了したフェデレートが再起動し、異常終了した論理時刻まで復旧するのを待つような措置をとることになり、訓練に影響を与えることとなる。
【００１２】
システムに対する入力データが原因となるエラーを防止する方法として、例えば特許文献１や特許文献２に示すような方法があった。特許文献１に示されたシステムでは、オンライン端末からのデータ受信時、障害が発生した場合、その障害電文をセンタ側に登録することで、同一電文による同一障害を未然に防ぐようにしていた。また、特許文献２に示された装置では、システムに対する操作とシステム内部情報の履歴を持ち、システム障害の恐れがある場合に操作を計算機に渡すことなく保持し、また、システムの障害発生の兆候が得られた場合に、システム内部情報が所定の状態になるまで操作を取り消すようにしていた。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開平１１−８５６９６号公報
【特許文献２】特開平１０−１０５４４０号公報
【非特許文献】
【００１４】
【非特許文献１】IEEE 1516.1−2010−Standard for Modeling and Simulation High Level Architecture（HLA）−Federate Interface Specification.
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、ＣＰＸシミュレータの場合、訓練対象者の訓練を目的とするため、実行する度に異なるシナリオを実行し、また訓練対象者がコマンド入力するタイミングも不定となることから、シミュレーションに登場するエンティティの種類や環境、コマンドの入力を受け付けた際のエンティティの状態、およびそのエンティティと関連するその他のエンティティの状態等、実行する度に異なるため、次にシミュレーションを実行した際に同じ状況になる可能性は非常に低く、履歴によって障害が発生した状態を管理する方法は有効ではない。
【００１６】
また、シミュレーションの実行中は、時間の進行と共にエンティティの状態が変化することを訓練対象者が観察し状況判断することが訓練の目的の一つであるため、障害の原因となったコマンドが特定できたとしても、そのコマンドを取り消して以前のエンティティの状態に戻すことは、訓練対象者が観察していたエンティティの状態を不自然な形で強制的に変更させることになり、有効ではない。
【００１７】
この発明は上記のような課題を解決するためになされたもので、エンティティに対して入力されたコマンドが原因となって発生するシミュレーション停止を防止することのできる分散シミュレーションシステムを得ることを目的とする。
【課題を解決するための手段】
【００１８】
この発明に係る分散シミュレーションシステムは、シミュレーションエンティティに対するコマンド入力に応じてリアルタイムにシミュレーションを実行する分散シミュレーションシステムにおいて、シミュレーションを分散して実行するコマンド実行シミュレータと、コマンド実行シミュレータと同じシミュレーションを実行し、コマンドを実行したことによる障害が発生するか否かを検査するコマンド検査シミュレータと、コマンド入力を受けて、コマンドをコマンド実行シミュレータに出力する前にコマンド検査シミュレータに出力し、コマンド検査シミュレータによる障害発生の有無を示す情報を取得するコマンド処理部とを備えたものである。
【発明の効果】
【００１９】
この発明の分散シミュレーションシステムは、入力されたコマンドをコマンド実行シミュレータに出力する前にコマンド検査シミュレータに出力し、コマンド検査シミュレータによる障害発生の有無を取得するようにしたので、エンティティに対して入力されたコマンドが原因となって発生するシミュレーション停止を未然に防止することができる。
【図面の簡単な説明】
【００２０】
【図１】ＨＬＡによって規定される分散シミュレーションシステムの例を示す構成図である。
【図２】２つのフェデレートがＲＴＩによって時刻同期の実行を管理されている例を示す説明図である。
【図３】この発明の実施の形態１による分散シミュレーションシステムを示す構成図である。
【図４】この発明の実施の形態１の分散シミュレーションシステムにおける各フェデレートの時間進行の説明図である。
【図５】この発明の実施の形態１の分散シミュレーションシステムにおけるコマンド入力があった場合の各フェデレートの時間進行を示す説明図である。
【図６】この発明の実施の形態２による分散シミュレーションシステムにおける各フェデレートの時間進行の説明図である。
【図７】この発明の実施の形態３による分散シミュレーションシステムにおける各フェデレートの時間進行を示す説明図である。
【図８】この発明の実施の形態４による分散シミュレーションシステムにおける各フェデレートの時間進行を示す説明図である。
【発明を実施するための形態】
【００２１】
実施の形態１．
実施の形態１では、訓練対象者が入力したコマンドを、ＣＰＸシミュレータに渡す前に障害の原因となることを検査し、当該コマンドが障害の原因となる場合には当該コマンドを保留し、訓練対象者に対して通知する例について説明する。
【００２２】
図３は、本発明による訓練用分散シミュレーションシステムの例を示す構成図である。図３のシステムは、ＨＬＡに基づいた構成をとっており、フェデレーション１とＲＴＩ２から構成されている。フェデレーション１は、コマンド入力フェデレート１０と、コマンド検査フェデレート２０−１〜２０−ｍと、ＣＰＸフェデレート３０−１〜３０−ｎを備えている。また、ＲＴＩ２は、図１のＲＴＩ１０３と同様に、フェデレーション１とコマンド入力フェデレート１０、コマンド検査フェデレート２０−１〜２０−ｍ、ＣＰＸフェデレート３０−１〜３０−ｎに対する共通機能を提供する基盤ソフトウェアである。
【００２３】
フェデレーション１におけるコマンド入力フェデレート１０は、訓練対象者が入力したコマンドを受け付けるコマンド処理部であり、コマンド評価処理部１１と警告表示部１２とフェデレートＲＴＩインタフェース部１３を備えている。コマンド評価処理部１１は、コマンド入力フェデレート１０において、訓練対象者から入力されたコマンドを保持し、他のフェデレートにコマンドを送信し、また、コマンド検査フェデレート２０−１〜２０−ｍの状態監視を行う処理部である。警告表示部１２は、コマンド評価処理部１１において、訓練対象者から入力されたコマンドが原因となる障害発生がコマンド検査フェデレート２０−１〜２０−ｍにおいて確認された場合に、訓練対象者に対して警告を表示する表示部である。フェデレートＲＴＩインタフェース部１３は、コマンド入力フェデレート１０におけるＲＴＩ２とのインタフェース機能である。
【００２４】
コマンド検査フェデレート２０−１〜２０−ｍは、コマンド入力フェデレート１０から、訓練対象者が入力したコマンドを受け取り、ＣＰＸフェデレート３０−１〜３０−ｎよりも高速にシミュレーションを実行して、コマンドによる障害が発生しないか検査を行う検査シミュレーションを実行するコマンド検査シミュレータであり、検査シミュレーション部２１−１〜２１−ｍと、フェデレートＲＴＩインタフェース部２２−１〜２２−ｍを備えている。検査シミュレーション部２１−１〜２１−ｍは、コマンド検査フェデレート２０−１〜２０−ｍにおけるシミュレーションを実行する検査シミュレーション実行部である。また、フェデレートＲＴＩインタフェース部２２−１〜２２−ｍは、コマンド検査フェデレート２０−１〜２０−ｍにおけるＲＴＩ２とのインタフェース機能である。
【００２５】
ＣＰＸフェデレート３０−１〜３０−ｎは、コマンド入力フェデレート１０から、訓練対象者が入力したコマンドを受け取り、ＣＰＸシミュレーションを実行するコマンド実行シミュレータであり、ＣＰＸシミュレーション部３１−１〜３１−ｎと、フェデレートＲＴＩインタフェース部３２−１〜３２−ｎを備えている。ＣＰＸシミュレーション部３１−１〜３１−ｎは、ＣＰＸフェデレート３０−１〜３０−ｎにおけるシミュレーションを実行するＣＰＸシミュレーション実行部である。フェデレートＲＴＩインタフェース部３２−１〜３２−ｎは、ＣＰＸフェデレート３０−１〜３０−ｎにおけるＲＴＩ２とのインタフェース機能である。
【００２６】
コマンド検査フェデレート２０−１〜２０−ｍの検査シミュレーション部２１−１〜２１−ｍにおいて実行されるエンティティ（検査エンティティ）は、ＣＰＸフェデレート３０−１〜３０−ｎのＣＰＸシミュレーション部３１−１〜３１−ｎにおいて実行されるエンティティ（ＣＰＸエンティティ）の複製であり、検査エンティティとＣＰＸエンティティは、同じ論理時刻において全く同一の状態を保持する。そのため、シミュレーションの初期化時において、コマンド検査フェデレート２０−１〜２０−ｍとＣＰＸフェデレート３０−１〜３０−ｎは同一のシナリオの読み込みや、同一の乱数シード値の設定を行う。
【００２７】
なお、コマンド検査フェデレート２０−１〜２０−ｍおよびＣＰＸフェデレート３０−１〜３０−ｎは、実行するＣＰＸシミュレーションの規模に応じて、シミュレーションをリアルタイムに実行するのに必要な１以上の数を同時に実行することが可能である。図３では、ＣＰＸシミュレーションを実行するＣＰＸフェデレートがｎ個あるのに対して、より高速な検査シミュレーションを実行する検査コマンド検査フェデレートはｍ個（ｍ＞ｎ）あることを示す。コマンド検査フェデレート２０−１〜２０−ｍとＣＰＸフェデレート３０−１〜３０−ｎの数が異なる場合でも、検査エンティティとＣＰＸエンティティの数や同じ時刻における状態は同一であり、フェデレート毎のエンティティの配分が異なるだけである。
【００２８】
次に、実施の形態１の分散シミュレーションシステムの動作について、図４および図５を用いて説明する。図４は、実時間進行を横軸にとったタイムチャート形式の説明図である。図４では、コマンド入力フェデレート１０、コマンド検査フェデレート２０−１〜２０−ｍ、ＣＰＸフェデレート３０−１〜３０−ｎは離散的な論理時刻進行によって時間進行するため、横軸に論理時刻を示す縦線を入れて説明する。
【００２９】
図４の状況では、シミュレーションは現在、論理時刻のＬＴまで進んだ状態を、時刻ＬＴにおける黒丸（●）で示している。ＣＰＸフェデレート３０−１〜３０−ｎは、通常のＣＰＸシミュレーションと同様にシミュレーション進行に応じて時刻がＬＴまで進んでいる。この状況において、コマンド検査フェデレート２０−１〜２０−ｍは、ＣＰＸエンティティのシミュレーション結果をＣＰＸフェデレート３０−１〜３０−ｎから受信することで、時刻ＬＴにおける検査エンティティの状態をＣＰＸエンティティの状態に一致させている。なお、コマンド入力フェデレート１０は未だ何も入力されていないため、単純に時刻をＬＴに進めただけである。
【００３０】
なお、図４および図４と同様の形式で説明する図５〜図８は、説明を簡単にするために、コマンド検査フェデレート２０−１〜２０−ｍとＣＰＸフェデレート３０−１〜３０−ｎの数を１つにしている。コマンド検査フェデレート２０−１〜２０−ｍとＣＰＸフェデレート３０−１〜３０−ｎが複数の場合であっても、実際の動作は、個々のフェデレートで実行されているエンティティを対象に動作するため、動作している個々のフェデレートを一つの単位として考えることができる。
以下、コマンド検査フェデレート２０−１〜２０−ｍは、単にコマンド検査フェデレート２０と表し、ＣＰＸフェデレート３０−１〜３０−ｎは、ＣＰＸフェデレート３０と表すこととする。ここで、コマンド検査フェデレート２０およびＣＰＸフェデレート３０は、一つまたは複数のコマンド検査フェデレートおよびＣＰＸフェデレートを意味している。
【００３１】
次に、時刻ＬＴのＣＰＸシミュレーションについて、訓練対象者がコマンドの入力を行った場合の動作について、図５を用いて説明する。訓練対象者は、ＣＰＸフェデレート３０によるＣＰＸシミュレーションの状況を観察し、状況判断を行って特定のＣＰＸエンティティ（エンティティＡ）に対するコマンド指示（ＣＭＤ＃１）を行う。通常のＣＰＸシミュレーションでは、このような状況でユーザが入力したコマンドは、次の時刻であるＬＴ＋１において処理される。訓練対象者が入力したコマンドは、コマンド入力フェデレート１０が受信し、そのコマンドが障害を起こすか確認するためにコマンド検査フェデレート２０にコマンドを送信する。コマンドを受け取ったコマンド検査フェデレート２０は、時刻ＬＴの状態を基に、次の時刻（ＬＴ＋１）以降のシミュレーション（コマンド検査シミュレーション）を、実時間と同期せずに投機的に実行する（ＣＭＤ＃１検査シミュレーション）。
【００３２】
図５の状態では、実時間におけるＬＴ＋１以前に、投機的に実行されたＣＭＤ＃１検査シミュレーションがＬＴ＋５まで進んでいる。ここで、ＬＴ＋５においてコマンド検査フェデレート２０において障害が発生し、コマンド検査フェデレート２０が異常終了すると、コマンド入力フェデレート１０は、コマンド検査フェデレート２０の異常終了を検知し、当該コマンドをＣＰＸフェデレート３０に送信せず、警告表示部１２より訓練対象者に対して、入力された当該コマンドの情報（エンティティＡに対するＣＭＤ＃１）は、ＣＰＸシミュレーションにおいて障害の原因となること通知する。通知を受けた訓練対象者は、コマンド指示を保留するか、別のコマンドを指示するかを判断することができる。
【００３３】
なお、コマンドを受け取ったコマンド検査フェデレート２０の投機的実行は、ＨＬＡに基づく分散シミュレーションの場合、ＲＴＩのＴｉｍｅ  Ｍａｎａｇｅｍｅｎｔ機能のうち、Ｆｌｕｓｈ  Ｑｕｅｕｅ  Ｒｅｑｕｅｓｔ（ＦＱＲ）を用いた時刻進行によって実現できる。また、コマンド入力フェデレート１０によるコマンド検査フェデレート２０の異常終了の検知は、ＨＬＡに基づく分散シミュレーションの場合、ＲＴＩ２のＭａｎａｇｅｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ（ＭＯＭ）機能を用いることにより実現できる。また、コマンド検査フェデレート２０が障害によって異常終了した後は、コマンド検査フェデレート２０は再起動し、直ぐに次のコマンド入力に対する検査ができる必要がある。コマンド検査フェデレート２０の再起動時間が問題になる場合には、ＨＬＡのＦｅｄｅｒａｔｉｏｎ  Ｍａｎａｇｅｍｅｎｔ機能を利用することでコマンド検査フェデレート２０を多重化し、対応することも可能である。
【００３４】
また、更なる効果として、コマンド検査フェデレート２０は、コマンド入力時に投機的にコマンド検査シミュレーションを実行する他は、同じ時刻におけるコマンド検査エンティティはＣＰＸエンティティと全く同一の状態を保持するため、コマンド検査フェデレート２０をＣＰＸフェデレート３０のバックアップとして利用することも可能である。すなわち、もし、ＣＰＸフェデレート３０を実行しているハードウェアの障害等、訓練対象者のコマンド入力以外の原因により障害が発生し、ＣＰＸシミュレーションを実行することができなくなった場合は、実行中のコマンド検査フェデレート２０をＣＰＸフェデレート３０として利用することができる。
【００３５】
以上説明したように、実施の形態１の分散シミュレーションシステムによれば、シミュレーションエンティティに対するコマンド入力に応じてリアルタイムにシミュレーションを実行する分散シミュレーションシステムにおいて、シミュレーションを分散して実行するコマンド実行シミュレータと、コマンド実行シミュレータと同じシミュレーションを実行し、コマンドを実行したことによる障害が発生するか否かを検査するコマンド検査シミュレータと、コマンド入力を受けて、コマンドをコマンド実行シミュレータに出力する前にコマンド検査シミュレータに出力し、コマンド検査シミュレータによる障害発生の有無を示す情報を取得するコマンド処理部とを備えたので、シミュレーションエンティティに対して入力されたコマンドが原因となって発生するシミュレーション停止を未然に防止することができる。
【００３６】
また、実施の形態１の分散シミュレーションシステムによれば、コマンド検査シミュレータは、コマンド実行シミュレータと時刻同期を行って、コマンド実行シミュレータと同じ時刻までのシミュレーションの同一性を確保すると共に、いずれかのコマンドが与えられた場合は、コマンドに基づくコマンド実行シミュレータよりも将来の時刻のシミュレーションを投機的に実行することで、コマンドによる障害発生の検査を行うようにしたので、実際のコマンド実行によるシミュレーションで障害が発生する前にその障害発生を検出することができる。
【００３７】
また、実施の形態１の分散シミュレーションシステムによれば、コマンド処理部は、コマンド検査シミュレータで障害が発生した場合、入力されたコマンドとコマンドがシミュレーションにおいて障害の原因となることを表示するようにしたので、コマンド入力者は、そのコマンドを保留するか、別のコマンドを指示するかといった判断を行うことができる。
【００３８】
実施の形態２．
実施の形態２では、訓練対象者が入力したコマンドをＣＰＸフェデレート３０が実行した後で、さらに将来に障害が発生する場合に、障害発生前に訓練対象者に対して通知する例について説明する。分散シミュレーションシステムにおける図面上の構成は図３に示した実施の形態１と同様であるため、図３の構成を用いて説明する。
【００３９】
実施の形態２では、コマンド入力フェデレート１０は、コマンド検査フェデレート２０にコマンドを出力した後、予め定めた制約時間が経過するまでに、コマンド検査フェデレート２０で障害発生が無いことを確認した場合に、そのコマンドをＣＰＸフェデレート３０に出力するよう構成されている。また、コマンド検査フェデレート２０は、制約時間経過後もシミュレーションを実行することで、コマンド入力の時刻よりも将来の時刻のコマンドによる障害発生の検査を行うよう構成されている。その他の構成は実施の形態１と同様であるため、ここでの説明は省略する。
【００４０】
図６は、図５の状況でコマンド検査フェデレート２０においてＬＴ＋５で障害が発生せず、そのまま時間が進んだ状況を示している。図５の状況の後、実時間がＬＴ＋１に近づくと、コマンド入力フェデレート１０はＣＰＸフェデレート３０に対するコマンド送信を保留してコマンド検査を行う時間のタイムアウト（制約時間）を判定する。タイムアウトは、実時間における次時刻のＣＰＸフェデレート３０の模擬開始までの猶予時間（コマンド入力フェデレート１０からＣＰＸフェデレート３０へのコマンド通信時間等を想定し、設定される時間）を基に判定される。
【００４１】
コマンド入力フェデレート１０は、タイムアウトを判定すると、当該コマンドをＣＰＸフェデレート３０に送信し、ＣＰＸフェデレート３０では送信されたコマンドに基づき、ＣＰＸエンティティの処理が実行される。
一方、タイムアウトになってもコマンド検査フェデレート２０において投機的に実行されているＣＭＤ＃１検査シミュレーションをそのまま継続する。図６の状況では、実時間でＬＴ＋１からＬＴ＋２の間の時刻において、ＣＭＤ＃１検査シミュレーションはＬＴ＋１５まで進んでいる。ここで、ＬＴ＋１５においてＣＭＤ＃１検査フェデレートで障害が発生し、コマンド検査フェデレート２０が異常終了すると、コマンド入力フェデレート１０は、コマンド検査フェデレート２０の異常終了を検知し、警告表示部１２より訓練対象者に対して、入力された当該コマンドの情報（エンティティＡに対するＣＭＤ＃１）は、ＣＰＸシミュレーションにおいて、将来時刻（ＬＴ＋１５）に障害の原因となること通知する。通知を受けた訓練対象者は、このままの状態で障害の原因となるエンティティ（エンティティＡ）に対し、エンティティの状態を変更する別のコマンドの指示を判断することができる。
【００４２】
以上説明したように、実施の形態２の分散シミュレーションシステムによれば、コマンド処理部は、コマンド検査シミュレータにコマンドを出力した後、予め定めた制約時間が経過するまでに、コマンド検査シミュレータで障害発生が無いことを確認した場合に、コマンドをコマンド実行シミュレータに出力するようにしたので、制約時間内の障害発生を回避することができる。
【００４３】
また、実施の形態２の分散シミュレーションシステムによれば、コマンド検査シミュレータは、制約時間経過後もシミュレーションを実行することで、コマンド入力の時刻よりも将来の時刻のコマンドによる障害発生の検査を行うようにしたので、コマンド入力時点よりも将来の時刻における障害発生について監視することができる。
【００４４】
実施の形態３．
実施の形態３では、訓練対象者が同じエンティティにコマンドを連続して指定した場合の例について説明する。分散シミュレーションシステムにおける図面上の構成は図３に示した実施の形態１と同様であるため、図３の構成を用いて説明する。
【００４５】
実施の形態３では、コマンド検査フェデレート２０は、シミュレーションエンティティへのコマンド入力によるシミュレーションを実行中、実行中のシミュレーションエンティティへの異なるコマンド入力を受けた場合は、実行中のシミュレーションを破棄して、異なるコマンド入力によるシミュレーションを新たに実行するよう構成されている。その他の構成は実施の形態１と同様であるため、ここでの説明は省略する。
【００４６】
図７は、図６の状況に引き続き、訓練対象者が、同じエンティティに対して別のコマンドを指定した場合の状況を示している。図６の状況では、コマンド検査フェデレート２０におけるコマンド検査シミュレーションは、前時刻において入力されたコマンド（エンティティＡに対するＣＭＤ＃１）に対応するコマンド検査シミュレーションを実行中であり、実時間のＬＴ＋１からＬＴ＋２の間の時刻においてＬＴ＋１５まで進んでいる。図７の状況は、この時点で訓練対象者が、同じエンティティに対する別のコマンド（エンティティＡに対するＣＭＤ＃２）をコマンド入力フェデレート１０に入力し、コマンド入力フェデレート１０はコマンド検査フェデレート２０に当該コマンドを送信した状況を示している。
【００４７】
コマンド検査フェデレート２０は、コマンド検査シミュレーションにおいて検査中のエンティティ（エンティティＡ）の状態が新たなコマンド（ＣＭＤ＃２）によって更新されることを受け、実行中のコマンド検査シミュレーション（ＣＭＤ＃１検査シミュレーション）を破棄し、現在時刻であるＬＴ＋１のシミュレーションの状態を基に、新たにコマンド検査シミュレーション（ＣＭＤ＃２検査シミュレーション）の投機的実行を開始する。
現在時刻であるＬＴ＋１のシミュレーションの状態は、図６に示した通り、既にＣＭＤ＃１が入力された状態であるため、ＣＭＤ＃２検査シミュレーションは、エンティティＡが、時刻ＬＴ＋１におけるＣＭＤ＃１と、時刻ＬＴ＋２におけるＣＭＤ＃２の２つのコマンドを入力された状況をシミュレーションする。
【００４８】
なお、エンティティがＣＭＤ＃１を入力された状態は、次の時刻のＣＭＤ＃２の入力によって上書きされる形になるため、このままのＣＭＤ＃２検査シミュレーションを実行しコマンド検査フェデレート２０が障害を起こした場合に、どちらのコマンドが原因であるか判別することはできない。しかし、［発明が解決しようとする課題］で示した通り、そもそもＣＰＸシミュレーションでは一旦入力したコマンドを後から取り消すことは有効ではないため、障害の原因となるコマンドを判別できなくても問題ない。同じエンティティに対して複数のコマンドが入力されても、１つのコマンド検査シミュレーションを実行することによってコマンド検査が行えるため、コマンド毎に多数のシミュレーションを実行する必要がなく、高速にコマンド検査を行うことができる。図７の状況は、新たに実行されたＣＭＤ＃２検査シミュレーションにより、実時間のＬＴ＋１からＬＴ＋２の間の時刻において、ＬＴ＋４の状態が実行されていることを示している。
【００４９】
以上説明したように、実施の形態３の分散シミュレーションシステムによれば、コマンド検査シミュレータは、シミュレーションエンティティへのコマンド入力によるシミュレーションを実行中、実行中のシミュレーションエンティティへの異なるコマンド入力を受けた場合、実行中のシミュレーションを破棄し、異なるコマンド入力によるシミュレーションを新たに実行するようにしたので、コマンド毎に多数のシミュレーションを実行する必要がなく、高速にコマンド検査を行うことができる。
【００５０】
実施の形態４．
実施の形態４では、訓練対象者が別のエンティティにコマンドを指定した場合の例について説明する。分散シミュレーションシステムにおける図面上の構成は図３に示した実施の形態１と同様であるため、図３の構成を用いて説明する。
【００５１】
実施の形態４では、コマンド検査フェデレート２０は、シミュレーションエンティティへのコマンド入力によるシミュレーションを実行中、異なるシミュレーションエンティティへのコマンド入力を受けた場合、シミュレーションエンティティ毎にシミュレーションを実行するよう構成されている。その他の構成は実施の形態１と同様であるため、ここでの説明は省略する。
【００５２】
図８は、図６の状況に引き続き、訓練対象者が、別のエンティティに対してコマンドを指定した場合の状況を示している。
図６の状況では、コマンド検査フェデレート２０におけるコマンド検査シミュレーションは、前時刻において入力されたコマンド（エンティティＡに対するＣＭＤ＃１）に対応するコマンド検査シミュレーションを実行中であり、実時間のＬＴ＋１からＬＴ＋２の間の時刻においてＬＴ＋１５まで進んでいる。図８の状況は、この時点で訓練対象者が、別のエンティティに対する別のコマンド（エンティティＢに対するＣＭＤ＃３）をコマンド入力フェデレート１０に入力し、コマンド入力フェデレート１０はコマンド検査フェデレート２０に当該コマンドを送信した状況を示している。
【００５３】
コマンド検査フェデレート２０は、コマンド検査シミュレーションにおいて検査中のエンティティ（エンティティＡ）の状態が新たなコマンド（ＣＭＤ＃３）によって更新されないため、実行中のコマンド検査シミュレーション（ＣＭＤ＃１検査シミュレーション）をそのまま実行し、それとは別に、現在時刻であるＬＴ＋１のシミュレーションの状態を基に、新たにコマンド検査シミュレーション（ＣＭＤ＃３検査シミュレーション）の投機的実行を開始する。
【００５４】
現在時刻であるＬＴ＋１のシミュレーションの状態は、図６に示した通り、既にＣＭＤ＃１が入力された状態であるため、ＣＭＤ＃３検査シミュレーションは、エンティティＡが、時刻ＬＴ＋１におけるＣＭＤ＃１を受け、さらにエンティティＢが、時刻ＬＴ＋２におけるＣＭＤ＃３を受けた状況をシミュレーションする。
以上により、コマンド検査フェデレート２０では、エンティティＡがＣＭＤ＃１を受けた状況であるＣＭＤ＃１検査シミュレーションと、エンティティＡがＣＭＤ＃１を受けた状況およびエンティティＢがＣＭＤ＃３を受けた状況の、２つのコマンド検査シミュレーションが同時並行して実行される。なお、２つのコマンド検査シミュレーションのどちらかで障害が発生した場合、コマンド検査フェデレート２０全体が停止することのないように、それぞれのコマンド検査シミュレーションは異なるコマンド検査フェデレート２０で実行する。
【００５５】
図８の状況は、実時間のＬＴ＋１からＬＴ＋２の間の時刻において、ＣＭＤ＃１検査シミュレーションがＬＴ＋１５の状態を実行し、新たに実行されたＣＭＤ＃３検査シミュレーションでＬＴ＋４の状態が実行されていることを示している。この状態で、もしＣＭＤ＃３検査シミュレーションにおいて障害が発生した場合、ＣＭＤ＃３検査シミュレーションよりも先に実行されていたＣＭＤ＃１検査シミュレーションは、既にＣＭＤ＃３検査シミュレーションの障害発生時刻を過ぎているため、ＣＭＤ＃３検査シミュレーションの障害は、ＣＭＤ＃１を実行中のエンティティＡではなく、ＣＭＤ＃３を実行中のエンティティＢにおいて発生したと判断できる。また、もしＣＭＤ＃１検査シミュレーションにおいて障害が発生した場合、ＣＭＤ＃１を実行中のエンティティＡにおいて発生したと判断できる。
この様に、コマンドを受けたエンティティ毎にコマンド検査シミュレーションを並行して実行することにより、障害が発生した場合の発生元となるエンティティを特定することが可能である。
【００５６】
以上説明したように、実施の形態４の分散シミュレーションシステムによれば、コマンド検査シミュレータは、シミュレーションエンティティへのコマンド入力によるシミュレーションを実行中、異なるシミュレーションエンティティへのコマンド入力を受けた場合、シミュレーションエンティティ毎にシミュレーションを実行するようにしたので、複数のシミュレーションエンティティにそれぞれコマンド入力があった場合でも、障害が発生した場合の発生元となるシミュレーションエンティティを特定することができる。
【００５７】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００５８】
１  フェデレーション、２  ＲＴＩ、１０  コマンド入力フェデレート、１１  コマンド評価処理部、１２  警告表示部、１３，２２−１〜２２−ｍ，３２−１〜３２−ｎ  フェデレートＲＴＩインタフェース部、２０−１〜２０−ｍ  コマンド検査フェデレート、２１−１〜２１−ｍ  検査シミュレーション部、３０−１〜３０−ｎ  ＣＰＸフェデレート、３１−１〜３１−ｎ  ＣＰＸシミュレーション部。
【図１】
2015201086.tif 000003
【図２】
2015201086.tif 000004
【図３】
2015201086.tif 000005
【図４】
2015201086.tif 000006
【図５】
2015201086.tif 000007
【図６】
2015201086.tif 000008
【図７】
2015201086.tif 000009
【図８】
2015201086.tif 000010