1 ポイント 投稿者 GN⁺ 2024-12-18 | 1件のコメント | WhatsAppで共有
  • Modelica は、複雑なサイバーフィジカルシステムをより効率的にモデリングするための オブジェクト指向言語
  • 再利用可能なコンポーネントを 非因果接続 で組み合わせ、数式に基づくモデルを構成できる
  • 第一原理(first principles) に基づくモデリングを容易にするよう設計されており、物理システムの構造と動作を直接表現することに重点を置いている
  • 公式サイトでは、Modelica 言語、ライブラリ、ツール、Modelica Association の情報をまとめて提供している
  • Association 関連資料、組織会員、マーチャンダイジングショップ、メール・ニュースレターの連絡先もあわせて確認できる

Modelica 言語のモデリング方式

  • Modelica はサイバーフィジカルシステムをモデリングするためのオブジェクト指向言語
  • 再利用可能なコンポーネントを 非因果接続 の方式で組み合わせられる
  • コンポーネントは 数式 によって支配されるモデルとして表現される
  • この構造は、第一原理に基づくモデリングを容易にするための設計に近い

公式サイトで提供される資料

1件のコメント

 
GN⁺ 2024-12-18
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 のシミュレーションエコシステムです
      Julia 言語の背後にある商業組織がこれらのツールを作るために DARPA の資金提供を受けており、数値解析研究者、スケーラブルな計算、電気・機械のような工学システムのモデリングに関するドメイン専門家を一つにまとめています
      シミュレーションの未来はこちらに向かう気がします
      https://juliahub.com/products/juliasim
      https://news.ycombinator.com/item?id=26425659
      https://docs.sciml.ai/DiffEqDocs/stable/
    • MATLAB も同じ分野で競合しているのでしょうか?
  • かなりニッチな非因果的言語で、モータースポーツ(F1、NASCAR)ではドライバーシミュレータのリアルタイムシミュレーションに広く使われています
    言語仕様はオープンソースですが、商用コンパイラが複数あり、Dymola が最も有名です
    この言語でよくコーディングしていますが、非因果性は非常に強力です
    モデルをとても合成しやすくしてくれるので、機械システムをレゴブロックのように組み立てると方程式が自動的に出てきます
    モデルを反転させることも簡単にできます
    プログラミングの世界で最も近い比喩は Haskell です

    • このアプローチが非常に面白そうに見えたので、パイプ、バルブ、タンクなどを含むかなり複雑な流体システムのモデリングに使ってみようとしました
      しかし結局、生成された方程式にソルバーが耐えられず、デバッグ不能なブラックボックスのように見えたため諦めました
      私たちのやり方が悪かったのか、オープンソースの代替がまだ対応しきれていないのかは分かりません
    • すべて同意しますし、おそらく面白いことをしているのだと思います
      非因果的モデリング環境は、記号計算システムにもかなり似ていると感じます
      実質的には応用された計算機代数システムだからです
  • ランディングページの説明だけを見た、この分野の人間ではない立場からすると、ファーストビューにや例へのリンクがあるとよいと思います
    30秒ほどクリックしてみましたが、惹かれる内容は見つかりませんでした

    • Modelica に興味を持つ外部の人間としては、数年前、この言語がほとんどのプログラミング言語よりも方程式を直接的に書けることを知って興味を持ちました
      例えば理想気体の法則 PV = nRT には識別子が5つあります
      ほとんどのプログラミング言語では、代入される左辺に変数を1つだけ置く必要があるため、T=PV/nR のように書き、別の変数を求めるには似たような方程式セットを別途作る必要があります
      Modelica では自然な数学表記のまま同じ方程式を書けば、既知の値に基づいて未知数を求められます
      https://mbe.modelica.university/behavior/equations/electrical/
      これ以上はよく知りません
    • 例はここにあります
      物理・電気システムのシミュレーションを書くための、単純化されたフレームワークのように見えます
      https://mbe.modelica.university/
    • 「Modelica Language」の最初のリンクにチュートリアルと例があります
      5秒ほどクリックして次のところまで行きました

      とても単純な微分方程式を考えてみよう:
      x = (1-X)
      この方程式を見ると、変数は x ただ一つである
      この方程式は Modelica では次のように表現できる:
      model FirstOrder
      Real x;
      equation
      der(x) = 1-x;
      end FirstOrder;
      このコードは、モデル定義の開始を示すキーワード model で始まる
      model キーワードの後にはモデル名 FirstOrder が続き、その後に関心のあるすべての変数の宣言が続く
      など

    • Modelica Language -> Modelica By Example -> https://mbe.modelica.university/
      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/
    • あなた向けではないから
      複雑な複数分野のシステムをシミュレーションし、システムの挙動を記述・パッケージ化・交換する方法を必要としている人向けのもの
    • “Modelica is an object oriented language to model cyber-physical systems.”
      文字どおり最初の一文
  • 今の職場ではOpenModelicaと一緒にModelicaを使って電磁システムを記述しているが、言語も優れているし、OpenModelicaのグラフィカルユーザー環境も素晴らしい
    ときどき、複数物理システム向けのSPICEのようなものだと考えている
    Modelicaライブラリはかなり成熟して完成度が高く、OpenModelicaに含まれる数値ソルバーも堅牢で高性能
    習得には少し時間がかかったが、今では報われている
    さらに、Modelicaが複数のベンダーによって実装された標準であり、オープンソースアプリケーションもあるという点は、ベンダーロックインを避けるうえでも良い
    エンジニアや企業にとって、投資しても安全な技術だと思う

    • 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
    • Siemensで学生として働いていたとき、ニューラルネットワークをONNXとして抽出し、ONNXランタイムDLLを付けたFMUをOpenModelicaでテストしてからSimcenter Amesimにつないだことを覚えている
      工学ソフトウェアの古くて硬直的な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

  • 関連記事:
    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ライセンス
      似たようなドメイン特化言語を知っている人がいれば、コメントをぜひ読んでみたい