Main Content

高速リスタートによる反復的なシミュレーションの改善

一般的なシミュレーションでは、モデルのシミュレーションの実行時に次の処理が行われます。

  1. モデルをコンパイルする

  2. モデルのシミュレーションを実行する

  3. シミュレーションを終了する

モデルを開発するときは、一般にシミュレーションを繰り返しながら設計を進めていくことになります。たとえば、特定の応答が得られるように入力の値やブロックのパラメーターを調整する場合があります。それらの値やパラメーターを変更しても、次のシミュレーションの実行前に必ずしもモデルのコンパイルが必要になるとは限りません。しかし、従来のワークフローでは、変更によってモデルの構造が変わらない場合でも、シミュレーションを実行するたびにモデルがコンパイルされます。そのため、コンパイルのたびに処理に時間がかかり、全体のシミュレーション時間が長くなります。

高速リスタートでは、1 回ごとにモデルをコンパイルしたりシミュレーションを終了したりせずに、シミュレーションを繰り返し実行することができます。高速リスタートを使用すれば、モデルのコンパイルは 1 回だけで済みます。その後、ルート入力端子の値、モデルの初期状態の値、From Workspace ブロック データを変更し、パラメーターやルート入力を調整し、再コンパイルなしでモデルのシミュレーションを再度実行できます。高速リスタートでは、複数のシミュレーション フェーズを 1 つのコンパイル フェーズに関連付けることで、反復的なシミュレーションの効率を高めます。

高速リスタートは、モデルの構造を変更する必要がないワークフローで使用します。高速リスタートが特に役立つワークフローとしては、次のような場合が挙げられます。

  • モデルで入力やパラメーターを毎回変えてシミュレーションを複数回実行する必要がある場合。

  • モデルのコンパイルに数秒以上かかる場合。

  • 計算量の多い再コンパイル処理を実行しなくても適切なソルバーが選択されるように実行時にソルバーを切り替える必要がある場合。

高速リスタートはノーマル モードとアクセラレータ モードのシミュレーションで使用できます。高速リスタートをアクセラレータ モードで使用すると、シミュレーション時間が短縮され、コンパイルの実行が 1 回だけで済むようになります。

高速リスタート シミュレーションのスクリプト作成

シミュレーションを実行するために作成したプログラムによるシミュレーションのワークフローやスクリプトで高速リスタートを使用できます。次の方法で高速リスタート シミュレーションをプログラムで実行できます。

  • 関数 simSimulation オブジェクト、またはシミュレーション コマンドを使用して、シミュレーションを一度に 1 つずつ繰り返し実行する

  • Simulink.SimulationInput オブジェクトの配列と関数 simparsim、または 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 オブジェクトの配列と関数 simparsim、または batchsim を使用して複数のシミュレーションをバッチとして実行するときに高速リスタートを使用するには、simparsim、または batchsim の呼び出しで名前と値の引数 UseFastRestart"on" として指定します。FastRestart パラメーターは、複数のシミュレーション ワークフローには適用されません。名前と値の引数 UseFastRestart を指定すると、シミュレーション ワーカーごとに 1 回だけモデルがコンパイルされます。各ワーカーの最後のシミュレーションが終了し、すべてのシミュレーションが完了すると、モデルは高速リスタートで初期化されなくなり、シミュレーション ステータスは inactive になります。

この表は、プログラムによるシミュレーション ワークフローごとに高速リスタートを使用する方法をまとめたものです。

シミュレーション ワークフロー高速リスタートを有効にする方法シミュレーション後のモデルのステータス高速リスタートを終了する方法

Simulation オブジェクトを使用して個別のシミュレーションを実行する (R2024a 以降)

関数 setModelParameter を使用して、Simulation オブジェクトで FastRestart パラメーターを設定します。

mdl = "MyModel";
sm = simulation(mdl);
sm = setModelParameter(sm,FastRestart="on");
start(sm)

高速リスタートでコンパイルおよび初期化されます。

シミュレーション ステータスは initialized です。

関数 terminate を使用してシミュレーションを終了します。

terminate(sm)

関数 sim とスカラー SimulationInput オブジェクトを使用して個別のシミュレーションを実行する (R2024a 以降)

関数 setModelParameter を使用して、SimulationInput オブジェクトで FastRestart パラメーターを設定します。

mdl = "MyModel";
simin = Simulink.SimulationInput(mdl);
simin = setModelParameter(simin,FastRestart="on");
out = sim(simin);

高速リスタートでコンパイルおよび初期化されます。

モデルの FastRestart パラメーターを "off" に設定します。

set_param(mdl,FastRestart="off")
関数 sim を使用して個別のシミュレーションを実行する

FastRestart パラメーターを名前と値の引数として指定します。

mdl = "MyModel";
out = sim(mdl,FastRestart="on");
SimulationInput オブジェクトの配列を使用して複数のシミュレーションを実行する

関数 simparsim、または batchsim で名前と値の引数 UseFastRestart を使用します。

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-Function

    • From 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 ブロックを使用してモデルをシミュレーションすると、サブシステム ファイルに加えられた変更は構造的な変更であるため、モデルには伝播されません。

関連するトピック