(57)【特許請求の範囲】
【請求項１】
離散事象によるシミュレーションを行うための複数のシミュレータを備えたシミュレーション装置において、
上記シミュレータ間で転送する転送先情報及びタイミング情報を含んだオブジェクトを登録する転送リストと、
上記転送リストに登録されたオブジェクトの転送先情報及びタイミング情報に基づいて、上記オブジェクトを該当する転送先のシミュレータへ転送するタイミングを制御するタイミング制御手段と、
上記タイミング制御手段により制御されたタイミングで上記オブジェクトを上記該当する転送先のシミュレータへ転送するインタフェース手段と、
シミュレーションの全体を制御する制御手段とを設けたことを特徴とするシミュレーション装置。
【請求項２】
上記複数のシミュレータ全てに共通の時刻情報であるクロック部を更に設け、
上記タイミング制御手段は、上記クロック部の時刻を参照して、上記複数のシミュレータの中で一番最初に実行すべき事象の時刻に系の時刻を進める処理を行うことを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
上記複数のシミュレータ間で移動するオブジェクトは、上記複数のシミュレータで表現される系の間を物が移動する事象に関するオブジェクトであることを特徴とする請求項１に記載のシミュレーション装置。
【請求項４】
上記インタフェース手段は、上記転送リストに登録されたオブジェクトを、転送すべきシミュレータに対して、上記系の間の物の移動時間を考慮した所定の時刻に転送することを特徴とする請求項３に記載のシミュレーション装置。
【請求項５】
上記複数のシミュレータはそれぞれ、上記離散事象によるシミュレーションを行う際に必要なフェーズのうち、時刻を進めるためのフェーズと、事象を起こすためのフェーズとの２つのフェーズに抽象化したクラスを有し、該クラスが、離散系モデルの具体的なシミュレーション手法に対応した子クラスとの間で継承機構を持つようにしたことを特徴とする請求項１〜４の何れか１項に記載のシミュレーション装置。
【請求項６】
上記２つのフェーズに抽象化したクラスのうち、上記事象を起こすためのフェーズは、オブジェクト指向プログラミングの多相性を用いて実現されることを特徴とする請求項５に記載のシミュレーション装置。
【請求項７】
上記複数のシミュレータはそれぞれ、上記抽象化したクラスとは別に、オブジェクトのロードやセーブ行うクラスを有することを特徴とする請求項６に記載のシミュレーション装置。
【請求項８】
離散事象によるシミュレーションを行うためのシミュレーション方法であって、
上記シミュレーションの対象とする系を複数の系に分けてモデル化し、モデル化した複数のシミュレータ間で時刻の同期をとりながら所定のオブジェクトを、オブジェクト自身により指定されている転送先情報及びタイミング情報に従って、転送すべきシミュレータに対して所定の時刻に移動させるようにすることにより、上記複数のシミュレータで１つのシミュレーションを統合的に行うようにしたことを特徴とするシミュレーション方法。
【請求項９】
上記複数のシミュレータ間でとる時刻の同期は、上記複数のシミュレータ全てに共通の時刻情報であるクロック部の時刻を参照して、上記複数のシミュレータの中で一番最初に実行すべき事象の時刻に系の時刻を進める処理であることを特徴とする請求項８に記載のシミュレーション方法。
【請求項１０】
上記複数のシミュレータ間で移動する所定のオブジェクトは、上記複数のシミュレータで表現される系の間を物が移動する事象に関するオブジェクトであることを特徴とする請求項８に記載のシミュレーション方法。
【請求項１１】
上記複数のシミュレータ間で所定のオブジェクトを移動させる際に、あるシミュレータから出力されたオブジェクトを上記系の間の物の移動時間を考慮した所定の時刻に他のシミュレータに転送するようにすることを特徴とする請求項１０に記載のシミュレーション方法。
【請求項１２】
上記複数のシミュレータはそれぞれ、上記離散事象によるシミュレーションを行う際に必要なフェーズのうち、時刻を進めるためのフェーズと、事象を起こすためのフェーズとの２つのフェーズに抽象化したクラスを有し、該クラスが、離散系モデルの具体的なシミュレーション手法に対応した子クラスとの間で継承機構を持つことを特徴とする請求項８〜１１の何れか１項に記載のシミュレーション方法。
【請求項１３】
上記２つのフェーズに抽象化したクラスのうち、上記事象を起こすためのフェーズは、オブジェクト指向プログラミングの多相性を用いて実現されることを特徴とする請求項１２に記載のシミュレーション方法。
【請求項１４】
請求項１に記載のタイミング制御手段、インタフェース手段、及び制御手段としてコンピュータを機能させるシミュレーション用プログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、シミュレーション装置およびその方法、並びにシミュレーションを行うためのプログラムを記録したコンピュータで読み取り可能な記録媒体に関するものである。
【０００２】
【従来の技術】
工場やプラントなどの挙動を模擬するためにシミュレーションが行われることがある。シミュレーションを行うことにより、例えば工場等の稼動効率を予測して、その結果を工程等に反映することで効率の向上を図ることができる。従来、このようなシミュレーションの手法として様々な手法が提案されている。これを大きく分けると、時間的に連続的な挙動を模擬する連続系モデルと、時間的に離散的な挙動を模擬する離散系モデルとがある。連続系モデルは、一定の時間間隔で系の時刻を進めるモデルで系の振舞いをとらえようとするものである。
【０００３】
これに対して離散系モデルは、非定期的に発生する事象を中心に見ることによって系の振舞いをとらえようとするものである。この離散系モデルには、例えば、スリーフェーズアプローチ、イベントアプローチ、アクティビティアプローチなど様々なシミュレーション手法が存在し、それらの手法に応じて、上記事象はアクティビティ或いはイベントと呼ばれる。
【０００４】
上記スリーフェーズアプローチは、時刻の変化によって起こる時間依存のアクティビティ（Boundary Activity ）を実施するフェーズ（以下、Ｂフェーズと呼ぶ）と、系の状況変化によって起こる系依存のアクティビティ（Conditional Activity）を実施するフェーズ（以下、Ｃフェーズと呼ぶ）と、系の時刻を進めるフェーズ（以下、Ａフェーズと呼ぶ）とを有し、Ｂ→Ｃ→Ａの順に各フェーズを繰り返し実施することにより、離散事象のシミュレーションを実行する。
【０００５】
例えば、洗車場で車を洗うという作業を考えた場合、洗車が１０分で終わるとすると、「洗車を開始してから１０分経ったときに洗車場から車を出す」という事象は系の時刻変化に応じて行うことであるので、Boundary Activity （Ｂフェーズ）と考えることができる。通常、Ｂフェーズは、事象リストに対する事象の登録と抽出（実行）とによって行われる。
【０００６】
Ｂフェーズを実行すると、それによって系の状況に変化が生じることがあるので、次にＣフェーズを実行する。例えば、「洗車場が空いていれば車を入れる」という事象は系の状況に応じて行うことであるので、Conditional Activity（Ｃフェーズ）と考えることができる。次に、Ａフェーズでは、事象リストに登録されている全事象の中で現時点から一番早く起こる事象まで時刻を進める処理を行う。
【０００７】
また、上記イベントアプローチは、時間依存のイベントが多く含まれた系のシミュレーションに有効な手法である。例えば、電車の発着時刻問題を考える場合は、各駅間における電車の走行時間はあらかじめ分かっており、その走行時間のみをトリガーとして系全ての状態が決まるので、イベントアプローチを用いたシミュレーションを行うことが可能である。また、上記アクティビティアプローチは、系の状況に依存したアクティビティを考慮したシミュレーションの手法である。
【０００８】
その他、離散系モデルには、プロセスアプローチなどのシミュレーション手法も存在する。
このように、離散系モデルによるシミュレーションの手法として様々な手法が存在するが、これらの手法は、どういう系を扱うかによって最適なものが選択される。例えば、電車の発着時刻のシミュレーションのように状況依存のイベントが少ない系にはイベントアプローチ、状況依存のイベントが多い系にはスリーフェーズアプローチといった具合である。
【０００９】
【発明が解決しようとする課題】
しかしながら、上記のような各種の手法に対応した従来のシミュレーション装置あるいは方法では、扱う系が大きくなると、事象の数も莫大に多くなり、離散事象システムのモデル化が困難となっていた。また、完成したモデル系の一部に変更の必要が生じた場合にも、系全体のモデルを一から作り直さなければならないこともあった。そのため、多大の労力および作業時間を要し、システムの開発コストが増大してしまうという問題があった。
【００１０】
本発明は、このような問題を解決するために成されたものであり、離散事象シミュレーションモデルの作成およびメンテナンスを簡単に行えるようにして、システム開発を効率的に行えるようにすることを目的とする。
【００１１】
【課題を解決するための手段】
本発明によるシミュレーション装置は、離散事象によるシミュレーションを行うための複数のシミュレータを備えたシミュレーション装置において、上記シミュレータ間で転送する転送先情報及びタイミング情報を含んだオブジェクトを登録する転送リストと、上記転送リストに登録されたオブジェクトの転送先情報及びタイミング情報に基づいて、上記オブジェクトを該当する転送先のシミュレータへ転送するタイミングを制御するタイミング制御手段と、上記タイミング制御手段により制御されたタイミングで上記オブジェクトを上記該当する転送先のシミュレータへ転送するインタフェース手段と、シミュレーションの全体を制御する制御手段とを設けたことを特徴とする。
【００１２】
ここで、上記複数のシミュレータ全てに共通の時刻情報であるクロック部を更に設け、上記タイミング制御手段は、上記クロック部の時刻を参照して、上記複数のシミュレータの中で一番最初に実行すべき事象の時刻に系の時刻を進める処理を行うようにしても良い。
また、上記複数のシミュレータ間で移動するオブジェクトは、上記複数のシミュレータで表現される系の間を物が移動する事象に関するオブジェクトであっても良い。
【００１３】
本発明の他の特徴とするところは、上記インタフェース手段は、上記転送リストに登録されたオブジェクトを、転送すべきシミュレータに対して、上記系の間の物の移動時間を考慮した所定の時刻に転送することを特徴とする。
【００１５】
本発明のその他の特徴とするところは、上記複数のシミュレータはそれぞれ、上記離散事象によるシミュレーションを行う際に必要なフェーズのうち、時刻を進めるためのフェーズと、事象を起こすためのフェーズとの２つのフェーズに抽象化したクラスを有し、該クラスが、離散系モデルの具体的なシミュレーション手法に対応した子クラスとの間で継承機構を持つようにしたことを特徴とする。
【００１６】
ここで、上記２つのフェーズに抽象化したクラスのうち、上記事象を起こすためのフェーズは、オブジェクト指向プログラミングの多相性を用いて実現しても良い。
また、上記複数のシミュレータはそれぞれ、上記抽象化したクラスとは別に、オブジェクトのロードやセーブ行うクラスを有するようにしても良い。
【００１７】
本発明のシミュレーション方法は、離散事象によるシミュレーションを行うためのシミュレーション方法であって、上記シミュレーションの対象とする系を複数の系に分けてモデル化し、モデル化した複数のシミュレータ間で時刻の同期をとりながら所定のオブジェクトを、オブジェクト自身により指定されている転送先情報及びタイミング情報に従って、転送すべきシミュレータに対して所定の時刻に移動させるようにすることにより、上記複数のシミュレータで１つのシミュレーションを統合的に行うようにしたことを特徴とする。
【００１８】
ここで、上記複数のシミュレータ間でとる時刻の同期は、上記複数のシミュレータ全てに共通の時刻情報であるクロック部の時刻を参照して、上記複数のシミュレータの中で一番最初に実行すべき事象の時刻に系の時刻を進める処理であっても良い。
また、上記複数のシミュレータ間で移動する所定のオブジェクトは、上記複数のシミュレータで表現される系の間を物が移動する事象に関するオブジェクトであっても良い。
【００１９】
本発明の他の特徴とするところは、上記複数のシミュレータ間で所定のオブジェクトを移動させる際に、あるシミュレータから出力されたオブジェクトを上記系の間の物の移動時間を考慮した所定の時刻に他のシミュレータに転送するようにすることを特徴とする。
【００２１】
本発明のその他の特徴とするところは、上記複数のシミュレータはそれぞれ、上記離散事象によるシミュレーションを行う際に必要なフェーズのうち、時刻を進めるためのフェーズと、事象を起こすためのフェーズとの２つのフェーズに抽象化したクラスを有し、該クラスが、離散系モデルの具体的なシミュレーション手法に対応した子クラスとの間で継承機構を持つことを特徴とする。
【００２２】
ここで、上記２つのフェーズに抽象化したクラスのうち、上記事象を起こすためのフェーズは、オブジェクト指向プログラミングの多相性を用いて実現するようにしても良い。
【００２３】
本発明のコンピュータ読み取り可能な記録媒体は、上述したタイミング制御手段、インタフェース手段、及び制御手段としてコンピュータを機能させるシミュレーション用プログラムを記録したことを特徴とする。
【００２４】
上記のように構成した本発明によれば、個々の系を表現するシミュレータを複数組み合わせて１つの統合シミュレータを構成することが可能となるので、シミュレーションの対象とする大きなモデル系を、モデル化を容易に行うことが可能な小さなモデル系の集まりとして表現でき、かつ、システム開発の際には、モデル系のシミュレータを並行して開発することも可能となる。
【００２５】
本発明の他の特徴によれば、オブジェクトが複数のシミュレータ間を移動する際に、複数のシミュレータで表現される系の間を物が移動する際の移動時間などのインタラクションをも考慮して移動が行われることとなり、上述のように１つの大きなモデル系を複数の小さなモデル系に分けてシミュレータを構築した場合でも、より現実に近いシミュレーションを行うことが可能となる。
【００２６】
本発明のその他の特徴によれば、オブジェクトの転送先シミュレータおよび転送すべき時刻は、転送リストに登録されたオブジェクト自身により指定されるので、制御手段が備えるインタフェース手段は、あるシミュレータから出力されたオブジェクトにより指定されている情報に従ってそのオブジェクトを他のシミュレータに流すだけで良くなる。これにより、インタフェース手段には変更を加えることなく、既存のシミュレータのモデルを変更したり、新たなシミュレータを追加したりすることが可能となる。
【００２７】
本発明のその他の特徴によれば、今どのアクションを起こすかという部分と、時刻を進める部分との２つのフェーズに抽象化された抽象クラスの下の階層に属する子クラスにおいて、上記抽象クラスのインタフェースを継承することによってシミュレーションが実施されることとなるが、離散系モデルの多くのシミュレーション手法において上記抽象化された２つのフェーズが当てはまるので、上記抽象クラスのインタフェースの継承によって様々なシミュレーション手法に対応するような構造ができるようになる。
【００２８】
【発明の実施の形態】
以下、本発明の一実施形態を図面に基づいて説明する。
図１は、本発明の一実施形態であるシミュレーション装置の主要な機能構成を示すブロック図である。本実施形態は、１つの大きな系を複数の系に分けてモデル化し、それらが時刻の同期をとりながら動くようなシミュレーションのシステムを提案するものである。例えば、図１の例では、鉄鋼会社の製鉄所における製鉄処理をモデル化したものであり、一連の製鉄処理を行う大きな系をスラブの生成、加熱、圧延の３つの小さな系に分けてモデル化し、各モデルが時刻の同期をとりながら動くようなシミュレーションを考えている。
【００２９】
図１において、１はシミュレーション制御部であり、タイミング制御手段２およびインタフェース手段３を備え、これらを用いて本実施形態によるシミュレーション装置全体の動作を管理する。後で詳しく説明するが、上記インタフェース手段３は、転送リスト４を備えている。
【００３０】
５ａ，５ｂ，５ｃは個々のスケジューラ（シミュレータ）であり、例えば、５ａは溶鋼からスラブを生成するＡ工場の系をモデル化したスケジューラ、５ｂは生成されたスラブを加熱するＢ工場の系をモデル化したスケジューラ、５ｃは加熱されたスラブを圧延するＣ工場の系をモデル化したスケジューラである。
【００３１】
各スケジューラ５ａ〜５ｃは、シミュレーションを行う際に実施する時間依存の離散事象（アクティビティまたはイベント）をリストとして登録しておく事象リスト６ａ〜６ｃを持つ。リスト上における事象の並べられ方は、事象を起こすタイミングの早い順である。図１の下部の図は、事象の発生するタイミングを示したものである。横軸ｔは時刻を示しており、Ａ1 →Ｂ1 →Ｂ2 →Ａ2 →Ｃ1 ……と順次事象が実行される。
【００３２】
例えば、図１の事象リスト６ａではＡ1 という事象が時刻ｔ＝１０のときに実行されるということを示し、事象Ａ1 に次いでこのスケジューラ５ａにおいては時刻ｔ＝３０のときに事象Ａ2 が実行される。シミュレーション制御部１から事象リストの問合わせがあると、各スケジューラ５ａ〜５ｃはそれぞれ自分が持っている事象リスト６ａ〜６ｃから最も早く実行すべき事象の内容と時刻とをシミュレーション制御部１に返す。なお、本実施形態では、各スケジューラ５ａ〜５ｃはそれぞれ１つずつ事象リスト６ａ〜６ｃを持っているが、これは複数でも構わない。
【００３３】
７ａ，７ｂ，７ｃはそれぞれ各スケジューラ５ａ，５ｂ，５ｃに対応して設けられたファイルアクセス部であり、一連のシミュレーションで使用する複数のオブジェクト（オブジェクト指向プログラミングにおける、自分自身の内部状態を表す１組のデータとそれらを処理する固有のメソッド群とから成るモジュールを言う）のロード、セーブなどを行う。また、シミュレーションのための条件データや、シミュレーションの途中経過で生成される中間データあるいは最終的な処理結果データなどのロード、セーブも行う。なお、このファイルアクセス部７ａ〜７ｃは、データベースとして構成しても良い。
【００３４】
後で詳しく説明するが、本実施形態では、所定のオブジェクトに関しては、各スケジューラ５ａ〜５ｃの間をシミュレーション制御部１を介して動き回るように構成している。例えば、Ａ工場からＢ工場へ何か物が移動する事象があったとすれば、Ａ工場スケジューラ５ａが有するファイルアクセス部７ａからロードされたオブジェクトが、シミュレーション制御部１のインタフェース手段３を介して、Ｂ工場スケジューラ５ｂが有するファイルアクセス部７ｂにセーブされる。
【００３５】
８はシミュレーションにおける時刻経過を表現するためのクロック部であり、個々のスケジューラが何個あるかにかかわらず、シミュレーション制御部１に対して１個のみ備えられる。シミュレーション制御部１のタイミング制御手段２は、このクロック部８を用いて、各スケジューラ５ａ〜５ｃのシミュレーションにおける個々の事象の実行のタイミングを調整する。
【００３６】
具体的には、シミュレーション制御部１は、各スケジューラ５ａ〜５ｃに対してどのような事象があるかを問い合わせる。各スケジューラ５ａ〜５ｃは上述のように、それぞれ自分が持っている事象リスト６ａ〜６ｃから最も早く実行すべき事象の内容と時刻とをシミュレーション制御部１に返す。シミュレーション制御部１は、共通の時刻であるクロック部８の時刻情報および、各スケジューラ５ａ〜５ｃから返された事象情報を基に、次にどのスケジューラのどの事象を実行すれば良いかを判断し、その事象が実行されるべき時刻に系の時刻を進める。系が所定の時刻にセットされると、該当する事象を実行する。
【００３７】
なお、本実施形態ではタイミング制御手段２とクロック部８とを別に設けているが、タイミング制御手段２自身が各スケジューラ５ａ〜５ｃに共通の時刻情報を持っていれば、別途クロック部８を設ける必要はない。
【００３８】
上記シミュレーション制御部１はまた、上述したように、各スケジューラ５ａ〜５ｃの間をオブジェクトが動き回るようにするインタフェース機能も備えている。インタフェース手段３は、各スケジューラ５ａ〜５ｃの中のあるスケジューラ（転送元）から送られてくるオブジェクトを転送リスト４に登録し、何れかのスケジューラ（転送先）に転送する機能を持つ。このとき登録されるオブジェクトにはあらかじめ転送元のスケジューラにより、どのスケジューラ（転送先）にどのようなタイミングで転送するかという情報が付加されている。
【００３９】
次に、転送リスト４に登録されたオブジェクトを転送先のスケジューラに転送するが、このときはオブジェクトに付加されてきたタイミングの情報を基にタイミング制御手段２が所定の時刻に系の時刻を進め、インタフェース手段３が該当するスケジューラにそのオブジェクトを転送する。このタイミング情報とは、例えば、各スケジューラ５ａ〜５ｃで表される系の間で移動する物（各工場間で運搬されるスラブなど）の移動時間を考慮したものである。
【００４０】
すなわち、実際の操業では、例えばＡ工場で生成されたスラブをＢ工場で処理するためには、スラブをＡ工場からＢ工場へと運搬する必要がある。よって、この運搬時間を考慮せずにシミュレーションのモデルを作ったのでは、現実に忠実なシミュレーションを行うことができない。そこで、本実施形態のように各工場間のインタラクションを考慮してモデルを作ることにより、１つの大きなモデル系を複数の小さなモデル系に分けてシミュレータを構築した場合でも、より現実に近いシミュレーションを行うことができるようになる。
【００４１】
以上のように、本実施形態のシミュレーション装置においては、複数のスケジューラ間での時刻同期の処理を行うとともに、インタフェースの処理を行うようにしたシミュレーション制御部１を設けたので、個々の系を表現するスケジューラを複数組み合わせて１つの統合シミュレータを構成することができる。大きな系を１つのモデルで表現しようとすると、そのモデルの作成には多大の労力を要するが、本実施形態によれば大きなモデル系を小さなモデル系の集まりとして表現でき、その結果、個々のモデル化を容易に行うことができるようになる。
【００４２】
また、個々の系のスケジューラのモデル化を容易に行うことができるだけでなく、それら個々のスケジューラの並行開発を行うこともできるようになる。すなわち、Ａ工場、Ｂ工場、Ｃ工場で行う処理を模擬する個々のスケジューラを同時並行して開発することができる。これにより、それぞれ工場の内部に詳しい者がそれぞれのスケジューラを並行して作ることができ、より詳しく間違いのない優れた統合シミュレータを容易に短期間で作ることができるようになる。
【００４３】
しかも、シミュレーション制御部１が備えるインタフェース機能は、転送リスト４に登録されたオブジェクトに付加されている情報に従ってそのオブジェクトを他の系に流すだけのものであり、その転送先のスケジューラおよび転送時刻の情報は、転送元のスケジューラにて付加されるようになっている。したがって、例えば物を移動させる事象などに対して上述の付加情報と共にオブジェクトをシミュレーション制御部１に登録するように個々のスケジューラをモデル化すれば、どんなスケジューラでも任意に組み合わせることができる。
【００４４】
これにより、例えば、古いバージョンのスケジューラとの組み合わせも可能である。従来のように全体の大きな系を１つのシミュレータとして作成する場合には、その一部（例えば、スラブを生成するＡ工場の部分）のみに設計変更の要求が生じた場合でも全体を作り直す必要があったが、本実施形態によれば、Ａ工場の部分のみを作り直せば良く、Ｂ工場の部分およびＣ工場の部分はそのまま再利用することができる。もちろん、シミュレーション制御部１の構成に変更を加える必要もない。また、新たにＤ工場のスケジューラなどを追加する場合にも、シミュレーション制御部１には変更を加える必要がない。そのため、システムの開発コストを大幅に削減することができる。
【００４５】
なお、大きな系を複数の小モデル系に分けて表現できるようにするために、Ａ工場スケジューラ５ａとＢ工場スケジューラ５ｂとの間およびＢ工場スケジューラ５ｂとＣ工場スケジューラ５ｃとの間に、インタラクション自体をモデル化したスケジューラを作成する方法も考えられる。
【００４６】
しかしこの方法では、既存のスケジューラに変更を加えた場合にはそれに関係するインタラクションのスケジューラにも変更を加える必要が出てくる。また、新たにＤ工場のスケジューラなどを追加する場合には、それに対応した新たなインタラクションのスケジューラも追加しなければならなくなる。
【００４７】
これに対して、本実施形態によれば、既存のスケジューラを変更したり新たなスケジューラを追加した場合でも、オブジェクトの転送時に使用する情報を付加する機能を各工場のスケジューラに加えるだけで、インタラクションの部分であるシミュレーション制御部１には変更を加える必要がない。よって、シミュレーションモデルの一部変更や追加などを容易に行うことができるというメリットも有する。
【００４８】
次に、本発明の第２の実施形態について説明する。第２の実施形態は、図１に示した各スケジューラ５ａ〜５ｃにおけるインタフェース構造を工夫することにより、スリーフェーズアプローチ、イベントアプローチ、アクティビティアプローチ、プロセスアプローチなどの様々な離散事象シミュレーション手法に対応できるようにしたものである。
【００４９】
図２は、この第２の実施形態によるシミュレーション装置に用いられるインタフェース構造を示すオブジェクト図であり、オブジェクト指向プログラミングにおけるクラスの階層構造を併せて示している。なお、図２において、図１に示したブロックと同じ機能ブロックには同一の符号を付している。
【００５０】
図２に示すように、図１に示した各スケジューラ５ａ〜５ｃは、第２の実施形態ではベーススケジューラ２１として実現される。そして、このベーススケジューラ２１を親クラスとし、スリーフェーズアプローチ、イベントアプローチ、アクティビティアプローチ、プロセスアプローチなどの何れかの手法に対応したスケジューラ２２をその子クラスとして、階層構造が構築されている。
【００５１】
本実施形態では、ベーススケジューラ２１とスケジューラ２２との間に継承関係を持たせ、スケジューラ２２は、ベーススケジューラ２１が持つ機能や性質を受け継ぐようにしている。また、本実施形態では、ベーススケジューラ２１を仮想関数を用いて構成している。仮想関数は、あるクラスで定義した機能をその子クラスで再定義して、異なる機能に置き換えてしまうための特別な性質を持った関数で、オブジェクト指向プログラミングの多相性を利用したものである。
【００５２】
つまり本実施形態では、ベーススケジューラ２１で定義した機能をその子クラスであるスケジューラ２２で再定義して、スケジューラ２２に応じた機能に置き換えるようにしているものである。本実施形態の場合、上記ベーススケジューラ２１で定義した機能とは、“時刻を進めるための機能”と、“事象を実行する機能”である。
【００５３】
すなわち、“時刻を進めるための機能”は、複数ある事象のうち、最も早く実行すべき事象を選択し、その事象を実行する時刻へ系の時刻を進めるものであり、その事象を実行するのが“事象を実行する機能”である。つまり、離散系モデルのどのシミュレーション手法も、今どの事象を実行するかという部分と、時刻を進める部分との２つのフェーズに分けることができる。
【００５４】
そこで、本実施形態ではこの点に着目し、この２つのフェーズの関数を持つ抽象化したクラスを作り、シミュレーションを行う際に必要な要素のうち、時刻を進める部分をシミュレーション制御部１にやらせ、その外のアクションを起こす部分を全てベーススケジューラ２１にやらせるようにしている。
【００５５】
このとき、ベーススケジューラ２１は、仮想関数にて構成したことにより、スケジューラ２２に実装されたシミュレーション手法に従った挙動をする。ベーススケジューラ２１は、Boundary Activity およびConditional Activityの両方を実施する機能を有しているので、ベーススケジューラ２１の機能を継承するスケジューラ２２を離散系モデルのどのシミュレーション手法に基づいて実装しても、適切にシミュレーションを行うことができる。
【００５６】
例えば、スケジューラ２２をスリーフェーズアプローチとして実装したときは、ベーススケジューラ２１は、Boundary Activity およびConditional Activityの両方を実施するように機能する。また、イベントアプローチとして実装したときは、Boundary Activity のみを実施するように機能し、アクティビティアプローチとして実装したときは、Conditional Activityのみを実施するように機能する。
【００５７】
なお、この第２の実施形態においてシミュレーション制御部１は、あるスケジューラから転送リスト４に登録されたオブジェクトの構造を転送先のスケジューラで採用している型の構造に書き換える処理を行う。
【００５８】
次に、本システムを構成するクラスの継承関係の一部を図３に示す。
全空間の親であるオブジェクト直下のクラスには、モデル化する系の基本的な構成要素を表すベースエンティティ３１（特に、自分がどのスケジューラに何時動くかの情報はこのクラスに含まれる）、事象であるアクティビティ３２、離散シミュレーションを実行するベーススケジューラ２１、シミュレーションにおける時間を表現するクロック部８、オブジェクトのロードやセーブを行うファイルアクセス部７のクラスがある。
【００５９】
上記ベースエンティティ３１の下には、具体的なシミュレーション手法に応じて系の構成要素を表すエンティティが少なくとも１個以上継承されており、その中の１つのエンティティ３３には更に、例えば２次元の配置問題を扱う２次元座標を持った２Ｄエンティティ３４が継承されている。さらに、詳細な説明は割愛するが、この２Ｄエンティティ３４の下には、例えば製鉄処理を模擬するためのより具体的なクラスが継承されている。また、上記ベーススケジューラ２１の下には、具体的なシミュレーション手法に応じて系のシミュレーションを実行するためのスケジューラ２２のクラスが少なくとも１個以上継承されている。
【００６０】
図３から明らかなように、本実施形態では、ファイルアクセスをするクラスを１つにまとめてファイルアクセス部７で管理しており、その他のクラスではファイルアクセスを行わないようにしている。このようにすることにより、ファイルアクセスの手法によってベーススケジューラ２１や、ベースエンティティ３１以下のクラス等の構造が変わってしまうことを防いでいる。また、ファイルアクセス部７は一般的なデータベースでも同様に用いることができる。
【００６１】
ファイルアクセスによってベーススケジューラ２１の構造が変わらないので、その子クラスであるスケジューラ２２では、ベーススケジューラ２１の同じ機能や性質を継承することができる。よって、ファイルアクセスの如何によらず、上記のようにベーススケジューラ２１で抽象化した２つのフェーズを有するどんなシミュレーション手法もスケジューラ２２で実装することが可能となる。
【００６２】
次に、図２のように構成した第２の実施形態によるシミュレーション装置の動作を、図４のフローチャートに基づいて詳しく説明する。
図４において、ユーザがシミュレーションの実行コマンドを入力すると、ステップＳ１から処理が開始される。ステップＳ１では、シミュレーション制御部１が管理する少なくとも１個以上のベーススケジューラ２１の中で、現在の時刻に起こる事象が存在するdiscrete＿approach()を全て実行する。
【００６３】
このとき、それらの各ベーススケジューラ２１で起こった事象の中で、あるベーススケジューラが表現する系から他のベーススケジューラが表現する系に物が移動する事象も存在する（図１の例で言うと、例えばＡ工場からＢ工場への移動）。そのような移動に関する事象が存在するかどうかをステップＳ２で判断し、存在する場合は、ステップＳ３で、シミュレーション制御部１が持つ転送リスト４にそのためのベースエンティティを登録する。エンティティとは、シミュレーションするときに系の構成要素を表す用語である。
【００６４】
図５は、上記ステップＳ１で行われる動作を説明するための図である。なお、この図５は、ベーススケジューラ２１の機能や性質を継承したスケジューラ２２がスリーフェーズアプローチで実装されている場合のインタフェースの例を示したものである。
【００６５】
図５において、シミュレーション制御部１からベーススケジューラ２１に対してメンバ関数discrete＿approach()の実行命令が与えられると、このベーススケジューラ２１の機能を継承したスケジューラ２２では、まず時間依存のBoundary Activity を全て実行する。すなわち、まず事象リスト６から、シミュレーション制御部１で管理されている現在の時刻と事象を起こすべき時刻とが一致したアクティビティ５３を全て抽出することによりBoundary Activity を実行する。
【００６６】
なお、図５に示すように、本実施形態では、この事象リスト６に登録されるBoundary Activity を、イニシャルアクティビティリスト５１とアクティビティリスト５２とに分けて別々に管理している。これは、例えば図１のようにスラブを幾つかの工場で処理して出力するという系のシミュレーションを考える場合に、ある工場の系にまだ入っていないものと入っているものとを分けて整理するためである。
【００６７】
すなわち、イニシャルアクティビティリスト５１は、シミュレーションをする系の外部から与えられる物に関するアクティビティ（例えば、スラブがＡ工場からＢ工場に与えられる時間に関するアクティビティ）を登録するものである。また、アクティビティリスト５２は、系で処理される物のあらかじめ予定されている処理時間に関するアクティビティ（例えば、ある時刻に加熱処理が終了するというアクティビティ）を登録するものである。
【００６８】
このように本実施形態では、時間依存のBoundary Activity を２つのリストに分けて管理することにより、例えば所定時間内にある量だけ処理したいという要求の下にシミュレーションを行った結果、どれくらいの物が未処理で残ってしまったかを知るためには、イニシャルアクティビティリスト５１の内容だけを見れば良く、認識が容易になるという利点を有する。
【００６９】
次に、上述のようにしてアクティビティ５３を抽出してBoundary Activity を実行したら、アクティビティ５３の終了をそれに関連するエンティティ５４に知らせる。そして、そのアクティビティ５３を起こしたエンティティ５４がアクティビティ５３の終了時に行うべきことを実行する。ここで、アクティビティ５３の終了時に行うべきことは、アクティビティ５３の発生時にそれに関連するエンティティ５４のメンバ関数 end＿process にセットされる。
【００７０】
本実施形態では、このメンバ関数 end＿process をオブジェクト指向プログラミングの仮想関数で定義する。これにより、この end＿process の機能を継承する下のクラスで様々な動作をするように再定義することによって、いろんな事象を柔軟に表現することができる。例えば、クレーンがスラブを掴むために移動するアクティビティでは、移動というアクティビティが終了すると同時にスラブを掴むという現象を起こすようにすることもできる。このように、本実施形態では、従来はサブルーチンなどを用いて手続きとして書いていた振る舞いを１つのクラスで表現することができる。
【００７１】
次に、時間依存のBoundary Activity をすべて実行した後は、ルールベースを用いて状況依存のConditional Activityをすべて実行する。すなわち、まずスケジューラ２２は、推論エンジン５５に推論の実行を依頼する。依頼を受けた推論エンジン５５は推論を実行し、その推論の結果が所定の条件を満たした場合には、新たなアクティビティ５３を発生させ、発生と同時にそれを事象リスト６に登録する。以上が図４のステップＳ１における処理の詳細である。
【００７２】
図４のステップＳ４では、シミュレーション制御部１の転送リスト４に転送エンティティが登録されているかどうかを判断する。転送エンティティが存在する場合は、ステップＳ５に進み、シミュレーション制御部１は、その転送エンティティを転送先として指定されているベーススケジューラ２１に移動させる。この移動は、転送エンティティが持っている情報（転送先および転送時刻の情報）をもとに行われる。
【００７３】
次に、シミュレーション制御部１は、ステップＳ６で、自分が管理している少なくとも１個以上のベーススケジューラ２１のオブジェクトの全てに対してアクセスし、最も早くアクティビティが起こる時刻をそれぞれから取得する。そして、各ベーススケジューラ２１から受け取った時刻の値をタイミング制御手段２のオブジェクトに知らせる。なお、各ベーススケジューラ２１は、次に起こるアクティビティがないときは−１の値をシミュレーション制御部１に返す。
【００７４】
これに応じてタイミング制御手段２のオブジェクトは、次のステップＳ７で、各ベーススケジューラ２１から受け取ったそれぞれの最早時刻の値をメンバ関数registered＿timeに格納する。そして、ステップＳ８で、上記メンバ関数registered＿timeに格納された複数の時刻の値をもとに次に進むべき時刻（その中でも最も早い時刻）を判断して、その時刻に系の時刻を更新する。
【００７５】
その後、ステップＳ９で上記メンバ関数registered＿timeの値を−１に初期化した後、ステップＳ１の処理に戻る。これにより、上記ステップＳ８で新しく更新された時刻を要求したベーススケジューラ２１でメンバ関数discrete＿approach()が実行されることとなる。以下、このようなステップＳ１〜Ｓ９の処理の繰り返しにより、シミュレーションが実行されていく。
【００７６】
以上のように、第２の実施形態のシミュレーション装置によれば、仮想関数であるベーススケジューラ２１の抽象クラス（時刻を進めるためのクラスと事象を実行するためのクラス）のインタフェースをスケジューラ２２が継承することによって、様々なアプローチに対応するような構造ができる。すなわち、スリーフェーズアプローチ、イベントアプローチ、アクティビティアプローチ、プロセスアプローチなどの何れの離散事象シミュレーション手法にも対応することができる。
【００７７】
これにより、図１に示すような製鉄処理のシミュレーションを複数の小さな系に分けてモデル化する場合に、各工場のスケジューラをベーススケジューラ２１によって構成するようにすれば、各工場ごとに任意の離散事象シミュレーション手法を選択してスケジューラを構築することができる。例えば、各工場でスケジューラを作成する者が熟知している離散事象シミュレーションの手法が、スリーフェーズアプローチ、イベントアプローチ、アクティビティアプローチなどとそれぞれ異なっている場合でも、それぞれが熟知している手法に沿って個々のスケジューラを作成することができるというメリットを有する。
【００７８】
さらに、今後今までにない全く新しい離散事象シミュレーションの手法が考えだされた場合にも、その手法が上述のように抽象化されたクラスの枠組みに入るものであれば、その手法にも対応することができる。このように、本実施形態のシミュレーション装置は、将来的に案出される新しい手法にも対応することができるという柔軟性を持つ。
【００７９】
なお、以上に述べた第１、第２の実施形態によるシミュレーション装置は、実際にはＣＰＵ、ＲＯＭおよびＲＡＭなどからなるマイクロコンピュータにより構成され、そのようなシミュレーションを行うためのプログラムは、上記ＲＯＭに格納される。また、これ以外にも、本実施形態のシミュレーション装置に上記プログラムを外部から供給するようにすることも可能である。この場合、上記プログラムを供給するための手段、例えば上記プログラムを格納した記憶媒体は本発明を構成する。
【００８０】
なお、上記プログラムを記憶する記憶媒体としては、ＲＯＭの他に、例えばフロッピーディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード等を用いることができる。
【００８１】
【発明の効果】
本発明は上述したように、複数のシミュレータ間で時刻の同期をとるタイミング制御手段と複数のシミュレータ間で所定のオブジェクトを移動させるインタフェース手段とシミュレーション全体の制御手段とを設けたので、個々の系を表すシミュレータを複数組み合わせて１つの統合シミュレータを構成することができ、その結果、大きなモデル系を小さなモデル系の集まりとして表現することができる。個々の小さいモデル系のシミュレータは容易に作成することができるし、それらのシミュレータを並行して開発することもできるので、シミュレータの構築ひいてはシステム開発の効率を大幅に向上させることができる。
【００８２】
本発明の他の特徴によれば、あるシミュレータから出力されたオブジェクトを転送すべきシミュレータに対して所定の時刻に転送するようにしたので、オブジェクトが複数のシミュレータ間を移動する際に、複数のシミュレータで表現される系の間を物が移動する際の移動時間などのインタラクションをも考慮して移動を行うようにすることができ、１つの大きなモデル系を複数の小さなモデル系に分けてシミュレータを構築した場合でも、より現実に近いシミュレーションを行うことができる。
【００８３】
本発明のその他の特徴によれば、オブジェクトの転送先および転送すべき時刻を、転送リストに登録されたオブジェクト自身が持つ情報により指定するようにしたので、インタフェース手段は、ただ単にその情報に従ってオブジェクトを転送することができる。つまり、そのような情報を指定するように個々のシミュレータをモデル化すればどのようなシミュレータでも組み合わせることができ、インタフェース手段自体には変更を加えなくても済むので、既存のシミュレータのモデルを変更したり、新たなシミュレータを追加することを容易に行うことができる。また、古いバージョンのシミュレータを再利用することもできる。
【００８４】
本発明のその他の特徴によれば、離散系モデルの多くのシミュレーション手法が備えている、時刻を進めるためのフェーズと事象を起こすためのフェーズとの２つのフェーズに抽象化したクラスを作り、その抽象クラスがその子クラスとの間で継承機構を持つように構成したので、抽象クラスのインタフェースをその子クラスが継承することによって様々な手法に対応したシミュレーションを行うことができる。これにより、様々な手法でシミュレーションが可能なマルチアプローチ対応のシミュレーション装置を提供することができる。
【００８５】
特に、本発明では、１つの大きなモデル系を複数の小さなモデル系の集まりとして表現する場合に、個々のモデル系のシミュレータに上記のような構成を持たせるようにすれば、各系ごとに任意の離散事象シミュレーション手法を選択してシミュレータを構築することができる。これにより、各系でシミュレータを作成する者が熟知している離散事象シミュレーションの手法に沿って個々のシミュレータを作成することができ、より詳しく間違いのない優れた統合シミュレータを短期間で作ることができるようになる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態であるシミュレーション装置の主要な機能構成を示すブロック図である。
【図２】本発明の第２の実施形態によるシミュレーション装置に用いられるインタフェース構造を示すオブジェクト図である。
【図３】本システムを構成するクラスの継承関係の一部を示す図である。
【図４】図２のように構成した第２の実施形態によるシミュレーション装置の動作を示すフローチャートである。
【図５】図４のステップＳ１で行われる動作をより詳しく説明するための図である。
【符号の説明】
１  シミュレーション制御部
２  タイミング制御手段
３  インタフェース手段
４  転送リスト
５ａ  Ａ工場スケジューラ
５ｂ  Ｂ工場スケジューラ
５ｃ  Ｃ工場スケジューラ
６，６ａ，６ｂ，６ｃ  事象リスト
７，７ａ，７ｂ，７ｃ  ファイルアクセス部
８  クロック部
２１  ベーススケジューラ
２２  スケジューラ
５１  イニシャルアクティビティリスト
５２  アクティビティリスト
５３  アクティビティ
５４  エンティティ
５５  推論エンジン
【図１】
0003916727.tif 000002
【図２】
0003916727.tif 000003
【図３】
0003916727.tif 000004
【図４】
0003916727.tif 000005
【図５】
0003916727.tif 000006