- Modelica ist eine objektorientierte Sprache, um komplexe cyber-physische Systeme effizienter zu modellieren
- Wiederverwendbare Komponenten lassen sich über nicht-kausale Verbindungen kombinieren, und es können Modelle auf Basis mathematischer Gleichungen erstellt werden
- Die Sprache ist darauf ausgelegt, Modellierung nach First Principles zu erleichtern, und konzentriert sich darauf, Struktur und Verhalten physischer Systeme direkt auszudrücken
- Die offizielle Website bietet Informationen zur Modelica-Sprache, zu Bibliotheken, Tools und zur Modelica Association an einem Ort
- Außerdem sind dort Materialien zur Association, Organisationsmitglieder, ein Merchandising-Shop sowie Kontaktwege per E-Mail und Newsletter zu finden
Modellierungsansatz der Modelica-Sprache
- Modelica ist eine objektorientierte Sprache zur Modellierung cyber-physischer Systeme
- Wiederverwendbare Komponenten können über nicht-kausale Verbindungen kombiniert werden
- Komponenten werden als Modelle dargestellt, die von mathematischen Gleichungen bestimmt werden
- Diese Struktur ist im Wesentlichen darauf ausgelegt, Modellierung nach First Principles zu erleichtern
Auf der offiziellen Website bereitgestellte Materialien
-
Sprache, Bibliotheken, Tools
- Modelica Language: Informationen zur Modelica-Sprache
- Modelica Libraries: Informationen zu Modelica-Bibliotheken
- Modelica Tools: Informationen zu Modelica-Tools
- Modelica Association: Informationen zur Modelica Association
-
Association und Kontaktwege
- Die Modelica Association hat Organisationsmitglieder; auf der Website sind mehr als 21 weitere Mitglieder einsehbar
- Über den Modelica merchandising shop gelangt man zum Merchandising-Shop
- Kontaktmöglichkeiten sind die E-Mail-Adresse board@modelica.org und der Modelica Association Newsletter
1 Kommentare
Hacker-News-Kommentare
Wie auf der Website beschrieben, ist Modelica eine High-Level-deklarative Sprache zur Beschreibung mathematischen Verhaltens und wird üblicherweise auf technische Systeme angewendet.
In der HVAC-Branche wird sie recht häufig eingesetzt; in meinem Fall kann ich als Regelungstechniker für Optimierungsarbeiten Systemingenieure um FMUs verschiedener Komponenten bitten.
Eine FMU (Functional Mockup Unit) ist ein eigenständiges Binary, das ein dynamisches System darstellt, das von anderen Anwendungen ausgeführt werden kann.
Mein Hintergrund liegt bei Reinforcement Learning, Model Predictive Control und Python; praktisch ist, dass sich physikbasierte Modelle, die in einer domänenspezifischen Sprache geschrieben sind, in Python-Workflows einbetten lassen.
Modelica hat eine andere Perspektive als die übliche imperative Programmierung wie Python/MATLAB.
Man definiert Gleichungen, Variablen und Constraints unabhängig von der Reihenfolge, und der Compiler entscheidet, wie die Simulation ausgeführt wird, etwa welche Variablen zuerst gelöst werden.
OpenModelica hat sich als Open-Source-Implementierung des Sprachstandards stark weiterentwickelt, aber in der Industrie haben proprietäre Anwendungen wie Dymola weiterhin die Nase vorn.
https://fmi-standard.org/
https://fmpy.readthedocs.io/en/latest/
https://openmodelica.org/
Die kommerzielle Organisation hinter der Julia-Sprache hat DARPA-Fördermittel erhalten, um diese Tools zu entwickeln, und bringt Forschende aus der numerischen Analyse, skalierbares Computing sowie Domänenexperten für die Modellierung technischer Systeme wie elektrische und mechanische Systeme zusammen.
Ich denke, die Zukunft der Simulation wird in diese Richtung gehen.
https://juliahub.com/products/juliasim
https://news.ycombinator.com/item?id=26425659
https://docs.sciml.ai/DiffEqDocs/stable/
Es ist eine ziemlich nischige akausale Sprache und wird im Motorsport (F1, NASCAR) breit für Echtzeitsimulationen in Fahrersimulatoren genutzt.
Die Sprachspezifikation ist Open Source, aber es gibt mehrere kommerzielle Compiler; Dymola ist der bekannteste.
Ich programmiere viel in dieser Sprache, und ihre Akausalität ist sehr mächtig.
Sie macht Modelle sehr gut kombinierbar: Man kann mechanische Systeme wie Legosteine zusammensetzen, und die Gleichungen entstehen automatisch.
Auch das Invertieren von Modellen ist einfach möglich.
Die naheliegendste Analogie in der Programmierwelt ist Haskell.
Am Ende kam der Solver jedoch mit den erzeugten Gleichungen nicht zurecht, und es wirkte wie eine nicht debuggbare Blackbox, also gaben wir auf.
Ob wir etwas falsch gemacht haben oder ob die Open-Source-Alternativen dafür noch nicht ausgereift genug sind, ist unklar.
Akausale Modellierungsumgebungen fühlen sich auch stark wie symbolische Rechensysteme an.
Im Grunde sind sie angewandte Computeralgebrasysteme.
Nur nach der Beschreibung auf der Landingpage und aus Sicht von jemandem, der nicht aus diesem Bereich kommt, wäre es gut, auf der ersten Seite ein Beispiel oder Links zu Beispielen zu haben.
Ich habe etwa 30 Sekunden herumgeklickt, aber nichts gefunden, das mich angesprochen hätte.
Das ideale Gasgesetz PV = nRT hat zum Beispiel fünf Bezeichner.
In den meisten Programmiersprachen muss auf der linken Seite einer Zuweisung genau eine Variable stehen, also schreibt man etwa T=PV/nR, und wenn man eine andere Variable berechnen will, muss man einen ähnlichen Satz von Gleichungen separat erstellen.
In Modelica kann man dieselbe Gleichung in natürlicher mathematischer Notation schreiben, und anhand der bekannten Werte lässt sich die Unbekannte bestimmen.
https://mbe.modelica.university/behavior/equations/electrical/
Mehr weiß ich nicht.
Es sieht aus wie ein vereinfachtes Framework zum Schreiben von Simulationen physikalischer und elektrischer Systeme.
https://mbe.modelica.university/
Nach ungefähr 5 Sekunden Klicken kam ich bis hierher:
Ich habe weniger als 5 Sekunden gebraucht, um es zu finden.
Ich verstehe nicht, was das sein soll
Auf der Landingpage gibt es kein einziges Beispiel, und auch über keinen der wichtigsten Links auf der Landingpage findet man ein einziges Beispiel
Stattdessen gibt es einen Merch-Store, in dem man Tassen und Hoodies kaufen kann, und riesige Firmenlogos unter „organizational members“
Wenn man etwas gebaut hat, sollte man zeigen, was man gebaut hat
Wenn ich nicht schon wüsste, dass ich es brauche, würde ich wohl keine 30 Sekunden darauf verwenden, herauszufinden, was es ist
Warum haben sie es so schwer gemacht?
Ich musste ein paar Mal klicken, um bis hierhin zu kommen
https://mbe.modelica.university/behavior/equations/first_order/
Vergleiche sie mal mit dem USB-Konsortium
https://www.usb.org
Oder PCI-SIG:
https://pcisig.com
Vielleicht war die Designsprache sogar zu modern
Hast du es vielleicht für ein Startup-Projekt gehalten statt für einen über 25 Jahre alten Industriestandard?
Es ist interessant, darüber nachzudenken, dass ein zu modernes Erscheinungsbild Wahrnehmung und Erwartungen negativ beeinflussen kann
Wie wäre die Reaktion wohl gewesen, wenn das Seitendesign etwa von 2018 gewesen wäre?
http://web.archive.org/web/20180214180117/https://www.modelica.org/
Es ist für Leute gedacht, die komplexe multidisziplinäre Systeme simulieren und eine Möglichkeit brauchen, das Verhalten von Systemen zu beschreiben, zu bündeln und auszutauschen
Das ist wortwörtlich der erste Satz
Ich nutze bei meiner aktuellen Arbeit Modelica zusammen mit OpenModelica, um elektromagnetische Systeme zu beschreiben, und sowohl die Sprache als auch die grafische Benutzeroberfläche von OpenModelica sind hervorragend
Manchmal denke ich daran wie an SPICE für multiphysikalische Systeme
Die Modelica-Bibliothek ist ziemlich ausgereift und vollständig, und die in OpenModelica enthaltenen numerischen Solver sind robust und performant
Es hat etwas gedauert, das zu lernen, aber inzwischen zahlt es sich aus
Außerdem ist es gut, dass Modelica ein Standard ist, der von mehreren Anbietern implementiert wird, und dass es auch Open-Source-Anwendungen gibt; das hilft, Vendor Lock-in zu vermeiden
Aus Sicht von Ingenieuren und Unternehmen halte ich es für eine sichere Technologie, in die man investieren kann
Dass der FMU-Export nach dem FMI-Standard eine erstklassige Funktion ist, ist ebenfalls sehr wertvoll, besonders für Systemintegratoren
Man kann ein sinnvoll obfuskiertes Systemmodell an eine nicht vertrauenswürdige Seite weitergeben, während diese trotzdem den vollen Nutzen des Systemmodells erhält
In diesem Punkt ist OpenModelica der Konkurrenz voraus, darunter das Open-Source-Projekt ModelingToolkit.jl und die zugehörige Bibliothek FMIExport.jl
https://openmodelica.org/doc/OpenModelicaUsersGuide/v1.11.0/fmi.html
https://docs.sciml.ai/ModelingToolkit/stable/
https://github.com/ThummeTo/FMIExport.jl
Im Vergleich zu den alten, starren APIs von Engineering-Software war das ein ziemlich ordentlicher Standard
Ich habe vor vier Jahren mein Studium abgeschlossen und bin erst jetzt in den Kaninchenbau der Bond-Graph-Modellierung geraten: Ich arbeite mich selbst durch die MIT-Vorlesungsnotizen von Henry M. Paynter und modelliere im Job Fahrzeugsysteme mit Simscape.
Ich verstehe Modelica und Simscape so, dass sie Bond Graphs als zugrunde liegenden Mechanismus nutzen; ich bin mir aber nicht sicher, ob das stimmt.
Es wäre schön, wenn jemand mit Expertise in diesem Bereich mir etwas Orientierung geben könnte.
Im Moment glaube ich, dass ich, wenn ich die Bond-Graph-Theorie verstehe, fast alle Systeme, mit denen ich zu tun habe, intuitiv verstehen werde.
Interessant finde ich auch, dass dieses Gebiet überraschend nischig ist.
Die meisten Kolleginnen und Kollegen um mich herum haben dem keine besondere Beachtung geschenkt, aber als ich davon erfuhr, wirkte es wie die Wunderwaffe für all meine Probleme.
https://dirac.ruc.dk/~heine/paynter/analysis_and_design_of_engineering_systems_henry_m_paynter.pdf
Tatsächlich stehen die Modelica-Community und die Bond-Graph-Community in gewisser Weise ein wenig im Gegensatz zueinander.
Meine Position dazu steht in [1] und [2].
Ich stimme auch nicht der Vorstellung zu, dass Bond Graphs einem fast alle Systeme intuitiv verständlich machen.
Was man gewinnen kann, ist eine Wertschätzung für die Eleganz der Bond-Graph-Formalisierung.
Aber aus 30 Jahren Erfahrung mit industrieller Modellierung heraus sind die Analogien, die man daraus zieht, sehr oberflächlich.
Sobald man über passive, lineare Elemente hinausgeht, brechen die Analogien alle zusammen.
Zum Beispiel stellen sich Fragen wie: Warum gibt es in thermischen Systemen keinen Impuls, was passiert bei kompressiblen Fluiden, und was entspricht in elektrischen Systemen einer Kupplung?
Bond Graphs sind auch nicht wirklich akausal, sondern nur eine andere kausale Formalisierung, die näher an der Physik liegt.
Bond-Graph-Fans werden dem sicher nicht zustimmen, aber ich teile hier meine persönliche und subjektive Sicht.
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/
Verwandte Beiträge:
All about Modelica: An equation-based language for modeling physical systems - https://news.ycombinator.com/item?id=23690788 - Juni 2020, 44 Kommentare
Modelica - https://news.ycombinator.com/item?id=16013179 - Dezember 2017, 12 Kommentare
+1 für ModelingToolkit.jl.
Es hat Erkenntnisse aus Modelica übernommen und macht Spaß in der Arbeit.
Nach meinem Verständnis ist das eine Sprache, um „Systeme“ auf ziemlich allgemeine Weise zu beschreiben, und Systeme können durch Differentialgleichungen oder diskrete Gleichungen (if/then/else) modelliert werden.
Wenn sie allgemein genug ist, ist das großartig.
Der interessantere Teil ist allerdings die allgemeine Methodik, solche Systeme tatsächlich zeitbasiert zu simulieren.
Das gilt besonders dann, wenn man beliebig komplexe Differentialgleichungen beschreiben kann, statt nur brute-force-artige Monte-Carlo-Integration oder Sampling zu verwenden.
Auch OpenModelica, eine Open-Source-Implementierung auf Basis der Modelica-Sprache, darf nicht fehlen
Ich habe es noch nicht ausprobiert, plane aber, mir an diesem Feiertag ein paar Funktionen anzusehen
https://openmodelica.org/
Wenn ihr euch OpenModelica ansehen wollt, könnte euch auch ModelingToolkit.jl gefallen
https://docs.sciml.ai/ModelingToolkit/dev/
Es gibt auch ein Projekt von Hilding Elmqvist, der bei Dassault an Dymola gearbeitet hat, der führenden kommerziellen Implementierung von Modelica
Sein Projekt heißt Modia.jl
https://github.com/ModiaSim/Modia.jl
Persönlich habe ich den Eindruck, dass sich die Julia-Community um MTK sammelt, aber in der Frühphase der Simulation dynamischer Systeme in Julia lag Modia vorn, und MTK scheint sich stark von Modia wie auch von Modelica inspirieren lassen zu haben
Modia ist etwas angenehmer in der Nutzung, hat Dinge wie einen 3D-Viewer und ein vollständiges Mehrkörper-Paket einige Jahre früher integriert, und Julia Computing holt erst jetzt auf
MTK hat bessere Unterstützung für Backend-Solver und hat großes Potenzial, Modia zu überholen
Umso mehr, da sich die Release-Geschwindigkeit von Modia offenbar verlangsamt hat
https://github.com/JuliaComputing/Multibody.jl
Meine kurze Einschätzung zu den kostenpflichtigen Versionen, aus der Nutzung im Beruf: Finger weg, lauft davon
Sie können nicht viel mehr als kostenlose SPICE-Tools, die Lizenzierung ist kompliziert, und sie sind voller Bugs
Es ist wie das LabVIEW der Simulationswelt
Die kostenlose Version habe ich nicht ausprobiert
Zusammen mit Kolleginnen und Kollegen habe ich NESTML entwickelt, eine Modellierungssprache für dynamische Systeme mit hybrider Dynamik
Mit hybriden dynamischen Systemen sind hier Systeme gemeint, die sowohl kontinuierliche zeitliche Dynamik, ausgedrückt durch gewöhnliche Differentialgleichungen, als auch das Senden und Empfangen diskreter Ereignisse umfassen, die zeitlich unmittelbar auftreten
Wir haben versucht, die Syntax minimal zu halten, sodass Modelle sehr knapp geschrieben werden können
Zum Beispiel:
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
Für Ereignisse gibt es Konstrukte wie "onReceive(in_port_name)" und "emit_spike()"
Die Namensgebung ist recht stark von der Anwendungsdomäne der Neurowissenschaften geprägt
Es ist noch in Arbeit, aber es gibt bereits coole Anwendungen wie spikende neuronale Netze, die nach dem Lernen Sequenzen wiedergeben
https://nestml.readthedocs.io/en/latest/tutorials/sequence_learning/sequence_learning.html
Als wir mit der Entwicklung von NESTML begonnen haben, war ich ehrlich gesagt überrascht, dass es so etwas noch nicht gab
Modelica ist ähnlich, scheint aber keine Unterstützung für diskrete Ereignisse zu haben
Mir ist klar, dass das unverhohlene Eigenwerbung ist, aber Kommentare und Feedback sind tatsächlich sehr willkommen
Die gesamte Entwicklung findet öffentlich auf GitHub statt und steht unter der GPL-Lizenz
Falls jemand ähnliche domänenspezifische Sprachen kennt, würde ich mich über Kommentare dazu freuen