1 Punkte von GN⁺ 2024-12-18 | 1 Kommentare | Auf WhatsApp teilen
  • 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

1 Kommentare

 
GN⁺ 2024-12-18
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/

    • Eine weitere aufkommende Lösung ist das Simulations-Ökosystem von Julia.
      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/
    • Konkurriert MATLAB in demselben Bereich ebenfalls?
  • 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.

    • Dieser Ansatz sah sehr interessant aus, deshalb wollte ich ihn zur Modellierung eines ziemlich komplexen Fluidsystems mit Rohren, Ventilen, Tanks usw. verwenden.
      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.
    • Stimme allem zu, und vermutlich arbeitest du an interessanten Dingen.
      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.

    • Als Außenstehender, der neugierig auf Modelica ist, fand ich vor ein paar Jahren interessant, dass man in dieser Sprache Gleichungen direkter schreiben kann als in den meisten Programmiersprachen.
      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.
    • Beispiele gibt es hier.
      Es sieht aus wie ein vereinfachtes Framework zum Schreiben von Simulationen physikalischer und elektrischer Systeme.
      https://mbe.modelica.university/
    • Im ersten Link „Modelica Language“ gibt es Tutorials und Beispiele.
      Nach ungefähr 5 Sekunden Klicken kam ich bis hierher:

      Betrachten wir eine sehr einfache Differentialgleichung:
      x = (1-X)
      Wenn man diese Gleichung betrachtet, gibt es nur eine Variable x.
      Diese Gleichung kann in Modelica wie folgt ausgedrückt werden:
      model FirstOrder
      Real x;
      equation
      der(x) = 1-x;
      end FirstOrder;
      Dieser Code beginnt mit dem Schlüsselwort model, das den Beginn einer Modelldefinition markiert.
      Auf das Schlüsselwort model folgt der Modellname FirstOrder, anschließend folgen die Deklarationen aller interessierenden Variablen.
      und so weiter

    • Modelica Language -> Modelica By Example -> https://mbe.modelica.university/
      Ich habe weniger als 5 Sekunden gebraucht, um es zu finden.
    • Sie scheinen Marken-Merchandise zu verkaufen.
  • 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?

    • Stimme zu
      Ich musste ein paar Mal klicken, um bis hierhin zu kommen
      https://mbe.modelica.university/behavior/equations/first_order/
    • Eigentlich finde ich, dass die Seite ziemlich modern ist
      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/
    • Weil es nicht für dich gedacht ist
      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
    • „Modelica is an object oriented language to model cyber-physical systems.“
      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

    • Modelica ist eine hervorragende Methode, um solche Simulationen durchzuführen
      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
    • Als ich als Student bei Siemens gearbeitet habe, erinnere ich mich daran, dass wir ein neuronales Netz nach ONNX exportiert, eine ONNX-Runtime-DLL angehängt, die FMU mit OpenModelica getestet und sie dann mit Simcenter Amesim verbunden haben
      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

  • 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.

    • Für numerische Lösungen gewöhnlicher Differentialgleichungen und differential-algebraischer Gleichungen gibt es viele hervorragende Methoden.
  • 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