Modelica: サイバーフィジカルシステムをモデリングするためのオブジェクト指向言語
(modelica.org)- Modelica は、複雑なサイバーフィジカルシステムをより効率的にモデリングするための オブジェクト指向言語
- 再利用可能なコンポーネントを 非因果接続 で組み合わせ、数式に基づくモデルを構成できる
- 第一原理(first principles) に基づくモデリングを容易にするよう設計されており、物理システムの構造と動作を直接表現することに重点を置いている
- 公式サイトでは、Modelica 言語、ライブラリ、ツール、Modelica Association の情報をまとめて提供している
- Association 関連資料、組織会員、マーチャンダイジングショップ、メール・ニュースレターの連絡先もあわせて確認できる
Modelica 言語のモデリング方式
- Modelica はサイバーフィジカルシステムをモデリングするためのオブジェクト指向言語
- 再利用可能なコンポーネントを 非因果接続 の方式で組み合わせられる
- コンポーネントは 数式 によって支配されるモデルとして表現される
- この構造は、第一原理に基づくモデリングを容易にするための設計に近い
公式サイトで提供される資料
-
言語、ライブラリ、ツール
- Modelica Language: Modelica 言語の情報
- Modelica Libraries: Modelica ライブラリの情報
- Modelica Tools: Modelica ツールの情報
- Modelica Association: Modelica Association の情報
-
Association と連絡先
- Modelica Association には 組織会員 がおり、サイトでは追加で 21 以上の会員を確認できる
- Modelica merchandising shop からマーチャンダイジングショップへ移動できる
- 連絡先はメール board@modelica.org と Modelica Association Newsletter
1件のコメント
Hacker News の意見
ウェブサイトの説明どおり、Modelica は数学的な挙動を記述する高水準の宣言型言語で、通常は工学システムに適用されます
HVAC 業界ではかなり広く使われており、私の場合、制御エンジニアとして最適化作業のために、システムエンジニアに複数コンポーネントの FMU を依頼できます
FMU(Functional Mockup Unit)は、他のアプリケーションが実行できる動的システムを表すスタンドアロンのバイナリです
私のバックグラウンドは強化学習、モデル予測制御、Python 方面ですが、ドメイン特化言語で書かれた物理ベースのモデルを Python のワークフローに埋め込めるので便利です
Modelica は Python/MATLAB のような一般的な命令型プログラミングとは見方が異なります
方程式、変数、制約条件を順序に関係なく定義すると、コンパイラがどの変数を先に解くかなど、シミュレーションの実行方法を決定します
OpenModelica は言語標準のオープンソース実装として大きく進歩しましたが、産業界では Dymola のようなプロプライエタリなアプリケーションがまだ優位です
https://fmi-standard.org/
https://fmpy.readthedocs.io/en/latest/
https://openmodelica.org/
Julia 言語の背後にある商業組織がこれらのツールを作るために DARPA の資金提供を受けており、数値解析研究者、スケーラブルな計算、電気・機械のような工学システムのモデリングに関するドメイン専門家を一つにまとめています
シミュレーションの未来はこちらに向かう気がします
https://juliahub.com/products/juliasim
https://news.ycombinator.com/item?id=26425659
https://docs.sciml.ai/DiffEqDocs/stable/
かなりニッチな非因果的言語で、モータースポーツ(F1、NASCAR)ではドライバーシミュレータのリアルタイムシミュレーションに広く使われています
言語仕様はオープンソースですが、商用コンパイラが複数あり、Dymola が最も有名です
この言語でよくコーディングしていますが、非因果性は非常に強力です
モデルをとても合成しやすくしてくれるので、機械システムをレゴブロックのように組み立てると方程式が自動的に出てきます
モデルを反転させることも簡単にできます
プログラミングの世界で最も近い比喩は Haskell です
しかし結局、生成された方程式にソルバーが耐えられず、デバッグ不能なブラックボックスのように見えたため諦めました
私たちのやり方が悪かったのか、オープンソースの代替がまだ対応しきれていないのかは分かりません
非因果的モデリング環境は、記号計算システムにもかなり似ていると感じます
実質的には応用された計算機代数システムだからです
ランディングページの説明だけを見た、この分野の人間ではない立場からすると、ファーストビューに例や例へのリンクがあるとよいと思います
30秒ほどクリックしてみましたが、惹かれる内容は見つかりませんでした
例えば理想気体の法則 PV = nRT には識別子が5つあります
ほとんどのプログラミング言語では、代入される左辺に変数を1つだけ置く必要があるため、T=PV/nR のように書き、別の変数を求めるには似たような方程式セットを別途作る必要があります
Modelica では自然な数学表記のまま同じ方程式を書けば、既知の値に基づいて未知数を求められます
https://mbe.modelica.university/behavior/equations/electrical/
これ以上はよく知りません
物理・電気システムのシミュレーションを書くための、単純化されたフレームワークのように見えます
https://mbe.modelica.university/
5秒ほどクリックして次のところまで行きました
5秒もかからず見つかりました
これが何なのか分からない
ランディングページには例が一つもなく、ランディングページの主要リンクのどこにも例が一つもない
代わりにマグカップやフーディーを買えるグッズストアがあり、「organizational members」という巨大な会社ロゴ群がある
何かを作ったなら、作ったものを見せるべき
すでに必要だと分かっているのでなければ、何なのか調べるのに30秒以上は使わないと思う
なぜこんなに分かりにくくしたのだろう?
ここにたどり着くまでに何回かクリックする必要があった
https://mbe.modelica.university/behavior/equations/first_order/
USBコンソーシアムと比べてみればいい
https://www.usb.org
またはPCI-SIG:
https://pcisig.com
もしかするとデザイン言語が現代的すぎたのかもしれない
25年以上続く業界標準ではなく、スタートアップのプロジェクトだと勘違いしたのでは?
現代的に見えすぎることが認識や期待に悪影響を与え得る、という点は興味深く考える価値がある
2018年頃のサイトデザインだったら反応はどうだっただろう?
http://web.archive.org/web/20180214180117/https://www.modelica.org/
複雑な複数分野のシステムをシミュレーションし、システムの挙動を記述・パッケージ化・交換する方法を必要としている人向けのもの
文字どおり最初の一文
今の職場ではOpenModelicaと一緒にModelicaを使って電磁システムを記述しているが、言語も優れているし、OpenModelicaのグラフィカルユーザー環境も素晴らしい
ときどき、複数物理システム向けのSPICEのようなものだと考えている
Modelicaライブラリはかなり成熟して完成度が高く、OpenModelicaに含まれる数値ソルバーも堅牢で高性能
習得には少し時間がかかったが、今では報われている
さらに、Modelicaが複数のベンダーによって実装された標準であり、オープンソースアプリケーションもあるという点は、ベンダーロックインを避けるうえでも良い
エンジニアや企業にとって、投資しても安全な技術だと思う
FMI標準に基づくFMUエクスポートが第一級の機能であることも大きな価値があり、特にシステムインテグレーターにとって重要
適度に難読化されたシステムモデルを信頼できない相手に渡しつつ、その相手がシステムモデルの利点を十分に得られる
この点では、OpenModelicaはオープンソースのModelingToolkit.jlや関連ライブラリFMIExport.jlを含む競合より先行している
https://openmodelica.org/doc/OpenModelicaUsersGuide/v1.11.0/fmi.html
https://docs.sciml.ai/ModelingToolkit/stable/
https://github.com/ThummeTo/FMIExport.jl
工学ソフトウェアの古くて硬直的なAPI群と比べると、かなり良い標準だった
大学を4年前に卒業したのですが、今になってボンドグラフモデリングの沼に入り、Henry M. Paynter の MIT 講義ノートで独学しながら、職場では Simscape で車両システムをモデリングしています
Modelica と Simscape がボンドグラフを基盤メカニズムとしている、という理解で合っているのか分かりません
この分野の専門家に少し方向づけしてもらえるとうれしいです
今のところ、ボンドグラフ理論を理解すれば、自分が扱うほぼすべてのシステムを直感的に理解できるようになると信じています
この分野が意外にニッチな点も興味深いです
周囲の同僚の大半は特に気にしていませんでしたが、知ったときには自分のあらゆる問題に対する魔法の弾丸のように見えました
https://dirac.ruc.dk/~heine/paynter/analysis_and_design_of_engineering_systems_henry_m_paynter.pdf
実際、Modelica コミュニティとボンドグラフコミュニティには少し対立する面があります
この話についての私の立場は [1] と [2] にあります
ボンドグラフがほぼすべてのシステムを直感的に理解させてくれる、という考えにも同意しません
得られるのは、ボンドグラフ定式化の優雅さへの鑑賞です
しかし30年の産業モデリング経験からすると、そこから引き出される類推は非常に表面的です
受動・線形要素を超えると、類推はすべて破綻します
例えば熱システムにはなぜ運動量がないのか、圧縮性流体があるとどうなるのか、電気システムでクラッチに相当するものは何か、といった問題が生じます
ボンドグラフは本当に非因果的なものでもなく、物理により近い別の因果的定式化にすぎません
ボンドグラフのファンは間違いなく同意しないでしょうが、個人的で主観的な見解を共有しているだけです
https://www.linkedin.com/feed/update/urn:li:ugcPost:7272516319944589312?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A7272516319944589312%2C7272661328605900801%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287272661328605900801%2Curn%3Ali%3AugcPost%3A7272516319944589312%29
https://mbe.modelica.university/components/connectors/simple_domains/
関連記事:
All about Modelica: An equation-based language for modeling physical systems - https://news.ycombinator.com/item?id=23690788 - 2020年6月、コメント44件
Modelica - https://news.ycombinator.com/item?id=16013179 - 2017年12月、コメント12件
ModelingToolkit.jl に +1
Modelica で学んだことを取り入れていて、作業していて楽しいです
私の理解では、これは「システム」をかなり一般的な方法で記述する言語であり、システムは微分方程式や離散方程式(if/then/else)でモデル化できます
十分に一般的なら非常に良いです
ただ、より興味深いのは、そのようなシステムの時間ベースのシミュレーションを実際に実行する一般的な方法論です
特に、力任せのモンテカルロ式の積分やサンプリングではなく、任意に複雑な微分方程式を記述できるならなおさらです
Modelica言語をベースにしたオープンソース実装である OpenModelica も外せない
まだ使ってはいないが、この休みにいくつか機能を見てみるつもり
https://openmodelica.org/
OpenModelicaを見てみるつもりなら、ModelingToolkit.jl も気に入るかもしれない
https://docs.sciml.ai/ModelingToolkit/dev/
Modelicaの代表的な商用実装であるDymolaをDassaultで手がけていたHilding Elmqvistのプロジェクトもある
彼のプロジェクトはModia.jl
https://github.com/ModiaSim/Modia.jl
個人的には、JuliaコミュニティはMTKに集まっている感じがするが、Juliaでの動的システムシミュレーションの初期段階ではModiaが先行していて、MTKはModiaとModelicaの両方から多くの着想を得ているように見える
Modiaは少し使い勝手がよく、3Dビューアや完全なマルチボディパッケージのようなものを数年早く統合しており、Julia Computingはようやく追いつきつつある
MTKはバックエンドソルバーのサポートがより良く、Modiaを上回る可能性が大きい
特に、Modiaのリリースペースが落ちているように見えるのでなおさら
https://github.com/JuliaComputing/Multibody.jl
職場で使った立場から、有料版についての自分の短い評価は「近づくな、逃げろ」
無料のSPICEよりできることはそれほど多くなく、ライセンスは複雑で、バグが多い
シミュレーション界のLabVIEWみたいなもの
無料版は使ったことがない
同僚たちと一緒に、ハイブリッド動力学システム向けの動力学システムモデリング言語 NESTML を開発してきた
ここでいうハイブリッド動力学システムとは、常微分方程式で表される連続時間ダイナミクスと、時間的に即時に発生する離散イベントの送受信の両方を含むシステムのこと
構文を最小限にしようとしているので、モデルを非常に簡潔に書ける
例えば:
model lorenz_attractor:
state:
x real = 1
y real = 1
z real = 1
equations:
x' = sigma * (y - x) / s
y' = (x * (rho - z) - y) / s
z' = (x * y - beta * z) / s
update:
integrate_odes()
parameters:
sigma real = 10
beta real = 8/3
rho real = 28
イベントには「onReceive(in_port_name)」や「emit_spike()」のような構文がある
命名法は神経科学の応用ドメインの影響をかなり受けている
まだ進行中だが、学習後にシーケンスを再生するスパイキングニューラルネットワークのような面白い応用もすでにある
https://nestml.readthedocs.io/en/latest/tutorials/sequence_learning/sequence_learning.html
NESTMLの開発を始めたとき、こういうものがまだ存在していなかったことには正直驚いた
Modelicaは似ているが、離散イベントのサポートはなさそう
露骨な宣伝だとは分かっているが、実際にはコメントやフィードバックを大歓迎している
すべての開発はGitHub上で公開で行われており、GPLライセンス
似たようなドメイン特化言語を知っている人がいれば、コメントをぜひ読んでみたい