1 pontos por GN⁺ 2024-12-18 | 1 comentários | Compartilhar no WhatsApp
  • Modelica é uma linguagem orientada a objetos para modelar sistemas ciberfísicos complexos com mais eficiência
  • É possível combinar componentes reutilizáveis por meio de conexões acausais e construir modelos baseados em equações matemáticas
  • Foi projetada para facilitar a modelagem baseada em primeiros princípios (first principles), com foco em representar diretamente a estrutura e o comportamento de sistemas físicos
  • O site oficial reúne em um só lugar informações sobre a linguagem Modelica, bibliotecas, ferramentas e a Modelica Association
  • Também é possível consultar materiais sobre a Association, membros organizacionais, a loja de merchandising e canais de contato por e-mail e newsletter

Abordagem de modelagem da linguagem Modelica

  • Modelica é uma linguagem orientada a objetos para modelagem de sistemas ciberfísicos
  • Componentes reutilizáveis podem ser combinados por meio de conexões acausais
  • Os componentes são representados como modelos regidos por equações matemáticas
  • Essa estrutura se aproxima de um projeto pensado para facilitar a modelagem baseada em primeiros princípios

Materiais disponíveis no site oficial

1 comentários

 
GN⁺ 2024-12-18
Comentários do Hacker News
  • Como a descrição do site diz, Modelica é uma linguagem declarativa de alto nível para descrever comportamento matemático, geralmente aplicada a sistemas de engenharia
    Ela é bastante usada no setor de HVAC e, no meu caso, como engenheiro de controle, posso pedir a um engenheiro de sistemas FMUs de vários componentes para trabalhos de otimização
    Uma FMU (Functional Mockup Unit) é um binário autônomo que representa um sistema dinâmico que outras aplicações podem executar
    Minha formação é em aprendizagem por reforço, controle preditivo baseado em modelo e Python, e é conveniente poder incorporar modelos baseados em física, escritos em uma linguagem específica de domínio, em fluxos de trabalho Python
    Modelica tem uma perspectiva diferente da programação imperativa comum, como Python/MATLAB
    Você define equações, variáveis e restrições sem se preocupar com a ordem, e o compilador decide como executar a simulação, incluindo quais variáveis resolver primeiro
    OpenModelica evoluiu bastante como uma implementação open source do padrão da linguagem, mas na indústria aplicações proprietárias como Dymola ainda levam vantagem
    https://fmi-standard.org/
    https://fmpy.readthedocs.io/en/latest/
    https://openmodelica.org/

  • É uma linguagem não causal bastante de nicho, amplamente usada no automobilismo (F1, NASCAR) para simulações em tempo real em simuladores de piloto
    A especificação da linguagem é open source, mas há vários compiladores comerciais, e Dymola é o mais famoso
    Programo bastante nessa linguagem, e a não causalidade é extremamente poderosa
    Ela torna os modelos muito combináveis: você monta sistemas mecânicos como blocos de Lego e as equações saem automaticamente
    Também é fácil inverter modelos
    A analogia mais próxima no mundo da programação é Haskell

    • Essa abordagem parecia muito interessante, então tentei usá-la para modelar um sistema de fluidos bastante complexo, com tubos, válvulas, tanques etc.
      Mas, no fim, o solucionador não aguentou as equações geradas, e aquilo pareceu uma caixa-preta impossível de depurar, então desistimos
      Não ficou claro se fizemos algo errado ou se as alternativas open source ainda não dão conta
    • Concordo com tudo, e você provavelmente está fazendo algo interessante
      Sinto que ambientes de modelagem não causal também se parecem muito com sistemas de computação simbólica
      Porque, na prática, são sistemas de álgebra computacional aplicada
  • Olhando só a descrição da landing page, como alguém que não é da área, eu gostaria de ver um exemplo ou um link para exemplos logo na primeira tela
    Cliquei por uns 30 segundos e não encontrei nada que me atraísse

    • Como alguém de fora curioso sobre Modelica, há alguns anos fiquei interessado ao descobrir que a linguagem permite escrever equações de forma mais direta do que a maioria das linguagens de programação
      Por exemplo, a lei dos gases ideais PV = nRT tem 5 identificadores
      Na maioria das linguagens de programação, é preciso ter apenas uma variável no lado esquerdo da atribuição, então você escreve algo como T=PV/nR, e precisa criar conjuntos semelhantes de equações separados para calcular outras variáveis
      Em Modelica, você pode escrever a mesma equação na notação matemática natural, e ela calcula as incógnitas com base nos valores conhecidos
      https://mbe.modelica.university/behavior/equations/electrical/
      Além disso, não sei muito
    • Há exemplos aqui
      Parece um framework simplificado para escrever simulações de sistemas físicos e elétricos
      https://mbe.modelica.university/
    • O primeiro link, “Modelica Language”, tem tutoriais e exemplos
      Cliquei por uns 5 segundos e cheguei até isto

      Vamos considerar uma equação diferencial muito simples:
      x = (1-X)
      Observando essa equação, há apenas uma variável, x
      Essa equação pode ser representada em Modelica assim:
      model FirstOrder
      Real x;
      equation
      der(x) = 1-x;
      end FirstOrder;
      Esse código começa com a palavra-chave model, que indica o início da definição do modelo
      Depois da palavra-chave model vem o nome do modelo, FirstOrder, seguido das declarações de todas as variáveis de interesse
      etc.

    • Modelica Language -> Modelica By Example -> https://mbe.modelica.university/
      Encontrei em menos de 5 segundos
    • Parece que eles vendem produtos com a marca deles
  • Não faço ideia do que é isso
    Não há nenhum exemplo na landing page, e não há nenhum exemplo em nenhum dos principais links da landing page
    Em vez disso, há uma loja de merchandise onde dá para comprar canecas e hoodies, e um monte de logos de grandes empresas chamados “organizational members”
    Se você criou alguma coisa, precisa mostrar o que criou
    A menos que eu já saiba que preciso disso, acho que não vou gastar mais de 30 segundos tentando descobrir o que é
    Por que será que dificultaram tanto?

    • Concordo
      Precisei clicar várias vezes para chegar até aqui
      https://mbe.modelica.university/behavior/equations/first_order/
    • Na verdade, acho que é um site bem moderno
      Dá para comparar com o consórcio USB
      https://www.usb.org
      Ou com a PCI-SIG:
      https://pcisig.com
      Talvez a linguagem visual tenha sido moderna demais
      Será que você o confundiu com um projeto de startup, e não com um padrão industrial de mais de 25 anos?
      É interessante pensar que parecer moderno demais pode afetar negativamente a percepção e as expectativas
      Como teria sido a reação se o design do site fosse de por volta de 2018?
      http://web.archive.org/web/20180214180117/https://www.modelica.org/
    • Porque não é para você
      É para pessoas que simulam sistemas multidisciplinares complexos e precisam de uma forma de descrever, empacotar e trocar o comportamento desses sistemas
    • “Modelica is an object oriented language to model cyber-physical systems.”
      É literalmente a primeira frase
  • No meu emprego atual, uso Modelica com OpenModelica para descrever sistemas eletromagnéticos, e tanto a linguagem quanto a interface gráfica do OpenModelica são excelentes
    Às vezes penso nela como uma espécie de SPICE para sistemas multifísicos
    A biblioteca Modelica é bastante madura e completa, e os solvers numéricos incluídos no OpenModelica são robustos e têm bom desempenho
    Levou um tempo para aprender, mas agora está compensando
    Além disso, o fato de Modelica ser um padrão implementado por vários fornecedores e também ter aplicações open source é ótimo para evitar aprisionamento a fornecedor
    Vejo como uma tecnologia segura para engenheiros e empresas investirem

    • Modelica é uma ótima forma de realizar esse tipo de simulação
      O fato de a exportação de FMU segundo o padrão FMI ser um recurso de primeira classe também tem muito valor, especialmente para integradores de sistemas
      Você pode entregar um modelo de sistema razoavelmente ofuscado a uma parte não confiável, e ainda assim ela consegue obter plenamente os benefícios do modelo de sistema
      Nesse ponto, o OpenModelica está à frente de concorrentes como o ModelingToolkit.jl open source e a 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
    • Quando eu trabalhava como estudante na Siemens, lembro de extrair uma rede neural para ONNX, testar no OpenModelica uma FMU com a DLL do runtime ONNX acoplada e depois conectá-la ao Simcenter Amesim
      Comparado às APIs velhas e rígidas de softwares de engenharia, era um padrão bem decente
  • Eu me formei na universidade há 4 anos e só agora entrei na toca do coelho da modelagem por grafos de ligação; estou estudando por conta própria com as notas de aula do MIT de Henry M. Paynter e, no trabalho, modelando sistemas veiculares com Simscape
    Entendo que Modelica e Simscape usam grafos de ligação como mecanismo de base, mas não sei se isso está certo
    Seria ótimo se algum especialista da área pudesse me dar um direcionamento
    No momento, acredito que entender a teoria de grafos de ligação vai me permitir compreender intuitivamente quase todos os sistemas com que trabalho
    Também acho interessante como essa área é surpreendentemente de nicho
    A maioria dos meus colegas ao redor nunca deu muita atenção a isso, mas, quando descobri, pareceu a bala de prata para todos os meus problemas
    https://dirac.ruc.dk/~heine/paynter/analysis_and_design_of_engineering_systems_henry_m_paynter.pdf

  • Posts relacionados:
    All about Modelica: An equation-based language for modeling physical systems - https://news.ycombinator.com/item?id=23690788 - junho de 2020, 44 comentários
    Modelica - https://news.ycombinator.com/item?id=16013179 - dezembro de 2017, 12 comentários

  • +1 para ModelingToolkit.jl
    Ele incorporou lições aprendidas com Modelica e é prazeroso de usar

  • Pelo que entendi, isto é uma linguagem para descrever “sistemas” de uma forma bastante geral, e sistemas podem ser modelados por equações diferenciais ou equações discretas (if/then/else)
    Se for geral o suficiente, é excelente
    Mas a parte mais interessante é a metodologia geral para realmente executar simulações desses sistemas ao longo do tempo
    Especialmente se não for integração ou amostragem por Monte Carlo de força bruta, e sim algo que permita descrever equações diferenciais arbitrariamente complexas

    • Soluções numéricas de equações diferenciais ordinárias e equações diferenciais algébricas são uma área com muitos métodos excelentes
  • OpenModelica, uma implementação open source baseada na linguagem Modelica, também não pode ficar de fora
    Ainda não usei, mas pretendo explorar alguns recursos neste feriado
    https://openmodelica.org/

    • Se você estiver pensando em dar uma olhada no OpenModelica, talvez também goste do ModelingToolkit.jl
      https://docs.sciml.ai/ModelingToolkit/dev/
      Há também um projeto de Hilding Elmqvist, que trabalhou na Dassault no Dymola, a principal implementação comercial de Modelica
      O projeto dele é o Modia.jl
      https://github.com/ModiaSim/Modia.jl
      Pessoalmente, sinto que a comunidade Julia está convergindo para o MTK, mas, nos estágios iniciais da simulação de sistemas dinâmicos em Julia, o Modia estava à frente, e vejo que o MTK se inspirou bastante tanto no Modia quanto no Modelica
      O Modia é um pouco mais agradável de usar, integrou com alguns anos de antecedência coisas como um visualizador 3D e um pacote multibody completo, e a Julia Computing só agora está correndo atrás
      O MTK tem melhor suporte a solucionadores de backend e tem grande potencial para superar o Modia
      Especialmente porque o ritmo de lançamentos do Modia parece ter desacelerado
      https://github.com/JuliaComputing/Multibody.jl

    • Minha avaliação breve das versões pagas, com base no uso no trabalho, é: fique longe, fuja
      Não faz muito mais do que SPICE gratuito, o licenciamento é complicado e tem muitos bugs
      É como o LabVIEW do mundo da simulação
      Não usei a versão gratuita

    • Junto com colegas, venho desenvolvendo NESTML, uma linguagem de modelagem de sistemas dinâmicos para sistemas dinâmicos híbridos
      Aqui, sistemas dinâmicos híbridos são sistemas que incluem tanto dinâmica em tempo contínuo, expressa por equações diferenciais ordinárias, quanto o envio e recebimento de eventos discretos que ocorrem instantaneamente no tempo
      Tentamos minimizar a sintaxe, para que os modelos possam ser escritos de forma bem concisa
      Por exemplo:
      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 eventos, há sintaxes como "onReceive(in_port_name)" e "emit_spike()"
      A nomenclatura é bastante influenciada pelo domínio de aplicação da neurociência
      Ainda está em andamento, mas já existem aplicações interessantes, como redes neurais de spikes que reproduzem sequências depois de aprendê-las
      https://nestml.readthedocs.io/en/latest/tutorials/sequence_learning/sequence_learning.html
      Sinceramente, fiquei surpreso ao descobrir que algo assim ainda não existia quando começamos a desenvolver o NESTML
      Modelica é parecido, mas não parece ter suporte a eventos discretos
      Sei que isso é uma divulgação descarada, mas comentários e feedback são muito bem-vindos
      Todo o desenvolvimento acontece publicamente no GitHub e é licenciado sob GPL
      Se alguém conhece linguagens específicas de domínio semelhantes, eu gostaria de ler os comentários