高速リスタートによる反復的なシミュレーションの改善
一般的なシミュレーションでは、モデルのシミュレーションの実行時に次の処理が行われます。
モデルをコンパイルする
モデルのシミュレーションを実行する
シミュレーションを終了する
モデルを開発するときは、一般にシミュレーションを繰り返しながら設計を進めていくことになります。たとえば、特定の応答が得られるように入力の値やブロックのパラメーターを調整する場合があります。それらの値やパラメーターを変更しても、次のシミュレーションの実行前に必ずしもモデルのコンパイルが必要になるとは限りません。しかし、従来のワークフローでは、変更によってモデルの構造が変わらない場合でも、シミュレーションを実行するたびにモデルがコンパイルされます。そのため、コンパイルのたびに処理に時間がかかり、全体のシミュレーション時間が長くなります。
高速リスタートでは、1 回ごとにモデルをコンパイルしたりシミュレーションを終了したりせずに、シミュレーションを繰り返し実行することができます。高速リスタートを使用すれば、モデルのコンパイルは 1 回だけで済みます。その後、ルート入力端子の値、モデルの初期状態の値、From Workspace ブロック データを変更し、パラメーターやルート入力を調整し、再コンパイルなしでモデルのシミュレーションを再度実行できます。高速リスタートでは、複数のシミュレーション フェーズを 1 つのコンパイル フェーズに関連付けることで、反復的なシミュレーションの効率を高めます。
高速リスタートは、モデルの構造を変更する必要がないワークフローで使用します。高速リスタートが特に役立つワークフローとしては、次のような場合が挙げられます。
モデルで入力やパラメーターを毎回変えてシミュレーションを複数回実行する必要がある場合。
モデルのコンパイルに数秒以上かかる場合。
計算量の多い再コンパイル処理を実行しなくても適切なソルバーが選択されるように実行時にソルバーを切り替える必要がある場合。
高速リスタートはノーマル モードとアクセラレータ モードのシミュレーションで使用できます。高速リスタートをアクセラレータ モードで使用すると、シミュレーション時間が短縮され、コンパイルの実行が 1 回だけで済むようになります。
高速リスタート シミュレーションのスクリプト作成
シミュレーションを実行するために作成したプログラムによるシミュレーションのワークフローやスクリプトで高速リスタートを使用できます。次の方法で高速リスタート シミュレーションをプログラムで実行できます。
関数
sim
、Simulation
オブジェクト、またはシミュレーション コマンドを使用して、シミュレーションを一度に 1 つずつ繰り返し実行するSimulink.SimulationInput
オブジェクトの配列と関数sim
、parsim
、またはbatchsim
を使用して複数のシミュレーションをバッチとして実行する
スクリプトおよびプログラムによるシミュレーションで高速リスタートを使用する方法は、これらのどのワークフローを使用するかによって異なります。
一度に 1 つずつ実行する個別の反復シミュレーションに高速リスタートを使用するには、FastRestart
パラメーターを使用します。FastRestart
パラメーターは、Simulink® ツールストリップの [高速リスタート] オプションに対応します。Simulink エディターを使用して高速リスタートを有効にすると、FastRestart
パラメーターが有効になり、関数 set_param
を使用して FastRestart
パラメーターを有効にすると、Simulink ツールストリップの [高速リスタート] オプションが有効になります。
次のいずれかの方法で、個別の反復シミュレーションに対して高速リスタートを有効にすることができます。
関数
setModelParameter
を使用して、SimulationInput
オブジェクトまたはSimulation
オブジェクトでFastRestart
パラメーターを設定します。s = setModelParameter(s,FastRestart="on");
関数
sim
の最初の入力引数としてモデルの名前を指定すると、関数sim
の名前と値の引数としてFastRestart
パラメーターを指定できます。mdl = "MyModel"; out = sim(mdl,FastRestart="on");
関数
set_param
を使用してFastRestart
パラメーターを有効にします。mdl = "MyModel"; set_param(mdl,FastRestart="on");
Simulink ツールストリップの [シミュレーション] タブで [高速リスタート] をクリックします。
個々の反復シミュレーションで高速リスタートを有効にする方法に関係なく、高速リスタートを有効にすると、高速リスタートを終了するか無効にするまで、実行する各シミュレーションの後にモデルは高速リスタートでコンパイルされて初期化されたままになります。個々の反復シミュレーションの実行が終了したら、次のいずれかのオプションを使用して高速リスタートを終了します。
関数
set_param
を使用してFastRestart
パラメーターを無効にします。mdl = "MyModel"; set_param(mdl,FastRestart="off");
Simulink ツールストリップの [シミュレーション] タブで [高速リスタート] をクリックします。
ヒント
Simulation
オブジェクトを使用してシミュレーションを実行する場合、関数 terminate
を呼び出すことで高速リスタートを終了または無効にすることができます。
SimulationInput
オブジェクトの配列と関数 sim
、parsim
、または batchsim
を使用して複数のシミュレーションをバッチとして実行するときに高速リスタートを使用するには、sim
、parsim
、または batchsim
の呼び出しで名前と値の引数 UseFastRestart
を "on"
として指定します。FastRestart
パラメーターは、複数のシミュレーション ワークフローには適用されません。名前と値の引数 UseFastRestart
を指定すると、シミュレーション ワーカーごとに 1 回だけモデルがコンパイルされます。各ワーカーの最後のシミュレーションが終了し、すべてのシミュレーションが完了すると、モデルは高速リスタートで初期化されなくなり、シミュレーション ステータスは inactive
になります。
この表は、プログラムによるシミュレーション ワークフローごとに高速リスタートを使用する方法をまとめたものです。
シミュレーション ワークフロー | 高速リスタートを有効にする方法 | シミュレーション後のモデルのステータス | 高速リスタートを終了する方法 |
---|---|---|---|
| 関数 mdl = "MyModel"; sm = simulation(mdl); sm = setModelParameter(sm,FastRestart="on"); start(sm) | 高速リスタートでコンパイルおよび初期化されます。 シミュレーション ステータスは | 関数 terminate(sm) |
関数 | 関数 mdl = "MyModel"; simin = Simulink.SimulationInput(mdl); simin = setModelParameter(simin,FastRestart="on"); out = sim(simin); | 高速リスタートでコンパイルおよび初期化されます。 | モデルの set_param(mdl,FastRestart="off") |
関数 sim を使用して個別のシミュレーションを実行する |
mdl = "MyModel"; out = sim(mdl,FastRestart="on"); | ||
SimulationInput オブジェクトの配列を使用して複数のシミュレーションを実行する | 関数 mdl = "MyModel": simin(1:10) = Simulink.SimulationInput(mdl); % Configure each simulation using % SimulationInput object out = sim(simin,UseFastRestart="on"); | モデルは高速リスタートではコンパイルも初期化もされません。最後のシミュレーションが終了し、高速リスタートが無効になります。 | 適用外。最後のシミュレーションが終了し、高速リスタートが無効になります。 |
制限
高速リスタートは、ラピッド アクセラレータ モードまたはエクスターナル モードのシミュレーションではサポートされません。
高速リスタートは、ローカル ソルバーを使用するように構成された参照モデルを 1 つ以上含むモデルの階層構造に対してはサポートされません。詳細については、Use Local Solvers in Referenced Modelsを参照してください。
モデルが再初期化された状態のときは、以下を行うことができません。
構造を変更する。
サンプル時間などの調整不可能なパラメーターを変更する。
モデルへの変更を保存する。モデルへの変更を保存するには、高速リスタートをオフにしなければなりません。
モデルの操作点の保存と復元をサポートしないブロックがモデルに含まれている場合は、そのモデル内で高速リスタートをオンにすることはできません。以下のブロックが含まれます。
R2016a より前の SimEvents® ブロック
System object を含む MATLAB® 関数ブロック
モデルの操作点
get
メソッドおよびset
メソッドを実装していないがPwork
ベクトルが宣言されている S-FunctionFrom Multimedia File
To Multimedia File
Multipath Rician Fading Channel
Multipath Rayleigh Fading Channel
Derepeat
DC Blocker
Stack
Queue
Read Binary File
Write Binary File
Video Viewer
Frame Rate Display
Video From Workspace
Video To Workspace
あるモデルが、Simscape™ ブロックを含んでいてアクセラレータ モードでシミュレーションを実行するモデルを直接または間接的に参照する場合は、そのモデル内で高速リスタートをオンにすることはできません。
シミュレーション間で、高速リスタートはバス プロパティなどの設計データへの変更を処理しません。
パラメーターの調整可能性の制限が適用されます。その他のモデル化の目的に関する調整可能性の考慮事項と制限を参照してください。
固定小数点ツールでは、モデルが高速リスタートでシミュレートされているときのサポートが限られています。シミュレーション範高速リスタート囲と派生範囲を収集してデータ型を推奨するには、高速リスタートを終了しなければなりません。
同じ参照モデルに対して複数のモデル参照がある場合、モデルが再初期化された状態のときにモデルの可視性を変更することはできません。
高速リスタートは、Simulink プロファイラーと互換性がありません。
高速リスタートでモデルをシミュレートするときは、モデル アドバイザーを使用したチェックを実行することはできません。
高速リスタートを有効にすると、使用する構文に関係なく、関数
sim
は単出力のSimulink.SimulationOutput
形式のみをサポートします。高速リスタートを有効にすると、調整不可のパラメーターを引数として関数
sim
に渡すことはできません。高速リスタート モードで Subsystem Reference ブロックを使用してモデルをシミュレーションすると、サブシステム ファイルに加えられた変更は構造的な変更であるため、モデルには伝播されません。