1 puntos por GN⁺ 2024-12-18 | 1 comentarios | Compartir por WhatsApp
  • 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

  • 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

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

    • Otra solución que se me viene a la mente es el ecosistema de simulación de Julia.
      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/
    • ¿MATLAB también compite en esta misma área?
  • 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.

    • Este enfoque me pareció muy interesante, así que intenté usarlo para modelar un sistema de fluidos bastante complejo, con tuberías, válvulas, tanques y demás.
      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.
    • Totalmente de acuerdo, y probablemente estés haciendo cosas interesantes.
      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.

    • Como alguien de fuera con curiosidad por Modelica, hace unos años me llamó la atención saber que este lenguaje permite escribir ecuaciones de forma más directa que la mayoría de los lenguajes de programación.
      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.
    • Los ejemplos están aquí.
      Parece una especie de framework simplificado para escribir simulaciones de sistemas físicos y eléctricos.
      https://mbe.modelica.university/
    • En el primer enlace de “Modelica Language” hay tutoriales y ejemplos.
      Hice clic como 5 segundos y llegué hasta esto.

      Consideremos una ecuación diferencial muy simple:
      x = (1-X)
      Esta ecuación solo tiene una variable, x.
      Esta ecuación puede expresarse en Modelica de la siguiente manera:
      model FirstOrder
      Real x;
      equation
      der(x) = 1-x;
      end FirstOrder;
      Este código comienza con la palabra clave model, que indica el inicio de la definición de un modelo.
      Después de la palabra clave model viene el nombre del modelo, FirstOrder, seguido de las declaraciones de todas las variables de interés.
      etc.

    • Modelica Language -> Modelica By Example -> https://mbe.modelica.university/
      Lo encontré en menos de 5 segundos.
    • Parece que sí venden merchandising de su marca.
  • 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?

    • De acuerdo
      Tuve que hacer varios clics para llegar hasta aquí
      https://mbe.modelica.university/behavior/equations/first_order/
    • La verdad, me parece un sitio bastante moderno
      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/
    • Porque no es para ti
      Es para gente que necesita simular sistemas complejos multidisciplinarios y una forma de describir, empaquetar e intercambiar el comportamiento del sistema
    • “Modelica is an object oriented language to model cyber-physical systems.”
      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

    • Modelica es una excelente manera de realizar este tipo de simulaciones
      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
    • Cuando trabajaba como estudiante en Siemens, recuerdo haber exportado una red neuronal a ONNX, probado en OpenModelica una FMU conectada a una DLL de ONNX Runtime, y luego enlazarla con Simcenter Amesim
      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

  • 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

    • Las soluciones numéricas de ecuaciones diferenciales ordinarias y ecuaciones diferenciales algebraicas son un área con muchísimos métodos excelentes
  • 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