(57)【要約】      （修正有）【課題】シミュレーションの不安定性を回避する。【解決手段】シミュレーション・システムは、動作シナリオに沿って、１つの状態から別の状態に遷移する際に、今から移行する状態が未踏である場合に、未踏であることを示すソフトウェア的なガード１２０２を置き、未踏のガードに遭遇することに応答して、今から移行する状態が安定かどうかのテストを行う。このテストの結果、今から移行する状態が安定であると判定すると、シミュレーション・システムは、未踏のガードを外す。そうして、その先の状態の遷移箇所に別の未踏のガードを配置する。一方、今から移行する状態が不安定であると判定すると、シミュレーション・システムは、未踏のガードを不安定のガード１２０４に取り替える。そして、遷移の出現状態を記録して、好適にはシミュレーションを終了する。【選択図】図１２
2011118841.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータの処理により、非線形ブロックを含む複数の機能ブロックをもつシステムの動作方法であって、
前記複数の機能ブロックを、スイッチドリニア化により、複数の状態からなる線形ブロックに変換するステップと、
所定の動作シナリオに従い、前記スイッチドリニア化によって生成される複数の状態の間を遷移するステップと、
次に遷移すべき状態の安定性を検査するステップと、
前記検査の結果が不安定であることに応答して、前記安定性を判定した状態の前に第１のガード・ブロックを配置するステップと、
前記第１のガード・ブロックに到達することに応答して、前記システムを停止するステップを有する、
システムの動作方法。
【請求項２】
未踏の状態への遷移に、第２のガード・ブロックを付与するステップと、
前記第２のガード・ブロックに到達することに応答して、前記システムの動作を一旦停止し、次の状態の安定性を検査するステップと、
前記検査の結果が不安定であることに応答して、前記第２のガード・ブロックを第１のガード・ブロックに置き換えるステップを更に有する、請求項１に記載の方法。
【請求項３】
前記検査の結果が安定であることに応答して、前記第２のガード・ブロックを除去するステップを更に有する、請求項２に記載の方法。
【請求項４】
前記安定性の検査に応答して、スイッチドリニア化された非線形ブロックの状態ＩＤと安定性の結果を、前記コンピュータの記憶装置に書き出すステップをさらに有する、請求項１に記載の方法。
【請求項５】
前記書き出された前記状態ＩＤと安定性の結果に基づき、前記第１のガード・ブロックを更新するステップをさらに有する、請求項４に記載の方法。
【請求項６】
前記システム中の非線形ブロックの数をＭ、非線形ブロックがとりえる最大の状態の数をＮとしたとき、前記状態ＩＤが、Ｍ桁のＮ進数であらわされる、請求項４に記載の方法。
【請求項７】
コンピュータの処理により、非線形ブロックを含む複数の機能ブロックをもつシステムを動作させるプログラムであって、
前記コンピュータをして、
前記複数の機能ブロックを、スイッチドリニア化により、複数の状態からなる線形ブロックに変換するステップと、
所定の動作シナリオに従い、前記スイッチドリニア化によって生成される複数の状態の間を遷移するステップと、
次に遷移すべき状態の安定性を検査するステップと、
前記検査の結果が不安定であることに応答して、前記安定性を判定した状態の前に第１のガード・ブロックを配置するステップと、
前記第１のガード・ブロックに到達することに応答して、前記システムを停止するステップを実行させる、
プログラム。
【請求項８】
未踏の状態への遷移に、第２のガード・ブロックを付与するステップと、
前記第２のガード・ブロックに到達することに応答して、前記システムの動作を一旦停止し、次の状態の安定性を検査するステップと、
前記検査の結果が不安定であることに応答して、前記第２のガード・ブロックを第１のガード・ブロックに置き換えるステップを更に有する、請求項７に記載のプログラム。
【請求項９】
前記検査の結果が安定であることに応答して、前記第２のガード・ブロックを除去するステップを更に有する、請求項８に記載のプログラム。
【請求項１０】
前記安定性の検査に応答して、スイッチドリニア化された非線形ブロックの状態ＩＤと安定性の結果を、前記コンピュータの記憶装置に書き出すステップをさらに有する、請求項７に記載のプログラム。
【請求項１１】
前記書き出された前記状態ＩＤと安定性の結果に基づき、前記第１のガード・ブロックを更新するステップをさらに有する、請求項１０に記載のプログラム。
【請求項１２】
前記システム中の非線形ブロックの数をＭ、非線形ブロックがとりえる最大の状態の数をＮとしたとき、前記状態ＩＤが、Ｍ桁のＮ進数であらわされる、請求項１０に記載のプログラム。
【請求項１３】
コンピュータの処理により、非線形ブロックを含む複数の機能ブロックを動作させるシステムであって、
記憶手段と、
前記複数の機能ブロックを、スイッチドリニア化により、複数の状態からなる線形ブロックに変換する手段と、
所定の動作シナリオに従い、前記スイッチドリニア化によって生成される複数の状態の間を遷移する手段と、
前記状態の安定性を検査する検査手段と、
遷移前に、前記検査手段により前記状態の安定性を検査し、前記検査の結果が不安定であることに応答して、前記安定性を判定した状態の前に第１のガード・ブロックを配置する手段と、
前記第１のガード・ブロックに到達することに応答して、前記システムを停止する手段を有する、
システム。
【請求項１４】
未踏の状態への遷移に、第２のガード・ブロックを付与する手段と、
前記第２のガード・ブロックに到達することに応答して、前記システムの動作を一旦停止し、次の状態の安定性を検査する手段と、
前記検査の結果が不安定であることに応答して、前記第２のガード・ブロックを第１のガード・ブロックに置き換える手段を更に有する、請求項１３に記載のシステム。
【請求項１５】
前記検査の結果が安定であることに応答して、前記第２のガード・ブロックを除去する手段を更に有する、請求項１４に記載のシステム。
【請求項１６】
前記安定性の検査に応答して、スイッチドリニア化された非線形ブロックの状態ＩＤと安定性の結果を、前記記憶手段に書き出す手段をさらに有する、請求項１５または請求項１４に記載のシステム。
【請求項１７】
前記書き出された前記状態ＩＤと安定性の結果に基づき、前記第１のガード・ブロックを更新する手段をさらに有する、請求項１６に記載のシステム。
【請求項１８】
前記システム中の非線形ブロックの数をＭ、非線形ブロックがとりえる最大の状態の数をＮとしたとき、前記状態ＩＤが、Ｍ桁のＮ進数であらわされる、請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、シミュレーション技術に関し、より詳しくは、シミュレーションの動作検証の効率化技術に関するものである。
【背景技術】
【０００２】
近年、科学技術計算、シミュレーションなどの分野で、複数のプロセッサをもつ、いわゆるマルチプロセッサ・システムが使用されている。そのようなシステムでは、アプリケーション・プログラムは、複数のプロセスを生成して、個別のプロセッサに、プロセスを割り当てる。それらのプロセッサは、例えば、共有のメモリ空間を利用して互いに通信しながら、処理を進める。
【０００３】
最近になって特に盛んに開発されるようになってきたシミュレーションの分野として、ロボット、自動車、飛行機などのメトカトロニクスのプラントのシミュレーション用ソフトウェアがある。電子部品とソフトウェア技術の発展の恩恵により、ロボット、自動車、飛行機などでは、神経のように張り巡らされたワイヤ結線や無線ＬＡＮなどを利用して、大部分の制御が電子的に行われる。
【０００４】
それらは、本来的には機械的装置であるのに、大量の制御ソフトウェアをも内蔵している。そのため、製品の開発に当たっては、制御プログラムの開発とそのテストに、長い時間と、膨大な費用と、多数の人員を費やす必要が出てきた。
【０００５】
このようなテストにために従来行われている技法として、ＨＩＬＳ(Hardware In the Loop Simulation)がある。特に、自動車全体の電子制御ユニット（ＥＣＵ）をテストする環境は、フルビークルＨＩＬＳと呼ばれる。フルビークルＨＩＬＳにおいては、実験室内で、本物のＥＣＵが、エンジン、トランスミッション機構などをエミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ＥＣＵからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。
【０００６】
しかし、ＨＩＬＳは、専用のハードウェア装置を使い、それと本物のＥＣＵの間を物理的に配線しなくてはならないので、準備が大変である。また、別のＥＣＵに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のＥＣＵを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、ＨＩＬＳのエミュレーション用のハードウェア装置は、一般に、非常に高価である。
【０００７】
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、ソフトウェアで構成する手法が提案されている。この手法は、ＳＩＬＳ(Software In the Loop Simulation)と呼ばれ、ＥＣＵに搭載されるマイクロコンピュータ、入出力回路、制御のシナリオ、エンジンやトランスミッションなどのプラントを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、ＥＣＵのハードウェアが存在しなくても、テストを実行可能である。
【０００８】
このようなＳＩＬＳの構築を支援するシステムとして例えば、MathWorks社から入手可能なシミュレーション・モデリング・システムである、MATLAB(R)/Simulink(R)がある。MATLAB(R)/Simulink(R)を使用すると、図１に示すように、画面上にグラフィカル・インターフェースによって、機能ブロックを配置し、矢印のようにその処理の流れを指定することによって、シミュレーション・プログラムを作成することができる。これらのブロック線図は、シミュレーションの１タイムステップ分の処理を表しており、これが所定回繰り返されることにより、シミュレーション対象となるシステムの時系列における振る舞いを得ることができる。
【０００９】
こうして、MATLAB(R)/Simulink(R)上で、機能ブロックなどのブロック線図が作成されると、Real-Time Workshop(R)の機能により、等価な機能のＣ言語など既知のコンピュータ言語のソース・コードに変換することができる。このＣ言語のソース・コードをコンパイルすることにより、別のコンピュータ・システムで、ＳＩＬＳとして、シミュレーションを実行することができる。
【００１０】
ところで、このようにして作成した複数の機能ブロックからなるシミュレーション・システムを実機に実装する前に、そのシステムの動作の安定性を判定する必要がある。なぜなら、実機に実装した後でシステムの不安定性が発現すると、例えば、エンジンの場合、急速な回転数上昇などの現象があらわれて、安全性を損なうからである。
【００１１】
図１(a)に、コントローラ・ブロック１０２と、プラント・ブロック１０４を有する安定システムの例を示す。図１(a)のシステムにおいては、期待出力１０６に対して、実際の出力１０８は、図示されるように、一旦期待出力１０６からずれるが、時間の経過とともに、期待出力に沿うように収束する。
【００１２】
一方、図１(b)に、コントローラ・ブロック１１０と、プラント・ブロック１１２を有する不安定システムの例を示す。図１(b)のシステムにおいては、期待出力１１４に対して、実際の出力１１６は、図示されるように、時間の経過とともに発散してしまい、もし、エンジン、ブレーキなどの制御システムにこのような不安定性が生じると、危険な状況となる。よって、シミュレーション・システムの不安定性を予め判定する技術が必要である。
【００１３】
現代制御理論によれば、このようなシミュレーション・システムの安定性は、実際に動作させることなく判定することができる。すなわち、図２に示すシステムは、コントローラ・ブロック２０２と、アクチュエータ・ブロック２０４と、プラント・ブロック２０６を有し、期待出力２０８に対して、実際の出力２１０を与えるように動作するが、一方、図２に示すシステムは、コントローラ・ブロック２０２と、アクチュエータ・ブロック２０４は、そのブロック記述に基づき、フローグラフ２１２に変換される。ここでuは入力であり、yは出力である。そしてさらには、状態行列２１４がもとめられ、時間に関する行列形式の微分方程式で、シミュレーション・システムの動作が記述される。
【００１４】
現代制御理論によれば、所定のアルゴリズムにより、状態行列２１４が固有値行列２１６に変換され、その固有値行列２１６の対角成分の実部が全てゼロ以下であることを以って、シミュレーション・システムが安定であると判定される。このような議論は、「演習で学ぶ現代制御理論」森泰親著、森北出版株式会社などに記述されていて周知であるので、ここでは詳説しない。
【００１５】
さて、図３に示すシステムは、コントローラ・ブロック３０２と、アクチュエータ・ブロック３０４と、飽和ブロック３０６と、プラント・ブロック３０８を有し、期待出力３１０に対して、実際のプラント出力３１２を与えるように動作する。すなわち、図示されているように、プラント出力３１２は発散してしまうのであるが、図３のシステムに、図２の状態行列による安定性判定技法を適用しようとしても、無理である。それは、非線形である飽和ブロック３０６が存在するからである。すなわち、状態行列は、線形の制御系にしか適用できない。
【００１６】
これを克服するために、モデル中の非線形素子を複数の領域に分ける技法を使用することが可能であり、それを、図４を参照して説明する。そのような技法に類似する技法は、例えば、特開平１１−２２４１０６号公報などに開示されている。そこで、本明細書では、それを、複数の線形領域に分けるという意味で、スイッチド・リニア技法と呼ぶことにする。スイッチド・リニア技法によれば、非線形ブロック３０６が、複数（図４では３個）の線形領域に分割され、よって、状態遷移図３１０は、３つの状態をもつ部分３１２を含むことになる。
【００１７】
すると、図４のシステムは、状態遷移図３１０の部分３１２にそれぞれ異なる値（式）を与えた場合に対応する３つの状態３１４、３１６、及び３１８をとりえることになり、特に、非線形ブロック３０６に入力される値x2に基づき、非線形ブロック３０６がどの状態をとりえるかが決まる。非線形ブロック３０６を、３つの状態３１４、３１６、及び３１８のブロックでそれぞれ置き換えることにより、図４のシステムは、擬似的に線形である３つの状態遷移図を含むとみなすことができる。
【００１８】
すると、その３つの状態遷移図の各々につき、状態行列による安定性判定技法を適用することが可能となる。こうして、図４のシステムは、非線形ブロック３０６に入力される値x2に応じて、安定である状態３１４、不安定である状態３１６、及び不安定である状態３１８の間を遷移する。このような仕組みで、非線形ブロックが含まれていても、状態に対応して複数の状態行列を作成することにより、安定性を判定することが可能である。
【００１９】
しかし、さらに問題があってそれは、一般的にシミュレーション・システムにおいて、非線形ブロックは複数存在することである。例えば、図５のブロック５０２、５０４及び５０６に示すとおりである。ところが、仮に１つの非線形ブロックが３つの状態でスイッチド・リニア近似できるとしても、もし非線形ブロックがN個あると、3N個の状態がある。すると、状態間の遷移の数は、3N(3N-1)となる。ここでもし、N = 5だとしても、状態間の遷移の数は、3.4×109程度の大きさになって、到底すべてを網羅してテストすることは不可能である。実際のシステムでは、N = 5程度では済まない。こうして、非線形ブロックを含むシミュレーション・システムにおいてどう合理的にテストするか、ということは大きな課題である。
【００２０】
しかし、このような組合せ爆発を克服して、非線形ブロックを含むシミュレーション・システムを、効率的にテストできる技法は従来知られていない。
【先行技術文献】
【特許文献】
【００２１】
【特許文献１】特開平１１−２２４１０６号公報
【発明の概要】
【発明が解決しようとする課題】
【００２２】
従って、本発明の目的は、非線形ブロックを複数含むシミュレーション・システムにスイッチド・リニアの技法を適用して、複数の状態をもつシステムにした場合に、非線形ブロックの数や性質に拘らず、組合せ爆発を避けて効率的に安定性をテストできるようにする技法を提供することにある。
【課題を解決するための手段】
【００２３】
この発明の前提として、非線形ブロックを複数含むシミュレーション・システムの非線形ブロックの各々に、スイッチド・リニアの技法を適用して、複数のリニア領域の状態をもつブロックに変換しておく。このような処理は、手動でも出来るが、好適には、所定のツールで自動的に実行することができる。
【００２４】
このように複数の（例えばＭ個の）非線形ブロックがスイッチド・リニア化され、その各々がＮ個の状態をとるとすると、Ｍ桁のＮ進数として、状態ＩＤを決定することができる。すなわち、状態ＩＤのＮ進数表記の各桁が、それぞれの非線形ブロックの個々の状態をあらわす。
【００２５】
このように状態ＩＤを定義したとき、本発明によれば、全ての状態ＩＤ間を遷移させるのではなく、特定の動作シナリオに沿って、シミュレーション・システムは、状態ＩＤをを用いて、状態間を遷移するように制御される。
【００２６】
シミュレーション・システムは、動作シナリオに沿って、１つの状態から別の状態に遷移する際に、今から移行する状態が未踏である場合に、未踏であることを示すソフトウェア的なガードを置き、未踏のガードに遭遇することに応答して、今から移行する状態が安定かどうかのテストを行う。この安定性のテストは、既知の状態行列を使用する方法でよい。
【００２７】
このテストの結果、今から移行する状態が安定であると判定すると、シミュレーション・システムは、未踏のガードを外す。そうして、その先の状態の遷移箇所に別の未踏のガードを配置する。
【００２８】
一方、今から移行する状態が不安定であると判定すると、シミュレーション・システムは、未踏のガードを不安定のガードに取り替える。そして、遷移の出現状態を記録して、好適にはシミュレーションを終了する。
【００２９】
シミュレーション・システムは、状態間を遷移する際に、不安定のガードに遭遇すると、遷移の出現状態を記録して、好適にはシミュレーションを終了する。
【００３０】
このようなテストの結果、遷移の出現状態を記録したデータに基づき、ガード条件を更新することができる。こうして得られたガード条件は、実機に搭載することができ、これによって、実機が、不安定な状態に進むことが防止されて、実機の安全が保たれる。
【発明の効果】
【００３１】
この発明によれば、非線形ブロックを複数含むシミュレーション・システムにスイッチド・リニアの技法を適用して、複数の状態をもつシステムに変形した場合に、非線形ブロックの数や性質に拘らず、組合せ爆発を避けて効率的に安定性をテストすることが可能となる。
【００３２】
また、シミュレーションの結果得られたガード条件は、実機に搭載することができ、これによって、実機が、不安定な状態に進むことが防止されて、実機の安全が保たれる。
【図面の簡単な説明】
【００３３】
【図１】シミュレーション・システムの安定性を説明するための図である。
【図２】シミュレーション・システムの安定性を判定する処理を示す図である。
【図３】非線形ブロックを含むシミュレーション・システムの安定性判定の困難さを示す図である。
【図４】非線形ブロックをスイッチド・リニアにより線形化することによる、シミュレーション・システムの安定性を判定する処理を示す図である。
【図５】複数の非線形ブロックを含むシミュレーション・システムの例を示す図である。
【図６】本発明を実施するためのハードウェアのブロック図である。
【図７】本発明を実施するための機能ブロック図である。
【図８】複数の非線形ブロックを併合する処理を説明する図である。
【図９】複数の非線形ブロックからなるシステムにおける、状態ＩＤのテーブルを示す図である。
【図１０】非線形ブロックを含むシミュレーション・システムの状態遷移を示す図である。
【図１１】本発明に従うシミュレーション処理のフローチャートを示す図である。
【図１２】非線形ブロックを含むシミュレーション・システムの状態遷移の時間推移を示す図である。
【図１３】ガード条件を作成するための処理のフローチャートを示す図である。
【図１４】ガード条件を作成するための処理のフローチャートを示す図である。
【図１５】ガード条件を作成するための処理のフローチャートを示す図である。
【図１６】ガード条件を作成するための処理のフローチャートを示す図である。
【図１７】ガード条件を作成するために処理される表のエントリを示す図である。
【図１８】ガード条件を作成するために処理される表のエントリを示す図である。
【図１９】ガード条件を作成するために処理される表のエントリを示す図である。
【図２０】ガード条件を作成するために処理される表のエントリを示す図である。
【図２１】ガード条件を作成するために処理される表のエントリを示す図である。
【図２２】ガード条件を作成するために処理される表のエントリを示す図である。
【図２３】ガード条件を作成するために処理される表のエントリを示す図である。
【図２４】ガード条件を作成するために処理される表のエントリを示す図である。
【図２５】ガード条件を作成するために処理される表のエントリを示す図である。
【図２６】ガード条件を作成するために処理される表のエントリを示す図である。
【図２７】ガード条件を作成するために処理される表のエントリを示す図である。
【図２８】ガード条件を作成するために処理される表のエントリを示す図である。
【図２９】実機システムにおける動作のフローチャートを示す図である。
【発明を実施するための形態】
【００３４】
以下、図面に基づき、この発明の実施例を説明する。特に断わらない限り、同一の参照番号は、図面を通して、同一の対象を指すものとする。尚、以下で説明するのは、本発明の一実施形態であり、この発明を、この実施例で説明する内容に限定する意図はないことを理解されたい。
【００３５】
図６を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図６において、ホスト・バス６０２には、複数のＣＰＵ０  ６０４ａ、ＣＰＵ１  ６０４ｂ、ＣＰＵ２  ６０４ｃ、ＣＰＵ３  ６０４ｄが接続されている。ホスト・バス６０２にはさらに、ＣＰＵ０  ６０４ａ、ＣＰＵ１  ６０４ｂ、ＣＰＵ２  ６０４ｃ、ＣＰＵ３  ６０４ｄの演算処理のためのメイン・メモリ６０６が接続されている。
【００３６】
一方、Ｉ／Ｏバス６０８には、キーボード６１０、マウス６１２、ディスプレイ６１４及びハードティスク・ドライブ６１６が接続されている。Ｉ／Ｏバス６０８は、Ｉ／Ｏブリッジ６１８を介して、ホスト・バス６０２に接続されている。キーボード６１０及びマウス６１２は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ６１４は、後述する本発明に係るシミュレーション・システムをＧＵＩで操作するための画面イメージを表示したり、結果を眺めたりするために使用される。
【００３７】
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘがある。その際、ＣＰＵ０  ６０４ａ、ＣＰＵ１  ６０４ｂ、ＣＰＵ２  ６０４ｃ、ＣＰＵ３  ６０４ｄは、例えば、インテル（Ｒ）Ｃｏｒｅ  ２  ＤＵＯであり、オペレーティング・システムは、Ｗｉｎｄｏｗｓ（商標）Ｓｅｒｖｅｒ  ２００３である。オペレーティング・システムは、ハードティスク・ドライブ６１６に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ６１６からメイン・メモリ６０６に読み込まれる。
【００３８】
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘに限定されない。シングル・コア、マルチコア、マルチ・プロセッサ、ハイブリッド・マルチコア、など任意のアーキテクチャのＣＰＵを使用することができる。本発明に係るシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Ｗｉｎｄｏｗｓ（商標）  ＸＰ、Ｗｉｎｄｏｗｓ（商標）  ７、Ｗｉｎｄｏｗｓ（商標）などのＷｉｎｄｏｗｓ系や、Ｌｉｎｕｘ（Ｒ）、Ｍａｃ  ＯＳ（Ｒ）など、任意のオペレーティング・システムを使用することができる。あるいは、ＰＯＷＥＲ（商標）６ベースで、オペレーティング・システムがＡＩＸ（商標）のＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｐなどのコンピュータ・システムを使用してもよい。
【００３９】
ハードディスク・ドライブ６１６にはさらに、後述する、MATLAB(R)/Simulink(R)のようなモデリング・ツール、非線形ブロック解析モジュール、安定性判定モジュール、コンパイラ、シミュレーション実行モジュール、シミュレーション・シナリオ・ファイルなどの必要なプログラムが格納され、オペレーティング・システムの作用によって適宜メイン・メモリ６０６にロードされて、実行される。
【００４０】
図７は、本発明に係る機能論理ブロック図である。モデリング・ツール７０２は、MATLAB(R)/Simulink(R)、Scilab/Scicosなどの既存の任意のツールでよい。シミュレーション・モデリング・ツール７０２は、基本的には、オペレータが、ディスプレイ６１４上でＧＵＩ的に機能ブロックを配置し、数式など必要な属性を記述し、必要に応じて、機能ブロック間を関連付けてブロック線図を記述することを可能ならしめるような機能をもつ。シミュレーション・モデリング・ツール７０２はさらに、記述されたブロック線図に等価な機能を記述するＣのソースコードを出力する機能をもつ。Ｃ以外にも、Ｃ＋＋、ＦＯＲＴＲＡＮなどを使用することができる。また、好適には、機能ブロック間の依存関係を記述するためのＭＤＬファイルも、併せてソースコードとして出力する。
【００４１】
そのように出力されたソースコード７０４は、ハードディスク・ドライブ６１６に保存される。
【００４２】
非線形ブロック解析モジュール７０６は、ソースコード７０４を解析して、図５に非線形ブロック５０２、５０４及び５０６として示すような非線形ブロックを見出し、スイッチド・リニア操作によって、複数の状態の線形領域に分割する。その際、スイッチド・リニア操作を適用する前に、図８に示すように、好適には、可能な箇所で非線形ブロックの併合を行うようにする。すなわち、図８(a)に示すように、内部状態をもたないブロック８０２、内部状態をもつ（非線形）ブロック８０４、内部状態をもたないブロック８０６及び内部状態をもつ（非線形）ブロック８０８があるとき、このままスイッチド・リニア操作により線形化すると、非線形ブロックが各々３状態に線形化されると仮定すると、ここだけで９状態になる。そこで、図８(b)に示すように、ブロック８０６とブロック８０８の位置を置き換え、それから、図８(c)に示すように、ブロック８０４とブロック８０８を併合して、非線形ブロック８１０を形成することにより、ここでの状態を、９状態から３状態に減らすことができる。
【００４３】
なお、Simulink(R)などで実際に使われる非線形ブロックの例として、下記のものがある。
- 遊びのあるシステムの挙動のモデル化(バックラッシュ)のブロック
- 零点で不連続、その他では線形ゲインを伴う型のモデル化のブロック
- ゼロ出力の領域を生成(デッドゾーン)ブロック
- 2つの入力の間での切り替えブロック
- ブロック入力の選択ブロック
- 指定された間隔で入力を離散化ブロック
- 信号の変化率を制限ブロック
- 2つの定数間で出力の切り替えブロック
- 信号の範囲を制限（飽和）ブロック
【００４４】
非線形ブロック解析モジュール７０６は、可能な箇所で、非線形ブロックを併合して数を減らした後、図９に概略的に示すような、非線形ブロックのための状態テーブル７０８を生成する。生成された状態テーブル７０８は、好適にはハードディスク・ドライブ６１６に保存される。
【００４５】
非線形ブロックについて、Simulink(R)のコード、特にSaturation（飽和）ブロックを例として用いて説明する。通常Saturationブロックの機能は本来は、
Out=( ((In) >= (Saturation_LowerSat)) ? (Saturation_LowerSat)  :
(((In) <= (Saturation_UpperSat)) ? (Saturation_UpperSat)  : (In)) );  ...Code 1.1
となる。Saturation_LowerSatとSaturation_UpperSatがそれぞれSaturationブロックの上限と下限を表しており、In, Outが入出力を表わす。入力Inの値によって出力Outが決まる。
【００４６】
これに対してSaturationブロックに検証用機能を付け加えたブロックは、
Out=( ((In) >= (Saturation_LowerSat)) ? (Saturation_LowerSat)  :
(((In) <= (Saturation_UpperSat)) ? (Saturation_UpperSat)  : (In)) );
Model_State=( ((In) >= (Saturation_LowerSat)) ? Model_State+Saturation_LowerOffset  :
(((In) <= (Saturation_UpperSat)) ? (Model_State+Saturation_UpperOffset)  : (Model_State+Saturation_MiddelOffset)) );
となる。Model_State以下の部分は、検証用ブロックの追加機能となる。Model_State, Saturation_LowerOffset, Saturation_UpperOffset, Saturation_MiddelOffsetは、MATLABのワークスペースにある変数名であり、それぞれ、モデルのシステムID、Saturationブロックの入力がSaturation上限を上回ったときにシステムIDの計算に必要なオフセット、ブロック入力がSaturation下限を上回ったときのシステムIDのオフセット、ブロック入力がSaturation上限と下限の間にある場合のシステムIDのオフセットを表わす。この追加機能によって、Saturationブロックの入力値からシステムIDが計算されることになる。検証用ブロックの作成は、C言語で書かれた上Simulink(R)のS Functionとしてコンパイルすることによって実現される。
【００４７】
図９に戻って、Ｂ１、Ｂ２、Ｂ３、Ｂ４、及びＢ５と表されているのはそれぞれ、個々の非線形ブロックであり、対応する列は、個々の非線形ブロックの動作領域である。この表の動作領域は、非線形ブロックのうち、最大の動作領域（図９では、Ｂ５の５個）に合わされている。従って、非線形ブロックＢ１のように、３つの動作領域しかもたない場合は、３と４の動作領域は、取り得ないので、影付きで表示されている。
【００４８】
このような表が与えられたとき、表の動作領域の数をＮとして、非線形ブロックの数をＭとしたとき、Ｍ桁のＮ進数として、状態ＩＤを決定することができる。すなわち、状態ＩＤのＮ進数表記の各桁が、それぞれの非線形ブロックの個々の状態をあらわす。逆に、状態ＩＤが与えられたとき、それをＮ進数表記に変換して、各桁の値をみることによって、各非線形ブロックの状態（動作領域）を決定することができる。例えば、(Ｂ１,Ｂ２,Ｂ３,Ｂ４,Ｂ５) = (0,1,2,3,2)だと、
状態ＩＤ = 0×44 + 1×43 + 2×42 + 3×41 + 2×40 = 110となる。
【００４９】
コンパイラ７１０は、ソースコード７０４と、状態テーブル７０８とを参照して、図６で示すコンピュータ・システム上で動作する実行コードを生成し、実行システム７１２上で動作させる。
【００５０】
安定性判定モジュール７１４は、実行システム７１２から、状態ＩＤに対応するシステムの状態を受け取って、状態行列を計算し、それに基づき行列の固有値を求めるなどして、安定性を判定して、その判定結果を実行システム７１２に返す。
【００５１】
テストケース生成ブロック７１６は、図１０に示すように、各非線形ブロックの出力を入力として、ＳＩＭＯ制御によってシミュレーションのためのテストケースを生成して、実行システム７１２に入力するものであってもよいし、直接、独自の内部論理及び記憶されているシナリオの情報により、シミュレーションのためのテストケースを生成して、実行システム７１２に入力するものであってもよい。
【００５２】
実行システム７１２は、シミュレーション・シナリオ７１６からのシナリオ７１６に従い動作しつつ、適宜、ガード条件７１８のデータをハードディスク・ドライブ６１６に書き出す。ガード条件７１８生成の処理は、後で詳しく説明する。
【００５３】
コンパイラ７２０は、ソースコード７０４と、状態テーブル７０８と、ガード条件のブロック７１８を参照して、実機用システム７２２で実際に動作する、いわゆる組込みシステム用のコードを生成する。
【００５４】
図１０は、テストケース生成ブロック７１６によるＳＩＭＯ制御によって、ブロック１００２、１００４、１００６及び１００８を有する検証対象システム（実行システム）を制御する様子を模式的に示す図である。特にここで、ブロック１００４とブロック１００８が、非線形ブロックである。前述のように、これは、テストケースを生成するための一実施例であり、本発明のテストケース生成ブロック７１６は、ＳＩＭＯ制御を用いるものに限定されない。
【００５５】
図１０(a)に示すように、テストケース生成ブロック７１６には、非線形ブロックへの入力である状態変数が入力され、これにより、テストケース生成ブロック７１６は、現在の状態を把握し、所定のシナリオに沿って別の状態に移行するように、検証対象システムに、テストケース出力を与える。
【００５６】
図１０(b)は、テストケースに従う状態間の移行を説明する図である。図１０(b)において、テストケース生成ブロック７１６は、入力される状態変数に基づき、現在、状態１０１０であると認識する。すると、実行システム上では、次に移行可能な状態は、状態１０１２、１０１４、１０１６、１０１８、１０２０、１０２２、１０２４及び１０２６であるが、テストケース生成ブロック７１６は、組み込まれた所定のシナリオに沿って、状態１０１２、１０１４、１０１６、１０１８、１０２０、１０２２、１０２４及び１０２６のうちの１つを選び、状態を移行するようにテストケース出力を制御する。
【００５７】
次に、図１１のフローチャートを参照して、本発明に係るシミュレーション動作について説明する。この処理は、基本的には、図７に示すテストケース生成ブロック７１６からのデータに従い、実行システム・モジュール７１２で実行されるが、必要に応じて、安定性判定モジュール７１４も呼ばれる。
【００５８】
先ず、ステップ１１０２では、シミュレーション初期値からのガード条件が作成される。これは、どの状態からシミュレーションを開始するかを決定することでもある。
【００５９】
ステップ１１０２と相前後してもよいが、ステップ１１０４では、非線形ブロック解析モジュール７０６によって、例えば図４に示すように、非線形ブロックが独自の複数の線形ブロックに変換される。そうして、ステップ１１０６から、シミュレーションが開始される。
【００６０】
ステップ１１０８からステップ１１１０を経てステップ１１１２までは、シミュレーション時間Ｔが、ΔＴだけ進められる。特にステップ１１１０では、通常の処理を実行しつつ、テストケースに従い選ばれた非線形ブロック内のコードが実行される。そして状態(State)の更新が行われる。すなわち、図１２(a)において、開始の状態を符号１２０６で示すと、論理的には、そこから、状態１２０８、状態１２１０、状態１２１２、状態１２１４、状態１２１６のどれかに移行可能であるが、テストケースにより、そのうちのどれかが、次の状態として選ばれる。なお、ここで状態の移行というのは、図１０(b)に示すのと同じ意味であり、図９に関して説明した状態ＩＤの変化とも等価である。
【００６１】
図１２(b)及び図１２(c)は、時間とともに図１２(a)から、シミュレーション・システムが状態を移行していく様子を示す。
【００６２】
次に、ステップ１１１４では、次に移行する状態(State)が既知且つ安全な遷移状態と一致するかどうかが判断される。ここで、既知且つ安全であるとは、シミュレーション・システムが、その状態を前に少なくとも一度訪れ、その状態が、安定性判定モジュール７１４によって安定であると判定されたことを意味する。そのような判定の履歴は、ハードディスク・ドライブ６１６に記録されるので、ステップ１１１４における判断が可能となる。
【００６３】
ステップ１１１４で、移行する状態(State)が既知且つ安全な遷移状態と一致すると判断されると、ステップ１１１６に進み、そこで、状態遷移の出現確率の記録が更新される。
【００６４】
ステップ１１１８では、その状態遷移の出現確率の記録の結果、遷移の出現確率の順序に変更なしかどうかが判断され、もしそうなら、ステップ１１２０に進み、そこで、シミュレーションは終了かどうか判断される。もしそうなら、シミュレーションは終了し、そうでないなら、ステップ１１０８に戻り、シミュレーションは続けられる。
【００６５】
ステップ１１１８に戻って、その状態遷移の出現確率の記録の結果、遷移の出現確率の順序に変更ありと判断されると、ステップ１１２２に進み、状態ＩＤ及びガード条件の再計算が行われる。ここで、ガード条件とは、図１２でガード条件１２０２及びガード条件１２０４として例示されているものであり、未踏な線形領域（状態）への遷移を示すガード条件と、不安定な線形領域（状態）への遷移を示すガード条件がある。
【００６６】
ステップ１１２２の次は、ステップ１１２４に進み、そこで、非線形ブロック内のコードを更新し、ステップ１１２０に戻る。
【００６７】
なお、未踏な線形領域（状態）への遷移を示すガード条件は、図１２でガード条件１２０２として例示されているものであり、そのガード条件の先にある状態がまだ未踏であるため、安定性を事前にテストしなくてはならないことを示す。
【００６８】
不安定な線形領域（状態）への遷移を示すガード条件は、図１２でガード条件１２０４として例示されているものであり、そのガード条件の先にある状態が、安定性判定モジュール７１４によって既にテストされ、不安定であると判定されていることを示す。
【００６９】
ガード条件は、例えば、下記のようなコードによって実装される。
If (Model_State <= 4) {
Stable();
} else if (Model_State == 14) {
Stable();
} else {
if (Model_State == 5)  Unstable();
if (Model_State == 16) Untested();
if (Model_State == 24) Untested();
... ...
}
このように、ガード条件のブロックは、機能的には、図１０のブロック１００２、１００４、１００６及び１００８などと同様のブロックとして記述される。このガード条件ブロックは、MATLAB(R)のMスクリプトで記述され、Simulink(R)のEmbedded MATLAB Functionブロックで呼び出すように実装する。ガード条件ブロックの中で、Model_StateはMATLABのワークスペースにある変数名であり、状態IDを表している。Stable(),  Unstable(),  Untested()関数は、システム状態が安定、不安定、または未踏であるときに実行される。それらの関数は、MATLABのMスクリプトもしくはC言語によって記述する。Stable(),  Unstable(),  Untested()については、図１１のフローチャートの後のステップに関連して説明する。
【００７０】
ガード条件ブロックは、MATLAB(R)のMスクリプトで記述されていることにより、シミュレーションの間に、シミュレーション・システムによって動的に書き換えることが可能であることを理解されたい。
【００７１】
ステップ１１１４に戻って、移行する状態(State)が既知ではないかまたは、安全な遷移状態と一致しないと判断されると、ステップ１１２６に進み、そこで、シミュレーションが一時停止される。
【００７２】
次に、ステップ１１２８では、状態がUntestedなガード条件と一致するかどうか判断され、もしそうなら、未踏な状態への遷移なので、ステップ１１３０に進み、そこで、安定性判定モジュール７１４を呼び出して、遷移する先の状態の安定性が判定される。
【００７３】
ステップ１１３０の判定の結果、遷移する先の状態が安定であると判定されると、ステップ１１３２で、該当ガード条件が削除される。これは、図１２(b)で、状態１２０６から状態１２１０に遷移する際に、状態１２１０が安定であると判定され、それによって、状態１２０６と状態１２１０の間のガードが除去されていることに対応する。
【００７４】
ステップ１１３４では、次の遷移先からのエッジに対するガード条件の追加が行われる。このことは、図１２(b)で、状態１２１０から状態１２１８、状態１２２０、状態１２２２の間に新たなガードを配置することに対応する。
【００７５】
ステップ１１３６では、状態遷移の出現確率が記録され、ステップ１１２２に戻る。
【００７６】
ステップ１１３０に戻って、遷移する先の状態が不安定であると判定されると、ステップ１１３８で、ガード条件がUnstableに変更される。次にステップ１１４０で、遷移の出現確率が更新されて記録され、ステップ１１４２で状態をダンプして、ユーザに通知し、シミュレーションが終了する。
【００７７】
ステップ１１２８に戻って、状態がUntestedなガード条件と一致しないと判断されると、ステップ１１４４に進み、そこで、状態がUnstableなガード条件と一致するかどうか判断され、もしそうなら、ステップ１１４０に進み、そこで、遷移の出現確率が更新されて記録され、ステップ１１４２で状態をダンプして、ユーザに通知し、シミュレーションが終了する。このことは、図１２(c)で、状態１２１０から、テストケースに従い、状態１２１８に遷移し、状態１２１８に至るガード条件が不安定であることに応答して、ステップ１１４４での判断が肯定的となることに対応する。そして、これによって、ステップ１１４０、ステップ１１４２を経て、シミュレーションが終了する。
【００７８】
ステップ１１４４で、状態がUnstableなガード条件と一致しないと判断されたなら、それは、なんらかのエラーである可能性があるので、ステップ１１４２で状態をダンプして、ユーザに通知し、シミュレーションが終了する。
【００７９】
次に、図１３乃至図１６のフローチャートを参照して、ステップ１１３６またはステップ１１４０によって更新され記録されたガード条件をリストし更新する処理について説明する。このための処理モジュールは、実行システム７１２に含まれていてもよいし、実行システム７１２とは別個に、ハードディスク・ドライブ６１６に含まれていてもよい。
【００８０】
具体的に説明する前に、以下の処理の概要をまとめると次のとおりである。
(1) 評価がSafeかつ出現率が最大のエントリを0にするよう値を交換
(2) ハミング距離およびラティス距離に基づき行列を昇順にソート
(3) 評価がSafeであり出現確率が高いエントリを選択
(4) ハミング距離に従い、他の行の順序関係が壊れないよう選択行が最大or最小となるよう値を交換
(5) 他の行の順序関係が壊れないよう、選択行が最大or最小となるよう列を交換
(6) 未操作のエントリにSafeがなくなるまで(3)を繰り返す
【００８１】
図１３において、ステップ１３０２では、未確定行に、全エントリを追加する。この処理は、好適には、図１１のフローチャートで示す処理によって、ステップ１１１６、ステップ１１３４及びステップ１１４０で記録された非線形ブロックの状態ＩＤの記録の処理の結果累積したデータを、メイン・メモリ６０６に読み込むことにより、行われる。
【００８２】
ステップ１３０４では、各列の入れ替え可能値へ、各列の状態数を追加する処理が行われる。この結果、例えば図１７に示すような表のデータが得られる。この表のデータにおける非線形ブロックは、図９に示す非線形ブロックの状態テーブルに対応している。
【００８３】
図１７において、第１列から第５列まではそれぞれ、図９のブロックＢ１、Ｂ２、Ｂ３、Ｂ４及びＢ５がとる状態の値に対応する。すなわち、列１から列３までは、0,1,2の3状態をとり、列４は0,1,2,3の４状態、列５は0,1,2,3,4の５状態、その右の列は、出現した頻度の百分率である出現率をあらわし、最右列は、安定性判定ブロック７１４によって安定性が判定された結果を示し、安定(Safe)と、不安定(Unsafe)のどちらかである。
【００８４】
ステップ１３０６では、評価がSafeかつ出現率が最大の行が操作行として選択される。図１８では、操作行は、参照番号１８０２で示されている。
【００８５】
ステップ１３０８では、各列の入れ替え可能値から最小の値を検索する処理が行われ、ステップ１３１０では、選択行の列が最小値となるように他の行の値との交換が行われる、この結果、図１８に示すようになる。また、図１９では、入れ替え可能値が表示されている。
【００８６】
ステップ１３１２では、操作行が１行目になるように行がソートされる。次に、ステップ１３１４では、図１９に示す丸で囲った数字である、各列の入れ替え可能値から最小値が削除される。
【００８７】
ステップ１３１６では、未確定エントリから操作行が除去される。すなわち、図２０において、行２００２は最早、操作行ではない。
【００８８】
ステップ１３１８では、行列の１行目からの各エントリのハミング距離が算出される。ここで、ハミング距離とは、等しい文字数を持つ二つの文字列の中で、対応する位置にある異なった文字の個数である。
【００８９】
ステップ１３２０では、ハミング距離によって昇順にソートされる。ステップ１３２２では、ハミング距離が等しい行が存在しないかどうか判断され、存在するなら、ステップ１３２４で、ラティス距離でソートする。ここで、ラティス距離とは、状態ＩＤを１０進数表記したときの、差の値のことである。
【００９０】
図２０においては、最小値である00000のエントリより各エントリのハミング距離を求めソートを行い、さらに別の値(ラティス距離)でソートを行う。上記の例ではハミング距離が4であるエントリは4つ存在するので、さらに小さい順にソートする。
【００９１】
処理は次に、図１４のフローチャートに進み、そこで、ステップ１４０２で、未確定エントリ中に評価がSafeのエントリが存在するかどうかが判断される。もしそうでなければ、処理は終了する。
【００９２】
ステップ１４０２で、未確定エントリ中に評価がSafeのエントリが存在すると判断されると、ステップ１４０４で、評価がSafeであり、最大出現率のエントリの上位２つが選択される。図２１では、評価がSafeの未確定エントリ２１０２、２１０４及び２１０６が示されている。
【００９３】
ステップ１４０６では、ハミング距離の平均値（ハミング距離の最大値／２）もしくは平均値より大きい距離に両エントリが存在するかどうかが判断される。そして、もしそうなら、ステップ１４０８で、操作行として両エントリ中でハミング距離が最大のエントリが選択される。ステップ１４０８の次は、ステップ１４１８の判断ステップに進む。
【００９４】
ステップ１４０６で、ハミング距離の平均値（ハミング距離の最大値／２）もしくは平均値より大きい距離に両エントリが存在しないと判断されたなら、ステップ１４１０に進み、そこで、ハミング距離の平均値（ハミング距離の最大値／２）より小さい距離に両エントリが存在するかどうか判断される。そして、もしそうなら、ステップ１４１２で、操作行として両エントリ中でハミング距離が最小のエントリが選択される。ステップ１４１２の次は、ステップ１４２０の判断ステップに進む。
【００９５】
さらに、ステップ１４１０で、ハミング距離の平均値（ハミング距離の最大値／２）より小さい距離に両エントリが存在しないと判断されたなら、ステップ１４１４に進み、そこで、操作行としてエントリの評価がSafeであり、最大出現率のエントリが選択される。
【００９６】
次に、ステップ１４１６に進み、そこで、操作行のハミング距離が平均値（ハミング距離の最大値／２）より小さいかどうかが判断され、もしそうなら、ステップ１４１８の判断ステップに進み、そうでなければ、ステップ１４２０の判断ステップに進む。
【００９７】
ステップ１４１８では、入れ替え可能値が存在するかどうかが判断され、もしそうなら、ステップ１４２２で、選択行が最大値となるように操作となるようなポリシーを選択し、次にステップ１４２４で各列の入れ替え可能値から最大値の検査が行われ、ステップ１４２６では選択行の列が可能値の最大値となるように値が交換され、ステップ１４２８では各列の入れ替え可能値からの最大値を削除する処理が行われ、ステップ１４３８に進んで、行を昇順にソートする処理が行われる。
【００９８】
ステップ１４１８で、入れ替え可能値が存在しないと判断されると、直接ステップ１４３８に進む。
【００９９】
一方、ステップ１４２０では、入れ替え可能値が存在するかどうかが判断され、もしそうなら、ステップ１４３０で、選択行が最小値となるように操作となるようなポリシーを選択し、次にステップ１４３２で各列の入れ替え及び可能値から最小値の検査が行われ、ステップ１４３４では選択行の列が可能値の最小値となるように値が交換され、ステップ１４３６では各列の入れ替え可能値からの最小値を削除する処理が行われ、ステップ１４３８に進んで、行を昇順にソートする処理が行われる。
【０１００】
ステップ１４２０で、入れ替え可能値が存在しないと判断されると、直接ステップ１４３８に進む。ここまでの様子の例が、図２２に示されている。ここでは、ハミング距離が大きく出現率が最も高いSafeエントリが選択され、値が次に最大になるようビットが交換される。この例では、次に出現率が最大かつハミング距離が遠い5行目が選択される。各列の最大値となるビットは9行目のエントリで固定となっているため、入れ替えが可能なビットを用い5行目のエントリが最大となるようビット交換が行われる。この場合、4列目は2，1が入れ替え可能なためビットの交換が行われる。そうして、ビット交換後、図２３のようになる。ここで、4列目の1,2の値を交換したため、4列目の入れ替え可能な値から１，３が削除される。
【０１０１】
次に、図１５のフローチャートに移って、ステップ１５０２で、ポリシーは操作行が最大値かどうかが判断される。このポリシーは、図１４のステップ１４２２またはステップ１４３０で決定されている。
【０１０２】
ステップ１５０２で、ポリシーは操作行が最大値であると判断されると、ステップ１５０４で、未確定エントリの各列に注目し、操作行の要素が最大値から何番目となるかを算出し、その値をAとする処理が行われる。
【０１０３】
次に、ステップ１５０６では、未確定エントリの各列に注目し、操作行の値と同じ値となる行をカウントし、その値をBとする処理が行われる。
【０１０４】
一方、ステップ１５０２で、ポリシーは操作行が最大値でないと判断されると、ステップ１５０８で、未確定エントリの各列に注目し、操作行の要素が最小値から何番目となるかを算出し、その値をAとする処理が行われる。
【０１０５】
次に、ステップ１５１０では、未確定エントリの各列に注目し、操作行の値と同じ値となる行をカウントし、その値をBとする処理が行われる。
【０１０６】
ステップ１５１２では、未確定列に全列が追加される。次にステップ１５１４では、未確定行からAが最小値である列が選択される。
【０１０７】
ステップ１５１６では、同じAとなる列が複数存在するかどうか判断され、もしそうなら、ステップ１５１８で、Bが最小値である列が選択され、ステップ１５２０で、未確定列から列数の最小の列を交換列として選択される。こうやって得られた値は、図２４以下では、A(B)と表記される。
【０１０８】
このステップに従い、エントリの列に注目し、選択したエントリが最大となるよう列の交換を行うと、図２４のようになる。この場合、最大値と最小値である1，9行はどの列を交換しても最大、最初となるため、それ以外の2から8行目に注目をする。ここでは5行目のエントリを2番目の最大値になるよう列の入れ替えが行われる。まず2-8行目の1列目では選択エントリのビットは0である。降順では2,1につづき3番目となり、他の行で0の値は5エントリとなるため、3(5)となる。2列目では選択エントリのビットは2となり、注目している2-8行では最大値となり、2の値をとる行は他にいないため1(1)となる。同様に残りの列も同様に最大値からの順位と同じ値を持っているエントリ数をカウントする。
【０１０９】
その後、選択した列が最大となるよう列を交換する。選択した行の値が最大となるためには各列が他の行の値よりも大きくなければならない。また、値は1列目より判断されるため、1列目より順に各列の順位が昇順となるようソートする。この例では5列目に4という最大値をもっており、他のエントリが4を持っていない5行目が1列目と交換される。（2列目も1位かつ他のエントリがないため1行目となる列に当てはまるが、2<4のため、2列目ではなく5列目が交換対象となる）。これにより1行目から小さい順で列をソートした場合、図２５の表となる。
【０１１０】
フローチャートに戻って、図１５のステップ１５２０からは、図１６のフローチャートのステップ１６０２に進む。ステップ１６０２では、既存のA,Bの値が算出された行は存在するかどうかが判断され、もしそうなら、ステップ１６０４に進み、そこで、交換列と選択列の既存のAが1であるかどうかが判断され、もしそうなら、ステップ１６０６に進む。
【０１１１】
ステップ１６０２で、既存のA,Bの値が算出された行は存在しないと判断されたなら、ステップ１６０６に進む。
【０１１２】
ステップ１６０６では、交換列と選択列が交換される。ステップ１６０６からは、ステップ１６０８に進む。ステップ１６０４で、交換列と選択列の既存のAが1でないと判断された場合も、ステップ１６０８に進む。
【０１１３】
ステップ１６０８では、未確定列からAが最小である列を削除する処理が行われる。
【０１１４】
ステップ１６１０では、未確定列にエントリが存在しないかどうか判断されて、もし存在するなら、図１５のフローチャートのステップ１５１４に戻る。
【０１１５】
未確定列にエントリが存在しないと判断されると、ステップ１６１２に進んで、全エントリを状態ＩＤの値の昇順にソートする処理が行われ、次にステップ１６１４で、未確定エントリから操作行を削除する処理が行われる。
【０１１６】
ステップ１６１６では、ポリシーは操作行が最大値であるかどうかが判断される。このポリシーは、ステップ１４２２またはステップ１４３０で決定されている。
【０１１７】
もしポリシーは操作行が最大値であるなら、ステップ１６１８で、未確定エントリから、操作行より大きく、且つ、評価がSafeでないエントリが削除される。
【０１１８】
一方、ステップ１６１６で、ポリシーが操作行が最大値でないと判断されたなら、ステップ１６２０で、未確定エントリから、操作行より小さく、且つ、評価がSafeでないエントリが削除される。次に処理は、図１４のステップ１４０２に戻る。
【０１１９】
図２５の例において、列をソート後、各行のエントリで小さい順にソートした場合、8，9行目がSafeエントリとしてパッキングできる。そこで、未確定のエントリでSafeの出現率が高くハミング距離が大きいものを選択し、値の入れ替えにより値を大きくできるならば、値の入れ替えを行う。こうして、図２６の表が得られる。
【０１２０】
図２６では、未確定のSafeエントリは6行目のエントリのみであり、これに対する操作が行われる。この列が最大となるよう値の交換が行われるが、交換可能な値は1列目の1，2、3だけであり１と3が交換される。交換後の表は図２７となる。そこで、確定エントリの依存性を考慮にいれ、選択エントリが最大となるよう列を入れ替える。
【０１２１】
ここで、図２６に、図１６に示すフローチャートの処理が適用される。すなわち、確定しているエントリ(1、８、９行目)以外の行である2から7行目に注目をする。同様に各列で選択したエントリが注目している行の範囲内で降順を考え何位となるかカウントする(例：1列目の3は2-7行目の範囲内で最大値であるため1番目となり、3のエントリが自分を含め2つあるため、1(2)となる。2列目も同様に1であるため2-7行目の範囲内で最大値となり、1のエントリは自分を含め3つあるため1(3)となる)。先の例と同様に、1行目より他の行と比較し値が最大になるよう列の交換を行うが、ここではすでに確定している8行目が他の行と比較し最大となるよう列を入れ替える必要がある。
【０１２２】
そこで、選択している5行目の順位からの算出値が昇順になるよう1列目の交換を行うが、ここでは、4列目を1列目にしてしまうと、すでに確定済みの8行目が2番目となってしまい、順位の依存関係が崩れてしまうため交換ができない。つぎに1列目と2列目は順位が1位であり、かつ8行目の順位も一位であるため、1，2列目を交換しても、8行目の順位関係は変わらないため交換可能である。しかし、交換した場合でも順位は変わらず、他の行に未操作のSafeエントリがないためこれでコーディングは終了となる。この状態は、図２８に示されている。
【０１２３】
このようにして生成された非線形ブロックの状態ＩＤと安定性のエントリを含む表は、ガード条件を生成するために使用される。例えば、図２８の表の１行目は、
if (Model_State == 0)  Stable();
というコードを生成する。
【０１２４】
次に、図２９のフローチャートを参照して、このようにして生成された、ガード条件７１８（図７）を含めて、コンパイラ７２０でコンパイルした実行モジュールを、実機用システム７２２で動作させる場合の処理を説明する。
【０１２５】
図２９のステップ２９０２では、実機用システム７２２のシナリオに基づき、通常処理と非線形ブロック内のコードが実行される。この処理は、図１２のような状態の遷移に相当する。
【０１２６】
ステップ２９０４で、実機用システム用に作成された実行プログラムは、組み込まれたガード条件を参照して、状態(State)が既知且つ安全な遷移状態と一致するかどうかを判断する。
【０１２７】
もしステップ２９０４で、状態(State)が既知且つ安全な遷移状態と一致しないと判断されると、実行プログラムは、ステップ２９０６で状態をログし、ステップ２９０８で状態を初期化する。この状態の初期化は、自動車のエンジン制御システムなどだと、暴走や誤動作を防ぐために必要である。
【０１２８】
ステップ２９０８の次は、ステップ２９１０に移行して、操作は終了かどうかの判断が行われる。もしそうなら、実機用システムの動作の終了となる。そうでなければ、ステップ２９０２に戻って、動作は継続される。
【０１２９】
ステップ２９０４で、状態(State)が既知且つ安全な遷移状態と一致すると判断されると、直ちにステップ２９１０に移行して、操作は終了かどうかの判断が行われる。
【０１３０】
以上、この発明を特定の実施例に基づき説明してきたが、この発明は、この特定の実施例に限定されず、当業者が自明に思いつく様々な変形、置換などの構成、技法適用可能であることを理解されたい。例えば、特定のプロセッサのアーキテクチャ、オペレーティング・システムなどに限定されない。
【０１３１】
また、上記実施例は、MATLAB(R)/Simulink(R)を例にとって説明したが、これに限らず、任意のモデリング・ツールに適用可能であることを理解されたい。
【符号の説明】
【０１３２】
６０４ａ、６０４ｂ、６０４ｃ、６０４ｄ・・・  ＣＰＵ
６０６  メイン・メモリ
６０８  バス
６１０  キーボード
６１２  マウス
６１４  ディスプレイ
６１６  ハードティスク・ドライブ
７０２  モデリング・ツール
７０２  シミュレーション・モデリング・ツール
７０４  ソースコード
７０６  非線形ブロック解析モジュール
８１０  非線形ブロック
７０８  状態テーブル
７１０  コンパイラ
７１２  実行システム
７１４  安定性判定モジュール
７１６  テストケース生成ブロック
７１８  ガード条件
７２０  コンパイラ
７２２  実機用システム
１２０２  ガード条件
１２０４  ガード条件
【図１】
2011118841.tif 000003
【図２】
2011118841.tif 000004
【図３】
2011118841.tif 000005
【図４】
2011118841.tif 000006
【図５】
2011118841.tif 000007
【図６】
2011118841.tif 000008
【図７】
2011118841.tif 000009
【図８】
2011118841.tif 000010
【図９】
2011118841.tif 000011
【図１０】
2011118841.tif 000012
【図１１】
2011118841.tif 000013
【図１２】
2011118841.tif 000014
【図１３】
2011118841.tif 000015
【図１４】
2011118841.tif 000016
【図１５】
2011118841.tif 000017
【図１６】
2011118841.tif 000018
【図１７】
2011118841.tif 000019
【図１８】
2011118841.tif 000020
【図１９】
2011118841.tif 000021
【図２０】
2011118841.tif 000022
【図２１】
2011118841.tif 000023
【図２２】
2011118841.tif 000024
【図２３】
2011118841.tif 000025
【図２４】
2011118841.tif 000026
【図２５】
2011118841.tif 000027
【図２６】
2011118841.tif 000028
【図２７】
2011118841.tif 000029
【図２８】
2011118841.tif 000030
【図２９】
2011118841.tif 000031