バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回は、FMU/FMIのシミュレーション方式について説明。
- Model Exchange(通称ME)。
外部にSolver。 - Co-Simulation(通称CS)。
内部にSolver。
SolverはODE Solverこと常微分方程式解決機能。
以前やった差分法(オイラー法:テイラー1次相当の近似)、中心差分法(ホルン法:テイラー2次相当の近似)。
今回はそのSolverの位置づけや目的について触れてみようと思う。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
FMU/FMIのシミュレーション方式とSolverの位置づけを図解

前回の話を図にまとめてみた。

おーい!
それを先にやってよー!!

えー。
けっこうメンドクサイんだよー。

まぁそれは分かる。

とりえあず貼る。

Solverの位置づけ

MEは外部っていってたけど、
プラットフォーム側で演算させるって意味だったのかー。

そうだね。

これって、どっちが良いとかってあるの?

そうだねー。
精度含めてコントロールしたいならME。
とりあえずサクっと動かしたいならCS。
ってところかな。

精度をコントロール?
なんか具体例みたいなのってない?

ME方式のようにSolverをFMUの外に持ってくる理由としては以下が考えらえるかな。
- 制御モデル等は求める精度からsolverを調整したい場合がある。(テイラー1次or2次)
- 軽量solverにして全体のシミュレーション速度を上げたい。(ルンゲクッタ法=テイラー4次)
solverを調整したい場合

うーん、イマイチぴんとこない。

制御側って結局のところはECUことソフトウェア側で処理するじゃん?

うん。
ほとんどの場合はそうだろうね。

そうすると、演算負荷を上げたくないからテイラー1次か2次ぐらいの近似にすると思うんだよね。

あ!そうか!
わざとECUで実現している精度に落としたい場合があるってことか?!

その通り。
全体のシミュレーション速度を上げたい

シミュレーション速度を上げたいって方はどうなるの?

ふむ。
プラントモデルなんかは制御モデルと違って実物を模すものなので
限界まで精度を上げたいってのはある。

そうだね。
近似するにしても可能な限り本物に近づけたいよね。

しかし、近似精度を上げると演算負荷があがる。
ECUほどじゃないにしても演算速度を上げたい場合は・・・。

あ、こっちも精度を少し落として調整したい!
ってなるのか!?

そういうことだねー。
MEとCS、結局どっちが良いのか?

じゃー、MEの方が良いってことになるのかな?

まぁCSの方がお手軽ではあるし、
MEをサポートしてないツールもあるだろうから、無条件でMEでOKにはならないかな?
とりあえず動かすことを目的にするならCSが一番楽だし。
S-Functionと同等の使い方を想定するとCS側だし。

なるほど。
そこらへんのトレードオフがあるのかー。
あとS-Functionと同等ってのはCSを使う上ではポイント高いかもね。

と、まぁここまではFMU/FMIの大雑把な話になる。

(これで・・・まだ「大雑把」・・・だと・・・?)
まとめ

まとめだよ。
- FMU/FMIのシミュレーション方式とSolverの位置づけを図解した。
- MEは近似精度を調整したい場合に有利。
- ECUの粗い制度を再現したい。
- プラントの演算負荷を下げてシミュレーションを高速化したい。
- CSは内部にSolverがあり、繋ぐだけで動くので設定が簡単。
- CSのみのサポートしかしていないツールもある。
バックナンバーはこちら。
コメント