- Modelica es un lenguaje orientado a objetos para modelar sistemas ciberfísicos complejos de forma más eficiente
- Permite combinar componentes reutilizables mediante conexiones acausales y construir modelos basados en ecuaciones matemáticas
- Está diseñado para facilitar el modelado basado en primeros principios (first principles), con enfoque en representar directamente la estructura y el comportamiento de los sistemas físicos
- El sitio oficial reúne en un solo lugar información sobre el lenguaje Modelica, bibliotecas, herramientas y la Modelica Association
- También se pueden consultar materiales relacionados con la Association, miembros organizacionales, la tienda de merchandising y vías de contacto por correo electrónico y boletín
Enfoque de modelado del lenguaje Modelica
- Modelica es un lenguaje orientado a objetos para modelar sistemas ciberfísicos
- Los componentes reutilizables pueden combinarse mediante conexiones acausales
- Los componentes se representan como modelos regidos por ecuaciones matemáticas
- Esta estructura se acerca a un diseño pensado para facilitar el modelado basado en primeros principios
Recursos disponibles en el sitio oficial
-
Lenguaje, bibliotecas y herramientas
- Modelica Language: información sobre el lenguaje Modelica
- Modelica Libraries: información sobre las bibliotecas de Modelica
- Modelica Tools: información sobre las herramientas de Modelica
- Modelica Association: información sobre la Modelica Association
-
Association y vías de contacto
- La Modelica Association cuenta con miembros organizacionales, y en el sitio se pueden ver más de 21 miembros adicionales
- A través de Modelica merchandising shop se puede acceder a la tienda de merchandising
- Las vías de contacto son el correo electrónico board@modelica.org y el Modelica Association Newsletter
1 comentarios
Comentarios en Hacker News
Como dice la descripción del sitio web, Modelica es un lenguaje declarativo de alto nivel para describir comportamiento matemático, y normalmente se aplica a sistemas de ingeniería.
En la industria de HVAC se usa bastante y, en mi caso, como ingeniero de control puedo pedirle al ingeniero de sistemas los FMU de varios componentes para trabajos de optimización.
Un FMU (Functional Mockup Unit) es un binario autónomo que representa un sistema dinámico que otras aplicaciones pueden ejecutar.
Mi experiencia viene de aprendizaje por refuerzo, control predictivo por modelo y Python, así que es conveniente poder incrustar en flujos de trabajo de Python modelos físicos escritos en un lenguaje específico de dominio.
Modelica tiene una perspectiva distinta de la programación imperativa general, como Python/MATLAB.
Defines ecuaciones, variables y restricciones sin importar el orden, y el compilador decide cómo ejecutar la simulación, por ejemplo qué variables resolver primero.
OpenModelica ha avanzado bastante como implementación open source del estándar del lenguaje, pero en la industria siguen dominando aplicaciones propietarias como Dymola.
https://fmi-standard.org/
https://fmpy.readthedocs.io/en/latest/
https://openmodelica.org/
La organización comercial detrás del lenguaje Julia recibió financiamiento de DARPA para construir estas herramientas, y está reuniendo a investigadores en análisis numérico, computación escalable y especialistas de dominio en modelado de sistemas de ingeniería como los eléctricos y mecánicos.
Siento que el futuro de la simulación va por ahí.
https://juliahub.com/products/juliasim
https://news.ycombinator.com/item?id=26425659
https://docs.sciml.ai/DiffEqDocs/stable/
Es un lenguaje acausal bastante de nicho, y se usa mucho en motorsport (F1, NASCAR) para simulación en tiempo real en simuladores de pilotos.
La especificación del lenguaje es open source, pero hay varios compiladores comerciales, y Dymola es el más conocido.
Programo bastante en este lenguaje y la acausalidad es muy poderosa.
Hace que los modelos sean muy componibles, así que puedes ensamblar un sistema mecánico como si fueran bloques de Lego y las ecuaciones salen automáticamente.
También es fácil invertir el modelo.
La analogía más cercana en el mundo de la programación sería Haskell.
Pero al final el solucionador no aguantó por las ecuaciones generadas, y me pareció una caja negra imposible de depurar, así que lo dejé.
No está claro si fue error nuestro o si las alternativas open source todavía no pueden manejarlo.
También siento que los entornos de modelado acausal se parecen mucho a los sistemas de cálculo simbólico.
Porque en la práctica son sistemas de álgebra computacional aplicada.
Viendo solo la explicación de la landing page, como alguien que no es de este campo, estaría bien que en la primera pantalla hubiera un ejemplo o un enlace a ejemplos.
Hice clic unos 30 segundos y no encontré nada que me enganchara.
Por ejemplo, la ley del gas ideal PV = nRT tiene 5 identificadores.
En la mayoría de los lenguajes de programación, solo puedes poner una variable en el lado izquierdo de una asignación, así que tendrías que escribir algo como T=PV/nR, y si quisieras resolver otra variable tendrías que crear aparte un conjunto parecido de ecuaciones.
En Modelica puedes escribir la misma ecuación con la notación matemática natural, y luego resolver la incógnita a partir de los valores conocidos.
https://mbe.modelica.university/behavior/equations/electrical/
Más allá de eso no sé mucho.
Parece una especie de framework simplificado para escribir simulaciones de sistemas físicos y eléctricos.
https://mbe.modelica.university/
Hice clic como 5 segundos y llegué hasta esto.
Lo encontré en menos de 5 segundos.
No entiendo qué es esto
En la landing page no hay ni un solo ejemplo, y en ninguno de los enlaces principales de la landing page hay ejemplos
En cambio, sí hay una tienda de mercancía donde puedes comprar tazas y hoodies, y unos enormes logos de empresas como “organizational members”
Si hiciste algo, tienes que mostrar lo que hiciste
A menos que ya sepas que lo necesitas, no creo que vaya a gastar más de 30 segundos tratando de averiguar qué es
¿Por qué lo hicieron tan difícil?
Tuve que hacer varios clics para llegar hasta aquí
https://mbe.modelica.university/behavior/equations/first_order/
Basta con compararlo con el consorcio USB
https://www.usb.org
O con PCI-SIG:
https://pcisig.com
Tal vez el lenguaje de diseño era demasiado moderno
¿Quizá lo confundiste con un proyecto de startup en vez de un estándar industrial de más de 25 años?
Es interesante pensar que verse demasiado moderno puede afectar negativamente la percepción y las expectativas
¿Cómo habría sido la reacción si el diseño del sitio fuera del estilo de 2018?
http://web.archive.org/web/20180214180117/https://www.modelica.org/
Es para gente que necesita simular sistemas complejos multidisciplinarios y una forma de describir, empaquetar e intercambiar el comportamiento del sistema
Literalmente es la primera frase
En mi trabajo actual uso Modelica junto con OpenModelica para describir sistemas electromagnéticos, y tanto el lenguaje como la interfaz gráfica de usuario de OpenModelica son excelentes
A veces lo pienso como una especie de SPICE para sistemas multifísicos
Las bibliotecas de Modelica son bastante maduras y completas, y el solucionador numérico incluido en OpenModelica es sólido y tiene buen rendimiento
Me tomó algo de tiempo aprenderlo, pero ahora está dando frutos
Además, el hecho de que Modelica sea un estándar implementado por varios proveedores y que también haya aplicaciones de código abierto ayuda a evitar el vendor lock-in
Desde la perspectiva de ingenieros y empresas, me parece una tecnología segura en la que invertir
Que la exportación de FMU sea una función de primera clase bajo el estándar FMI también tiene mucho valor, especialmente para integradores de sistemas
Puedes entregar modelos de sistema razonablemente ofuscados a partes no confiables y aun así permitirles obtener plenamente los beneficios del modelo del sistema
En este punto, OpenModelica va por delante de competidores como el open source ModelingToolkit.jl y su biblioteca relacionada FMIExport.jl
https://openmodelica.org/doc/OpenModelicaUsersGuide/v1.11.0/fmi.html
https://docs.sciml.ai/ModelingToolkit/stable/
https://github.com/ThummeTo/FMIExport.jl
Comparado con las APIs viejas y rígidas del software de ingeniería, era un estándar bastante decente
Me gradué de la universidad hace 4 años y apenas ahora estoy entrando en la madriguera del conejo del modelado con grafos de enlaces, estudiándolo por mi cuenta directamente con las notas de clase del MIT de Henry M. Paynter, mientras que en el trabajo modelo sistemas vehiculares con Simscape
Entiendo que tanto Modelica como Simscape usan los grafos de enlaces como mecanismo subyacente, pero no sé si eso sea correcto
Me gustaría que alguien experto en esta área me orientara un poco
En este momento creo que, si entiendo la teoría de los grafos de enlaces, voy a poder entender de forma intuitiva casi todos los sistemas con los que trabajo
También me parece interesante que esta área sea sorprendentemente de nicho
A la mayoría de mis colegas de alrededor no les importó especialmente, pero cuando lo descubrí, me pareció la bala de plata mágica para todos mis problemas
https://dirac.ruc.dk/~heine/paynter/analysis_and_design_of_engineering_systems_henry_m_paynter.pdf
De hecho, la comunidad de Modelica y la comunidad de grafos de enlaces tienen cierta rivalidad
Mi postura sobre esto está en [1] y [2]
Tampoco estoy de acuerdo con la idea de que los grafos de enlaces te hagan entender intuitivamente casi todos los sistemas
Lo que sí puedes obtener es una apreciación por la elegancia de la formulación de los grafos de enlaces
Pero, por mi experiencia de 30 años modelando en la industria, las analogías que se sacan de ahí son muy superficiales
En cuanto sales de los elementos pasivos y lineales, todas las analogías se rompen
Por ejemplo, surgen preguntas como por qué los sistemas térmicos no tienen momento, qué pasa si hay fluidos compresibles, o cuál sería el equivalente de un clutch en un sistema eléctrico
Los grafos de enlaces en realidad tampoco son acausales; solo son otra formulación causal más cercana a la física
Los fans de los grafos de enlaces seguramente no estarán de acuerdo, pero solo comparto una opinión personal y subjetiva
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/
Artículos relacionados:
All about Modelica: An equation-based language for modeling physical systems - https://news.ycombinator.com/item?id=23690788 - junio de 2020, 44 comentarios
Modelica - https://news.ycombinator.com/item?id=16013179 - diciembre de 2017, 12 comentarios
+1 a ModelingToolkit.jl
Tomó cosas que aprendió de Modelica y da gusto trabajar con él
Según entiendo, este es un lenguaje para describir “sistemas” de una manera bastante general, y los sistemas pueden modelarse con ecuaciones diferenciales o ecuaciones discretas (
if/then/else)Si de verdad es tan general, entonces está muy bien
Pero la parte más interesante es la metodología general para ejecutar realmente simulaciones basadas en el tiempo de esos sistemas
Sobre todo si no se trata de integración o muestreo tipo Monte Carlo a lo bruto, y más aún si puedes describir ecuaciones diferenciales de complejidad arbitraria
No puede faltar OpenModelica, una implementación de código abierto basada en el lenguaje Modelica
Aún no lo he probado, pero planeo revisar algunas funciones durante este feriado
https://openmodelica.org/
Si estás pensando en revisar OpenModelica, puede que también te guste ModelingToolkit.jl
https://docs.sciml.ai/ModelingToolkit/dev/
También existe el proyecto de Hilding Elmqvist, quien trabajó en Dassault en Dymola, la implementación comercial más representativa de Modelica
Su proyecto es Modia.jl
https://github.com/ModiaSim/Modia.jl
Personalmente, siento que la comunidad de Julia se está agrupando alrededor de MTK, pero en las primeras etapas de la simulación de sistemas dinámicos en Julia, Modia iba por delante, y creo que MTK tomó mucha inspiración tanto de Modia como de Modelica
Modia se siente un poco más pulido en el uso, e integró varios años antes cosas como un visor 3D y un paquete completo de multibody, y Julia Computing apenas ahora se está poniendo al día
MTK tiene mejor soporte de analizadores backend y tiene mucho potencial para superar a Modia
Sobre todo porque parece que el ritmo de lanzamientos de Modia se ha ralentizado
https://github.com/JuliaComputing/Multibody.jl
Habiéndolo usado en el trabajo, mi opinión breve sobre la versión de pago es: aléjate, huye
No puede hacer mucho más que SPICE gratuito, la licencia es complicada y tiene muchos bugs
Se parece al LabVIEW del mundo de la simulación
No he probado la versión gratuita
He estado desarrollando con colegas el lenguaje de modelado de sistemas dinámicos NESTML para sistemas dinámicos híbridos
Aquí, un sistema dinámico híbrido es un sistema que incluye tanto dinámica continua en el tiempo expresada mediante ecuaciones diferenciales ordinarias, como la transmisión y recepción de eventos discretos que ocurren instantáneamente en el tiempo
Intentamos mantener la sintaxis al mínimo, para que los modelos puedan escribirse de forma muy concisa
Por ejemplo:
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
Para los eventos hay sintaxis como "onReceive(in_port_name)" y "emit_spike()"
La nomenclatura está bastante influida por el dominio de aplicación de la neurociencia
Aún está en desarrollo, pero ya hay aplicaciones interesantes, como redes neuronales de picos que aprenden y luego reproducen secuencias
https://nestml.readthedocs.io/en/latest/tutorials/sequence_learning/sequence_learning.html
Sinceramente, me sorprendió que no existiera ya algo así cuando empezamos a desarrollar NESTML
Modelica es parecido, pero no parece tener soporte para eventos discretos
Sé que esto es una autopromoción descarada, pero de verdad agradecemos mucho los comentarios y la retroalimentación
Todo el desarrollo se hace públicamente en GitHub y tiene licencia GPL
Si alguien conoce un lenguaje específico de dominio parecido, me gustaría leer los comentarios