- 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
-
Langage, bibliothèques et outils
- Modelica Language : informations sur le langage Modelica
- Modelica Libraries : informations sur les bibliothèques Modelica
- Modelica Tools : informations sur les outils Modelica
- Modelica Association : informations sur la Modelica Association
-
Association et moyens de contact
- La Modelica Association compte des membres organisationnels, et le site permet de consulter au moins 21 membres supplémentaires
- La Modelica merchandising shop permet d’accéder à la boutique de merchandising
- Les moyens de contact sont l’e-mail board@modelica.org et la Modelica Association Newsletter
1 commentaires
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/
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/
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.
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.
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.
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.
Cela ressemble à un framework simplifié pour écrire des simulations de systèmes physiques et électriques.
https://mbe.modelica.university/
En cliquant environ 5 secondes, je suis arrivé à ceci :
Je l’ai trouvé en moins de 5 secondes.
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 ?
Il m’a fallu plusieurs clics pour arriver jusque-là
https://mbe.modelica.university/behavior/equations/first_order/
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/
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
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é
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
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
En réalité, la communauté Modelica et la communauté des bond graphs sont même quelque peu en opposition
Ma position sur ce sujet se trouve dans [1] et [2]
Je ne suis pas non plus d’accord avec l’idée que les bond graphs permettraient de comprendre intuitivement presque tous les systèmes
Ce qu’on peut en retirer, c’est une appréciation de l’élégance de la formalisation par bond graphs
Mais d’après 30 ans d’expérience en modélisation industrielle, les analogies qu’on en tire sont très superficielles
Dès qu’on dépasse les éléments passifs et linéaires, toutes les analogies s’effondrent
Par exemple, on se heurte à des questions comme : pourquoi les systèmes thermiques n’ont-ils pas de quantité de mouvement, que se passe-t-il avec un fluide compressible, ou quel est l’équivalent d’un embrayage dans un système électrique ?
Les bond graphs ne sont pas vraiment non causaux ; ce ne sont qu’une autre formalisation causale, plus proche de la physique
Les fans des bond graphs ne seront sûrement pas d’accord, mais je partage ici un avis personnel et subjectif
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/
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
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