1 points par GN⁺ 2024-12-18 | 1 commentaires | Partager sur WhatsApp
  • Modelica est un langage orienté objet destiné à modéliser plus efficacement des systèmes cyber-physiques complexes
  • Il permet d’assembler des composants réutilisables au moyen de connexions non causales et de construire des modèles fondés sur des équations mathématiques
  • Conçu pour faciliter la modélisation basée sur les premiers principes (first principles), il met l’accent sur la représentation directe de la structure et du comportement des systèmes physiques
  • Le site officiel regroupe des informations sur le langage Modelica, les bibliothèques, les outils et la Modelica Association
  • On y trouve aussi des ressources liées à l’Association, ses membres organisationnels, une boutique de merchandising, ainsi que les moyens de contact par e-mail et newsletter

Mode de modélisation du langage Modelica

  • Modelica est un langage orienté objet destiné à modéliser des systèmes cyber-physiques
  • Il permet de combiner des composants réutilisables via des connexions non causales
  • Les composants sont représentés comme des modèles régis par des équations mathématiques
  • Cette structure est proche d’une conception visant à faciliter la modélisation basée sur les premiers principes

Ressources proposées par le site officiel

1 commentaires

 
GN⁺ 2024-12-18
Avis sur Hacker News
  • Comme l’explique le site, Modelica est un langage déclaratif de haut niveau qui décrit des comportements mathématiques, et il s’applique généralement aux systèmes d’ingénierie.
    Il est assez utilisé dans le secteur du HVAC ; dans mon cas, en tant qu’ingénieur automaticien, je peux demander à un ingénieur système des FMU de plusieurs composants pour des travaux d’optimisation.
    Une FMU (Functional Mockup Unit) est un binaire autonome représentant un système dynamique pouvant être exécuté par une autre application.
    Mon parcours est plutôt apprentissage par renforcement, commande prédictive par modèle et Python, et il est pratique de pouvoir intégrer dans un workflow Python des modèles physiques écrits dans un langage spécifique au domaine.
    Modelica adopte un point de vue différent de la programmation impérative courante comme Python/MATLAB.
    On définit des équations, variables et contraintes indépendamment de l’ordre, puis le compilateur décide comment exécuter la simulation, par exemple quelles variables résoudre en premier.
    OpenModelica, l’implémentation open source du standard du langage, a beaucoup progressé, mais dans l’industrie les applications propriétaires comme Dymola restent dominantes.
    https://fmi-standard.org/
    https://fmpy.readthedocs.io/en/latest/
    https://openmodelica.org/

    • Une autre solution qui monte est l’écosystème de simulation de Julia.
      L’organisation commerciale derrière le langage Julia a reçu des financements de la DARPA pour développer ces outils, et elle réunit des chercheurs en analyse numérique, du calcul scalable et des experts métier de la modélisation de systèmes d’ingénierie comme l’électrique et la mécanique.
      J’ai l’impression que l’avenir de la simulation va aller dans cette direction.
      https://juliahub.com/products/juliasim
      https://news.ycombinator.com/item?id=26425659
      https://docs.sciml.ai/DiffEqDocs/stable/
    • MATLAB est-il aussi en concurrence sur ce terrain ?
  • C’est un langage acausal assez de niche, largement utilisé dans le sport automobile (F1, NASCAR) pour les simulations temps réel des simulateurs de conduite.
    La spécification du langage est open source, mais il existe plusieurs compilateurs commerciaux, dont Dymola est le plus connu.
    Je code beaucoup dans ce langage, et l’acausalité est extrêmement puissante.
    Elle rend les modèles très composables : on assemble des systèmes mécaniques comme des briques Lego et les équations en découlent automatiquement.
    Il est aussi facile d’inverser un modèle.
    Dans le monde de la programmation, l’analogie la plus proche est Haskell.

    • Cette approche me paraissait très intéressante, et j’ai essayé de l’utiliser pour modéliser un système de fluides assez complexe avec des tuyaux, des vannes, des réservoirs, etc.
      Mais, au final, le solveur n’a pas tenu face aux équations générées, et cela ressemblait à une boîte noire impossible à déboguer, donc nous avons abandonné.
      Difficile de savoir si nous nous y sommes mal pris ou si les alternatives open source ne sont pas encore capables d’encaisser ce cas.
    • Entièrement d’accord, et vous faites probablement quelque chose d’intéressant.
      Les environnements de modélisation acausale me semblent aussi très proches des systèmes de calcul symbolique.
      En pratique, ce sont des systèmes de calcul formel appliqués.
  • Rien qu’en regardant la description de la landing page, en tant que personne extérieure à ce domaine, j’aimerais voir sur le premier écran un exemple ou un lien vers des exemples.
    J’ai cliqué pendant environ 30 secondes sans trouver quelque chose qui m’accroche.

    • En tant que personne extérieure curieuse de Modelica, ce qui m’avait intéressé il y a quelques années, c’est d’apprendre que ce langage permet d’écrire des équations plus directement que la plupart des langages de programmation.
      Par exemple, la loi des gaz parfaits PV = nRT comporte 5 identifiants.
      Dans la plupart des langages de programmation, il faut mettre une seule variable à gauche de l’affectation, donc écrire quelque chose comme T=PV/nR, puis créer des jeux d’équations similaires pour résoudre une autre variable.
      Avec Modelica, on écrit la même équation dans sa notation mathématique naturelle, puis le système peut trouver l’inconnue à partir des valeurs connues.
      https://mbe.modelica.university/behavior/equations/electrical/
      Je n’en sais pas plus.
    • Les exemples sont ici.
      Cela ressemble à un framework simplifié pour écrire des simulations de systèmes physiques et électriques.
      https://mbe.modelica.university/
    • Le premier lien « Modelica Language » contient des tutoriels et des exemples.
      En cliquant environ 5 secondes, je suis arrivé à ceci :

      Prenons une équation différentielle très simple :
      x = (1-X)
      En regardant cette équation, il n’y a qu’une seule variable, x.
      Dans Modelica, cette équation peut s’exprimer ainsi :
      model FirstOrder
      Real x;
      equation
      der(x) = 1-x;
      end FirstOrder;
      Ce code commence par le mot-clé model, qui indique le début de la définition d’un modèle.
      Après le mot-clé model vient le nom du modèle, FirstOrder, suivi des déclarations de toutes les variables qui nous intéressent.
      etc.

    • Modelica Language -> Modelica By Example -> https://mbe.modelica.university/
      Je l’ai trouvé en moins de 5 secondes.
    • Ils ont l’air de vendre des produits dérivés à leur marque.
  • Je ne comprends pas ce que c’est
    Il n’y a pas un seul exemple sur la landing page, ni dans aucun des principaux liens de cette page
    À la place, il y a une boutique de goodies où l’on peut acheter des mugs et des hoodies, et d’énormes logos d’entreprises présentées comme « organizational members »
    Si vous avez construit quelque chose, il faut montrer ce que vous avez construit
    À moins de savoir déjà que j’en ai besoin, je ne pense pas que je passerais plus de 30 secondes à essayer de comprendre ce que c’est
    Pourquoi avoir rendu ça aussi difficile ?

    • D’accord
      Il m’a fallu plusieurs clics pour arriver jusque-là
      https://mbe.modelica.university/behavior/equations/first_order/
    • En fait, je trouve que le site est plutôt moderne
      Il suffit de comparer avec le consortium USB
      https://www.usb.org
      Ou avec PCI-SIG :
      https://pcisig.com
      Peut-être que son langage visuel était même trop moderne
      Ne l’aurais-tu pas pris pour un projet de startup plutôt que pour un standard industriel vieux de plus de 25 ans ?
      Il est intéressant de se demander dans quelle mesure une apparence trop moderne peut nuire à la perception et aux attentes
      Quelle aurait été la réaction avec un design de site datant d’environ 2018 ?
      http://web.archive.org/web/20180214180117/https://www.modelica.org/
    • Parce que ce n’est pas fait pour vous
      C’est fait pour les personnes qui simulent des systèmes multidisciplinaires complexes et qui ont besoin d’un moyen de décrire, empaqueter et échanger le comportement de ces systèmes
    • « Modelica is an object oriented language to model cyber-physical systems. »
      C’est littéralement la première phrase
  • Dans mon poste actuel, j’utilise Modelica avec OpenModelica pour décrire des systèmes électromagnétiques, et le langage est excellent, tout comme l’environnement graphique d’OpenModelica
    Parfois, je le vois comme une sorte de SPICE pour systèmes multiphysiques
    La bibliothèque Modelica est assez mature et aboutie, et les solveurs numériques inclus dans OpenModelica sont robustes et performants
    Il m’a fallu un peu de temps pour l’apprendre, mais l’investissement commence maintenant à payer
    En plus, le fait que Modelica soit un standard implémenté par plusieurs fournisseurs, avec aussi des applications open source, aide à éviter l’enfermement propriétaire
    Pour les ingénieurs comme pour les entreprises, je considère que c’est une technologie dans laquelle on peut investir en toute sécurité

    • Modelica est un excellent moyen de réaliser ce type de simulations
      Le fait que l’export FMU selon le standard FMI soit une fonctionnalité de premier ordre apporte aussi beaucoup de valeur, surtout pour les intégrateurs système
      On peut transmettre un modèle de système raisonnablement obscurci à une partie non fiable, tout en lui permettant de bénéficier pleinement des avantages du modèle
      Sur ce point, OpenModelica a une longueur d’avance sur ses concurrents open source, notamment ModelingToolkit.jl et la bibliothèque associée FMIExport.jl
      https://openmodelica.org/doc/OpenModelicaUsersGuide/v1.11.0/fmi.html
      https://docs.sciml.ai/ModelingToolkit/stable/
      https://github.com/ThummeTo/FMIExport.jl
    • Quand je travaillais comme étudiant chez Siemens, je me souviens avoir exporté un réseau de neurones en ONNX, attaché une DLL du runtime ONNX à un FMU, testé le tout avec OpenModelica, puis l’avoir connecté à Simcenter Amesim
      Comparé aux API vieillottes et rigides des logiciels d’ingénierie, c’était un standard plutôt correct
  • J’ai terminé l’université il y a 4 ans, et ce n’est que maintenant que je tombe dans le terrier du bond graph modeling, en l’étudiant moi-même à partir des notes de cours du MIT de Henry M. Paynter, tout en modélisant des systèmes de véhicules avec Simscape au travail
    Je crois comprendre que Modelica et Simscape utilisent les bond graphs comme mécanisme sous-jacent, mais je ne sais pas si c’est exact
    J’aimerais qu’un spécialiste du domaine m’aide à m’orienter un peu
    Pour l’instant, je pense que comprendre la théorie des bond graphs me donnera une compréhension intuitive de presque tous les systèmes que je manipule
    Je trouve aussi intéressant que ce domaine soit étonnamment de niche
    La plupart de mes collègues autour de moi n’y prêtaient pas spécialement attention, mais quand je l’ai découvert, cela m’a semblé être la solution miracle à tous mes problèmes
    https://dirac.ruc.dk/~heine/paynter/analysis_and_design_of_engineering_systems_henry_m_paynter.pdf

  • Articles liés :
    All about Modelica: An equation-based language for modeling physical systems - https://news.ycombinator.com/item?id=23690788 - juin 2020, 44 commentaires
    Modelica - https://news.ycombinator.com/item?id=16013179 - décembre 2017, 12 commentaires

  • +1 pour ModelingToolkit.jl
    Il reprend des enseignements de Modelica et il est agréable à utiliser

  • D’après ce que j’ai compris, c’est un langage qui décrit des « systèmes » de façon assez générale, et ces systèmes peuvent être modélisés par des équations différentielles ou des équations discrètes (if/then/else)
    Si c’est suffisamment général, c’est excellent
    Mais la partie la plus intéressante, c’est la méthodologie générale permettant d’exécuter réellement la simulation temporelle de tels systèmes
    Surtout si l’on peut décrire des équations différentielles arbitrairement complexes, plutôt que de faire de l’intégration ou de l’échantillonnage façon Monte-Carlo brute force

    • Les solutions numériques des équations différentielles ordinaires et des équations différentielles-algébriques sont un domaine où il existe beaucoup d’excellentes méthodes
  • OpenModelica, une implémentation open source basée sur le langage Modelica, est aussi incontournable
    Je ne l’ai pas encore essayé, mais je prévois d’examiner quelques fonctionnalités pendant ce jour férié
    https://openmodelica.org/

    • Si vous comptez regarder OpenModelica, ModelingToolkit.jl pourrait aussi vous plaire
      https://docs.sciml.ai/ModelingToolkit/dev/
      Il existe aussi le projet de Hilding Elmqvist, qui a travaillé chez Dassault sur Dymola, l’implémentation commerciale de référence de Modelica
      Son projet est Modia.jl
      https://github.com/ModiaSim/Modia.jl
      Personnellement, j’ai l’impression que la communauté Julia converge vers MTK, mais aux débuts de la simulation de systèmes dynamiques en Julia, Modia avait de l’avance, et MTK me semble s’être beaucoup inspiré à la fois de Modia et de Modelica
      Modia est un peu plus agréable à utiliser, a intégré plusieurs années plus tôt des éléments comme un visualiseur 3D et un package multibody complet, et Julia Computing ne fait que rattraper son retard
      MTK prend mieux en charge les solveurs en backend et a de bonnes chances de dépasser Modia
      D’autant plus que le rythme de publication de Modia semble avoir ralenti
      https://github.com/JuliaComputing/Multibody.jl

    • Pour l’avoir utilisé au travail, mon bref avis sur la version payante est : tenez-vous-en loin, fuyez
      Elle ne permet pas de faire beaucoup plus qu’un SPICE gratuit, les licences sont compliquées, et il y a beaucoup de bugs
      C’est un peu le LabVIEW de la simulation
      Je n’ai pas essayé la version gratuite

    • Avec mes collègues, nous développons NESTML, un langage de modélisation de systèmes dynamiques pour les systèmes dynamiques hybrides
      Par systèmes dynamiques hybrides, on entend ici des systèmes qui combinent une dynamique en temps continu exprimée par des équations différentielles ordinaires et l’envoi/la réception d’événements discrets se produisant instantanément dans le temps
      Nous avons cherché à minimiser la syntaxe, ce qui permet d’écrire des modèles de façon très concise
      Par exemple :
      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

      Pour les événements, il existe des constructions comme "onReceive(in_port_name)" et "emit_spike()"
      La nomenclature est assez influencée par le domaine d’application des neurosciences
      C’est encore en cours, mais il existe déjà des applications intéressantes, comme des réseaux de neurones impulsionnels qui rejouent des séquences après apprentissage
      https://nestml.readthedocs.io/en/latest/tutorials/sequence_learning/sequence_learning.html
      Franchement, j’ai été surpris qu’un tel outil n’existe pas déjà quand nous avons commencé à développer NESTML
      Modelica est similaire, mais ne semble pas prendre en charge les événements discrets
      Je sais bien que c’est de la promotion assumée, mais en réalité les commentaires et retours sont vraiment les bienvenus
      Tout le développement se fait publiquement sur GitHub et le projet est sous licence GPL
      Si quelqu’un connaît des langages spécifiques à un domaine similaires, j’aimerais beaucoup lire vos commentaires