bio_img_japan-community

MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

ソルバーを制する者が Simscape を制す〜最大 20 倍高速化の秘訣〜

今回はアプリケーションエンジニアリング部の渡辺、小林がお送りします。


こんにちは、アプリケーションエンジニアリング部の渡辺です。Simscape を使い始めた際に、「思ったより計算が遅い」「なぜか計算が発散してしまう」といった悩みに直面したことはないでしょうか。
お客様からも同様のご相談をいただくことが多く、その原因を体系的に説明する難しさを感じることが少なくありません。一方で、こうした課題の中には、ソルバー設定やモデリングのちょっとした工夫によって、比較的容易に改善できるケースも少なくありません。
本記事では、そうした課題に対して、ソルバーの観点から整理していきます。まずは、なぜSimscape モデルが重くなりやすいのか、その背景から見ていきましょう。
登場人物:渡辺(顧客窓口エンジニア)、小林(Simscapeエキスパート)

1. はじめに ― Simscape あるある悩み相談

1D-CAE ツールとしてSimscape の活用が広がる一方、期待通りの計算性能や安定性が得られず、原因に悩む場面も少なくありません。顧客窓口エンジニアの渡辺が、Simscape のエキスパートの小林にその悩みを相談するところから話を始めましょう。
【渡辺】最近、お客さんから「Simscape を導入してみたが、計算が思ったより遅い」とか「理由もよくわからないまま計算が発散してしまう」という相談を受けることが増えています。原因が絞り込めないこともあって、正直なところ具体的なアドバイスに自信が持てないんです。
【小林】それはよく聞く悩みですね。Simscape は3D CAE ほど重くはないけれど、ブラックボックスのROM(Reduced Order Model) やDNN(Deep Neural Network) とは違い物理的な解釈ができる、そのバランスが1D-CAE の魅力なんですが、その分、ソルバーの特性をモデルの特性に合わせて適切に設定しないと、速度や安定性で苦労することが多いです。今日はその解決策を体系的にお話ししましょう。
【渡辺】ぜひお願いします。どこから始めればいいですか?
【小林】まずは「なぜSimscape モデルは重くなりやすいのか」という根本的な理由から理解しましょう。そこを押さえると、後の対策がすっと腑に落ちます。

2. 見た目はシンプル、中身は複雑 ― Simscape モデルの正体

【渡辺】熱交換器のSimscape モデルを確認したとき、ブロック数が少ないのに実行が重く、お客さんから「なんでこんなに遅いんだ?」と言われて困ったことがあります。シンプルに見えるのに、なぜ重くなるんでしょうか?
【小林】まさに氷山と同じなんです。Simscape モデルは、表面上は非常にコンパクトで読みやすいですが、各ブロックの裏側には通常のSimulink モデルでは想像できないほど複雑な数式が内包されています。特に流体ドメインが絡むモデルはその傾向が顕著です。
1 :Simscape モデルの複雑さのイメージ
【小林】この複雑な数式をコントロールしているのが「ソルバー」です。ソルバーの特性をモデルに合わせて適切に設定することが、速度改善の鍵になります。モデルの複雑さを定量的に把握するには「Simscape モデル統計の表示」機能が便利です。

3. 固定ステップ vs 可変ステップ使い分けの判断基準

【渡辺】お客さんから「ソルバーは何を使えばいいですか?」とよく聞かれるのですが、固定ステップと可変ステップの選び方の基準を上手く説明できていなくて困っています。どう違うんでしょうか?
【小林】クルマの速度制御で考えるとわかりやすいです。固定ステップは「カーブでも直線でも常に一定速度で走るクルマ」、可変ステップは「先行車両がガイドしてくれて、道路状況に合わせて速度を自動調整するクルマ」のイメージです。
2 :固定ステップ(一定速度)と可変ステップ(速度自動調整)のイメージ
【小林】可変ステップは計算エンジンが2 つ分動くため負荷は高いですが、精度と計算速度を自動で最適化してくれるので、その結果安定性の高く発散しにくいです。一方、固定ステップは設定したステップサイズで常に計算するため、設定さえ適切なら計算負荷が一定で予測しやすいです。HILS のように実時間実行が必要な場合は固定ステップ一択です。
【渡辺】可変ステップはお任せで便利そうですが、許容誤差やステップサイズなどの設定はどう調整すればいいですか?
【小林】主な設定は3 つです。
①許容誤差:計算精度の基準です。大きくすると速くなりますが精度が落ちます。
②最大ステップサイズ:現象を見逃したくない場合に上限を設けます。
③最小ステップサイズ:計算が極端に細かくなりすぎるのを防ぎます。
まずはデフォルトのAuto で試して、問題があれば調整するアプローチが基本です。

4. Simscape に適したソルバー設定とは

【渡辺】PC 上でのシミュレーション(MILS) であれば精度や安定性からも、基本は可変ステップを利用するのが良いと理解しました。ただ、可変ステップの場合、Simulink にはODE ソルバーが何種類もありますが、Simscape ではどれを選ぶのが推奨なんでしょうか?
【小林】Simscape では微分方程式を解くため、「スティッフ(Stiff) な問題」やDAE (微分代数方程式) を扱うことが多いです。そのため、陰的ソルバー(Implicit Solver) が推奨されます。具体的にはode15s、ode23t、そしてSimscape 専用のdaessc などです。
3 :Simscapeで推奨される可変ステップソルバー一覧
【渡辺】「スティッフな問題」とはどういう状況のことを指しますか?
【小林】時間スケールが大きく異なる複数の動特性が混在する状態です。例えば電気系ミリ秒単位)と機械系(秒単位)が同じモデルに混在するケースがそうです。陽的ソルバー(ode45 など)はこういった問題では非常に細かいステップで計算しないと発散するため計算量が膨大になります。陰的ソルバーはこれを効率的に処理できます。ただし、ソルバーの適性はモデルの特性に大きく依存するので、最終的には試してみることが重要です。

5. HILS や高速実行のためのローカルソルバー

【渡辺】お客さんは次のステップとしてHILS (Hardware-in-the-Loop Simulation) への展開を検討されています。その場合、先ほど固定ステップでの実行が必要になると伺いましたが、可変ステップで安定性を実現したように、固定ステップでの解決方法はないのでしょうか?
【小林】そこで登場するのがSimscape のローカルソルバーです。Simscape ネットワーク専用の固定ステップソルバーで、後退オイラー法・台形法・分割法(ロバスト/高速)などのタイプがあります。陰的解法を各ステップ内で固定回数のみ反復することで、計算量を事前に見積もれる固定コスト実行を実現しています。通常のSimulink ソルバーとは独立してSimscape ネットワーク内だけに作用するため、固定ステップ実行でも物理モデルの計算精度を維持しやすいのが特徴です。
ただし、ローカルソルバーを使用した場合には、ソルバー区分に関して注意が必要です。
【渡辺】ソルバーの「区分」という概念は初めて聞きました。具体的に何を意識すればいいですか?
【小林】ソルバー区分の一例として、Local ソルバーを使用した場合、Simulink のソルバーとSimscape のソルバーはそれぞれ別のドメインとして動いています。この2つの間で信号のやり取り(往復)が多いほど計算負荷が増えます。Simscape とSimulink のブロックを混在させる場合は、信号の往復が少なくなるようなモデル設計を意識することが重要です。
4 :Simulink ⇔ Simscape のソルバー区分のイメージ

6. 遅い!その原因をどう探る?プロファイラー活用法

【渡辺】これまでの説明で理論はわかってきましたが、実際に遅くなっているモデルに向き合うとき、どこから手をつければいいかわからないことが多くて・・・。何か体系的なアプローチはありますか?
【小林】 速度低下の原因を特定・改善していくための体系的なアプローチがありますので、それに沿って進めるのをお勧めします。以下のようSTEP0 ~ STEP4 に関して説明していきます。
5 :実行状態の確認から高速化までのアプローチ
【小林】まずはプロファイラーで原因を「見える化」することから始めましょう。Simulink には2種類のプロファイラーがあります。
まず、STEP0 としてSimulink プロファイラーを使って、シミュレーションの各フェーズ・各ブロックの実行時間を測定して、全体の中でどのブロックが重いかを特定します。
次に、STEP1 ではソルバープロファイラーを使って、ゼロクロッシング検出やソルバー例外など、シミュレーションイベントを記録して、なぜサンプルタイムが細かくなっているかを特定できます。
図6 :Simulink プロファイラー
7 :ソルバープロファイラー
Simulink プロファイラー(参考リンク)
【渡辺】これらの2 つのプロファイラーを使えば、ある程度問題個所や原因の特定ができるんですね。どのように結果を参照すれば効率よく調査ができますか?
【小林】Simscape の場合は特にソルバープロファイラーの結果の参照方法がポイントになりますので、少し詳細に解説します。最終的には遅さの原因を引き起こしているブロックを発見することがゴールです。
まず、最初のポイントとしては、ソルバープロファイラーを使う際には可変ステップを使うことが推奨される点です。可変ステップは、ソルバー自体がその時の状態に反応してステップを細かくしてくれるため、それをログとして解析に使えます。一方で固定ステップの場合は問題があってもステップが固定されてしまっているため、情報が得られないのが問題です。では、実際にソルバープロファイラーを実行してみましょう。
【渡辺】プロファイラーを実行したところ、1e-15 秒という超細かいステップでサンプリングしている箇所があることがわかりました。1ms 程度の現象を見ようとしていたので、1/100 程度の10us 程度なのかと思っていましたが、一体これはどういうことですか?
8:サンプリングレートが想定より細かくなってしまっているケース
【小林】それはソルバーが急激な変化を検知して、精度を確保しようとしているサインです。主な原因は2つあります。ひとつは「ゼロクロッシング」、もうひとつは「ソルバーの例外」です。
【渡辺】それぞれどういう意味ですか?
【小林】ゼロクロッシングは、スイッチの切り替えや接触など、モデル内の状態が不連続に変化する瞬間のことです。ソルバーはまずその発生を検出し、発生が確認された場合はステップを細かく刻みながらその正確なタイミングを特定します。Simscape ではこの処理がより複雑になるため、シミュレーション速度がさらに低下する場合があります。
ソルバー例外は、収束不良や不連続性などをソルバーが検知した際に、タイムステップを縮小して再試行する現象です。これが頻発すると計算ステップが細かくなるだけでなく、各ステップでの反復計算も増加し、シミュレーション速度が大幅に低下します。
【渡辺】特にゼロクロッシングとソルバー例外に注目するということですね。
【小林】次にこれらを使って実際に速度低下を引き起こしているブロックを特定していく手順に関して説明していきます。
まず、STEP1 として、想定よりステップが細かくなってしまっている部分を注目します。次にSTEP2 としてステップが細かくなってしまっている原因を特定していきます。この際には、①ゼロクロッシング/ソルバー例外などのカテゴリ、②その事象におけるステップ数の合計、モデルの状態 ( 原因特定のヒントになる情報 ) という流れで確認するのが良いです。そして最後に、STEP3 として対象となるモデルを表示させます。
9:ソルバープロファイラーから速度低下を引き起こすブロックの特定
【渡辺】プロファイラーで原因となっているブロックが特定できたら、どう対処すればいいですか?
【小林】原因ブロックが特定できたら、次のセクションで紹介するドメインごとの対処法を参考にしてください。一般的な流れとして、先ほど説明したように、まず可変ステップのソルバープロファイラーで問題を診断し、改善した後に固定ステップへ移行するアプローチが推奨されます。
ゼロクロッシング検出(参考リンク)

7. よくあるトラブル事例と対処法

【小林】ここからは代表的なトラブル事例と対処法に関して紹介していきますが、全体像は以下の図のようなものです。
【渡辺】確かに私がお客さんから問い合わせを受けるのはこれらに関連するものが多いです。
10 :機械・流体を中心とした注意すべき対象の代表例
【小林】イメージとして、直角に曲がるカーブが車にとって厳しい条件であるように、急激な変化はソルバーにとって厳しい条件となります。
【渡辺】なるほど、わかりやすい例えです。
図11 直角に曲がるカーブ (≒急激な変化)
【小林】それでは、一つずつ紹介していきます。
一つ目はメカニカルドメインにおける摩擦です。摩擦はSimscape で特に注意が必要なモデル化対象のひとつです。理由は「Stick-Slip 」と呼ばれる自励振動現象にあります。静止摩擦 (Stick) から動摩擦 (Slip) へ切り替わるとき、不連続な状態変化が繰り返し発生します。これがゼロクロッシングを大量発生させて、ソルバーが細かいステップで計算せざるを得ない状態になるんです。
【渡辺】対処法はどうすればいいですか?
【小林】許容できる精度の範囲で、静摩擦と動摩擦の切り替わり領域をできるだけ滑らかに設定することが基本です。具体的にはStiffness (剛性)やDamping (減衰) パラメータの見直し、あるいはtanhによるスムージング関数の適用が効果的です。近年のバージョンのSimscape Friction ブロックにはtanh スムージングオプションが追加されているので、積極的に活用することをお勧めします。また、静摩擦係数と動摩擦係数をほぼ同じ値に設定して切り替わりを最小限に抑える方法も有効です。
図12 : 静摩擦/動摩擦のモデル化における注意点
【小林】二つ目もメカニカルドメインで発生する接触現象です。接触現象も摩擦と同様、瞬間的な力が発生するためソルバーにとって厳しい条件です。Simscape では距離を基準にしたペナルティー法でモデル化されています。ここでポイントになるのが「Transition Region Width (遷移領域幅) 」パラメータです。この値を適切に設定することで、接触時の力の変化を滑らかにでき、ソルバーへの負担を大幅に軽減できます。平衡点やつり合いのみに注目し、早期に収束するパラメータ選択をすることも有効です。
【渡辺】接触現象による速度低下は私も良く聞きます。
図13 : 接触のモデル化における注意点
【小林】次に三つ目の例として、機構領域 (Multibody) でよく起きるトラブルと対処法です。まず、本来存在する摩擦をゼロにするとエネルギーが減衰せず、発振や不安定な挙動が発生しやすくなります。この場合、微小なダンピングを追加することが推奨されます。次に、Joint ブロックでComposite Force Sensing を有効にすると、拘束力計算のための追加計算が発生し、シミュレーション時間が増加します。力の取得は必要な場合のみに限定し、代替として逆動力学の利用も検討します。
全体として、過度な理想化は数値計算の不安定化や計算負荷増大につながるため、適切なモデル化が重要です。
【小林】四つ目の例は流体ドメインのDry Node で、流体系では特に注意が必要です。
【渡辺】これも良く聞きますが、実はあまり理解してなかったのが正直なところです。
【小林】ダイナミクス(体積弾性率などの動特性)を持たないブロックを接続した場合、計算の収束性が悪化します。この状態をDry Node と呼びます。対処法は、バルブなどの接続先にVolume ブロック(体積ダイナミクスを付加するブロック)を追加することです。また、バルブ自体に過渡応答の設定を追加したり、平滑化係数を利用することも効果的です。
図14 : バルブの過渡応答、Dry Node における注意点
【小林】最後の例は、離散系と連続系の接続において発生する現象です。
【渡辺】離散系のコントローラと連続系のSimscape プラントモデルを接続すると、急に計算が不安定になることがあります。Simulink-PS コンバーターをお作法として配置していますが、適切な設定を理解できていません。
【小林】Simulink-PS コンバーターの「入力のフィルタ処理」設定が重要です。離散コントローラからの信号はステップ状に変化するため、連続系の物理モデルに直接入力するとソルバーが急激な変化に対応しようとして計算が細かくなります。フィルタ処理によりステップ的な変化を緩和することで、プラントモデルのStiff な挙動を和らげ、計算負荷を軽減できます。
図15 : 離散系と連続系の接続における注意点(フィルタ時定数による差)
【渡辺】フィルタの時定数はどうやって決めればいいですか?
【小林】物理現象に即した値を設定するのが原則です。つまり、実際のシステムで存在する信号の遅れ( 機械的・電気的な遅れ) をモデル化した値が理想です。ただし、フィルタ処理自体の計算負荷が高くなったり、1 次遅れフィルタが適さないケースもあります。その場合に活用できるのが「First Order Hold (FOH) ブロック」です。サンプリング周期を粗く維持しながら、外挿を使ってスムージングを実現できるため、フィルタとは異なるアプローチでStiffな挙動を緩和できます。
図16 : 離散系と連続系の接続における注意点(First Order Hold適用前後の比較)

8. まとめソルバーを理解して柔軟な運用へ

【渡辺】今日学んだことを振り返ると、一番重要なポイントはどこですか?
【小林】Simscape の高速化とトラブルシューティングの鍵は大きく3つです。
第一に、ソルバーの基礎を理解すること。固定ステップ・可変ステップ・ローカルソルバーそれぞれの特徴を把握し、モデルの用途に応じて選択できるようにしましょう。
第二に、プロファイラーで原因を見える化すること。感覚だけに頼らず、Simulink プロファイラーとソルバープロファイラーを活用して速度ボトルネックを数値で確認してください。
第三に、モデル化の詳細度を意識すること。摩擦・接触・流体ドメインなど、ソルバーに厳しい条件が発生しやすい箇所ではパラメータ調整やスムージング適用で計算負荷を軽減できます。
【渡辺】ソルバーって難しそうなイメージがあったんですが、今日の話を聞いてだいぶ見通しが立てられそうです。次にお客さんに相談されたとき、プロファイラーを一緒に見ながら具体的なアドバイスができそうです!小林さん、ありがとうございました。

参考リンク一覧

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.