1 điểm bởi GN⁺ 2024-12-18 | 1 bình luận | Chia sẻ qua WhatsApp
  • Modelicangôn ngữ hướng đối tượng để mô hình hóa các hệ thống vật lý mạng phức tạp hiệu quả hơn
  • Có thể kết hợp các thành phần tái sử dụng bằng kết nối phi nhân quả và xây dựng mô hình dựa trên các phương trình toán học
  • Được thiết kế để giúp mô hình hóa dựa trên nguyên lý thứ nhất (first principles) dễ dàng hơn, tập trung vào việc biểu diễn trực tiếp cấu trúc và hành vi của hệ thống vật lý
  • Trang web chính thức cung cấp ở một nơi thông tin về ngôn ngữ Modelica, thư viện, công cụ và Modelica Association
  • Cũng có thể xem các tài liệu liên quan đến Association, thành viên tổ chức, cửa hàng merchandising và các kênh liên hệ qua email・newsletter

Cách mô hình hóa của ngôn ngữ Modelica

  • Modelica là ngôn ngữ hướng đối tượng để mô hình hóa các hệ thống vật lý mạng
  • Có thể kết hợp các thành phần tái sử dụng theo kiểu kết nối phi nhân quả
  • Các thành phần được biểu diễn dưới dạng mô hình chịu sự chi phối của phương trình toán học
  • Cấu trúc này gần với một thiết kế nhằm giúp mô hình hóa dựa trên nguyên lý thứ nhất trở nên dễ dàng hơn

Tài liệu được cung cấp trên trang web chính thức

1 bình luận

 
GN⁺ 2024-12-18
Các ý kiến trên Hacker News
  • Như phần mô tả trên website, Modelica là một ngôn ngữ khai báo cấp cao để mô tả hành vi toán học, thường được áp dụng cho các hệ thống kỹ thuật
    Trong ngành HVAC, nó được dùng khá nhiều; trong trường hợp của tôi, với vai trò kỹ sư điều khiển, tôi có thể yêu cầu kỹ sư hệ thống cung cấp FMU của nhiều thành phần để phục vụ công việc tối ưu hóa
    FMU (Functional Mockup Unit) là một binary độc lập biểu diễn một hệ động lực học mà ứng dụng khác có thể chạy
    Nền tảng của tôi là học tăng cường, điều khiển dự báo mô hình và Python, nên việc có thể nhúng các mô hình dựa trên vật lý viết bằng ngôn ngữ đặc thù miền vào workflow Python là khá tiện
    Modelica có góc nhìn khác với lập trình mệnh lệnh thông thường như Python/MATLAB
    Bạn định nghĩa các phương trình, biến và ràng buộc không phụ thuộc thứ tự, rồi trình biên dịch quyết định cách chạy mô phỏng, chẳng hạn biến nào cần giải trước
    OpenModelica đã tiến bộ nhiều với tư cách là một triển khai mã nguồn mở của chuẩn ngôn ngữ, nhưng trong công nghiệp, các ứng dụng độc quyền như Dymola vẫn đang chiếm ưu thế
    https://fmi-standard.org/
    https://fmpy.readthedocs.io/en/latest/
    https://openmodelica.org/

    • Một hướng giải pháp khác đang nổi lên là hệ sinh thái mô phỏng của Julia
      Tổ chức thương mại đứng sau ngôn ngữ Julia đã nhận tài trợ từ DARPA để xây dựng các công cụ này, và đang kết nối các nhà nghiên cứu phân tích số, tính toán có khả năng mở rộng, cùng các chuyên gia miền về mô hình hóa hệ thống kỹ thuật như điện và cơ khí
      Tôi nghĩ tương lai của mô phỏng sẽ đi theo hướng này
      https://juliahub.com/products/juliasim
      https://news.ycombinator.com/item?id=26425659
      https://docs.sciml.ai/DiffEqDocs/stable/
    • MATLAB cũng cạnh tranh trong cùng lĩnh vực này à?
  • Đây là một ngôn ngữ phi nhân quả khá ngách, và được dùng rộng rãi trong motorsport (F1, NASCAR) cho mô phỏng thời gian thực của simulator dành cho tay đua
    Đặc tả ngôn ngữ là mã nguồn mở, nhưng có nhiều trình biên dịch thương mại, trong đó Dymola là nổi tiếng nhất
    Tôi code bằng ngôn ngữ này khá nhiều, và tính phi nhân quả của nó rất mạnh
    Nó khiến mô hình có khả năng tổ hợp rất cao: bạn lắp ráp hệ cơ khí như các khối Lego thì các phương trình sẽ tự động được sinh ra
    Việc đảo ngược mô hình cũng có thể thực hiện dễ dàng
    Phép so sánh gần nhất trong thế giới lập trình là Haskell

    • Cách tiếp cận này trông rất thú vị nên tôi từng thử dùng nó để mô hình hóa một hệ chất lưu khá phức tạp có ống, van, bồn chứa, v.v.
      Nhưng cuối cùng bộ giải không chịu nổi các phương trình được sinh ra, và vì nó trông như một hộp đen không thể debug nên chúng tôi đã bỏ cuộc
      Không rõ là do chúng tôi làm sai, hay do các lựa chọn mã nguồn mở thay thế vẫn chưa gánh nổi
    • Hoàn toàn đồng ý, và có lẽ bạn đang làm việc gì đó thú vị
      Tôi cảm thấy môi trường mô hình hóa phi nhân quả cũng rất giống các hệ thống tính toán ký hiệu
      Vì về bản chất, đó là một hệ đại số máy tính ứng dụng
  • Chỉ nhìn phần mô tả trên landing page, với tư cách người không làm trong lĩnh vực này, tôi nghĩ sẽ tốt hơn nếu có ví dụ hoặc liên kết tới ví dụ ngay ở màn hình đầu tiên
    Tôi đã bấm thử khoảng 30 giây nhưng không tìm thấy nội dung nào đủ hấp dẫn

    • Với tư cách người ngoài tò mò về Modelica, vài năm trước tôi thấy hứng thú khi biết ngôn ngữ này cho phép viết phương trình trực tiếp hơn hầu hết các ngôn ngữ lập trình
      Ví dụ định luật khí lý tưởng PV = nRT có 5 định danh
      Trong phần lớn ngôn ngữ lập trình, bạn phải đặt một biến ở vế trái của phép gán, nên sẽ viết kiểu T=PV/nR; còn nếu muốn tìm biến khác thì phải tạo riêng các bộ phương trình tương tự
      Trong Modelica, bạn có thể viết cùng phương trình đó đúng như ký pháp toán học tự nhiên, rồi dựa trên các giá trị đã biết để tìm ẩn số
      https://mbe.modelica.university/behavior/equations/electrical/
      Ngoài mức đó thì tôi không biết rõ hơn
    • Ví dụ ở đây
      Trông giống một framework giản lược để viết mô phỏng hệ vật lý và điện
      https://mbe.modelica.university/
    • Liên kết đầu tiên “Modelica Language” có tutorial và ví dụ
      Tôi bấm khoảng 5 giây là tới được đoạn sau

      Hãy xét một phương trình vi phân rất đơn giản:
      x = (1-X)
      Nhìn vào phương trình này, chỉ có một biến là x
      Phương trình này có thể được biểu diễn trong Modelica như sau:
      model FirstOrder
      Real x;
      equation
      der(x) = 1-x;
      end FirstOrder;
      Đoạn mã này bắt đầu bằng từ khóa model, biểu thị phần mở đầu của định nghĩa mô hình
      Sau từ khóa model là tên mô hình FirstOrder, tiếp đó là phần khai báo tất cả các biến mà ta quan tâm
      vân vân

    • Modelica Language -> Modelica By Example -> https://mbe.modelica.university/
      Tôi tìm thấy trong chưa đầy 5 giây
    • Có vẻ họ có bán merch mang thương hiệu của mình
  • Tôi không hiểu đây là cái gì
    Trang landing không có lấy một ví dụ nào, và trong các liên kết chính trên trang landing cũng chẳng có ví dụ nào
    Thay vào đó có một cửa hàng merchandise nơi có thể mua cốc và áo hoodie, cùng những logo công ty khổng lồ gọi là “organizational members”
    Nếu đã làm ra thứ gì đó thì phải cho thấy thứ đã làm
    Nếu không phải là tôi đã biết mình cần nó, chắc tôi sẽ không bỏ quá 30 giây để tìm hiểu nó là gì
    Sao họ lại làm khó hiểu đến vậy?

    • Đồng ý
      Tôi đã phải bấm vài lần mới tới được đây
      https://mbe.modelica.university/behavior/equations/first_order/
    • Thực ra tôi nghĩ đây là một trang khá hiện đại
      Cứ so với USB Consortium là thấy
      https://www.usb.org
      Hoặc PCI-SIG:
      https://pcisig.com
      Có lẽ ngôn ngữ thiết kế lại quá hiện đại
      Có phải bạn đã nhầm nó với một dự án startup, chứ không phải một tiêu chuẩn công nghiệp đã hơn 25 năm tuổi?
      Cũng đáng suy nghĩ là việc trông quá hiện đại có thể ảnh hưởng xấu đến nhận thức và kỳ vọng
      Nếu thiết kế trang web kiểu khoảng năm 2018 thì phản ứng sẽ ra sao?
      http://web.archive.org/web/20180214180117/https://www.modelica.org/
    • Vì nó không dành cho bạn
      Nó dành cho những người cần mô phỏng các hệ thống đa lĩnh vực phức tạp, và cần một cách để mô tả, đóng gói, trao đổi hành vi của hệ thống
    • “Modelica is an object oriented language to model cyber-physical systems.”
      Đó đúng là câu đầu tiên
  • Ở nơi làm hiện tại, tôi đang dùng Modelica cùng OpenModelica để mô tả hệ thống điện từ, và cả ngôn ngữ lẫn môi trường người dùng đồ họa của OpenModelica đều rất tuyệt
    Đôi khi tôi nghĩ nó giống như SPICE cho các hệ thống đa vật lý
    Thư viện Modelica khá trưởng thành và hoàn thiện, còn các bộ giải số tích hợp trong OpenModelica thì vững chắc và hiệu năng tốt
    Mất một thời gian để học, nhưng giờ đang bắt đầu thấy đáng công
    Hơn nữa, việc Modelica là một tiêu chuẩn được nhiều nhà cung cấp triển khai và cũng có ứng dụng mã nguồn mở rất tốt cho việc tránh bị khóa vào nhà cung cấp
    Tôi xem đây là một công nghệ an toàn để các kỹ sư và công ty đầu tư vào

    • Modelica là một cách tuyệt vời để thực hiện các mô phỏng như thế này
      Việc xuất FMU theo tiêu chuẩn FMI là một tính năng hạng nhất cũng rất có giá trị, đặc biệt quan trọng với các đơn vị tích hợp hệ thống
      Có thể chuyển các mô hình hệ thống đã được làm rối ở mức hợp lý cho những bên không đáng tin cậy, trong khi họ vẫn nhận được đầy đủ lợi ích của mô hình hệ thống
      Ở điểm này, OpenModelica đang đi trước các đối thủ, bao gồm ModelingToolkit.jl mã nguồn mở và thư viện liên quan FMIExport.jl
      https://openmodelica.org/doc/OpenModelicaUsersGuide/v1.11.0/fmi.html
      https://docs.sciml.ai/ModelingToolkit/stable/
      https://github.com/ThummeTo/FMIExport.jl
    • Tôi nhớ hồi làm sinh viên ở Siemens, tôi đã trích xuất mạng nơ-ron sang ONNX, gắn DLL ONNX Runtime vào FMU, thử nghiệm bằng OpenModelica rồi kết nối với Simcenter Amesim
      So với những API cũ kỹ, cứng nhắc của phần mềm kỹ thuật thì đó là một tiêu chuẩn khá ổn
  • Tôi đã tốt nghiệp đại học 4 năm trước, và giờ mới bắt đầu đi vào “hang thỏ” của mô hình hóa bond graph, tự học bằng ghi chú bài giảng MIT của Henry M. Paynter, đồng thời ở chỗ làm thì dùng Simscape để mô hình hóa hệ thống xe
    Tôi hiểu rằng Modelica và Simscape lấy bond graph làm cơ chế nền tảng, không biết có đúng không
    Mong có chuyên gia trong lĩnh vực này chỉ hướng giúp
    Hiện tại tôi tin rằng nếu hiểu lý thuyết bond graph thì sẽ hiểu một cách trực quan gần như mọi hệ thống mình xử lý
    Việc lĩnh vực này bất ngờ là một ngách cũng khá thú vị
    Hầu hết đồng nghiệp xung quanh không đặc biệt để tâm, nhưng khi biết đến nó thì tôi thấy như viên đạn bạc cho mọi vấn đề của mình
    https://dirac.ruc.dk/~heine/paynter/analysis_and_design_of_engineering_systems_henry_m_paynter.pdf

  • Bài liên quan:
    All about Modelica: An equation-based language for modeling physical systems - https://news.ycombinator.com/item?id=23690788 - tháng 6 năm 2020, 44 bình luận
    Modelica - https://news.ycombinator.com/item?id=16013179 - tháng 12 năm 2017, 12 bình luận

  • +1 cho ModelingToolkit.jl
    Nó đã tiếp thu những điều học được từ Modelica, và làm việc với nó rất thú vị

  • Theo tôi hiểu, đây là một ngôn ngữ mô tả “hệ thống” theo cách khá tổng quát, và hệ thống có thể được mô hình hóa bằng phương trình vi phân hoặc phương trình rời rạc (if/then/else)
    Nếu đủ tổng quát thì rất tuyệt
    Tuy nhiên phần thú vị hơn là phương pháp luận tổng quát để thực sự chạy mô phỏng theo thời gian cho những hệ thống như vậy
    Đặc biệt nếu có thể mô tả các phương trình vi phân phức tạp tùy ý, chứ không chỉ tích phân hay lấy mẫu kiểu Monte Carlo vét cạn

    • Nghiệm số của phương trình vi phân thường và phương trình vi phân-đại số là một lĩnh vực có rất nhiều phương pháp xuất sắc
  • Cũng không thể không nhắc đến OpenModelica, một triển khai mã nguồn mở dựa trên ngôn ngữ Modelica
    Tôi vẫn chưa dùng thử, nhưng dự định sẽ xem qua một vài tính năng vào kỳ nghỉ này
    https://openmodelica.org/

    • Nếu định tìm hiểu OpenModelica, có thể bạn cũng sẽ thích ModelingToolkit.jl
      https://docs.sciml.ai/ModelingToolkit/dev/
      Cũng có một dự án của Hilding Elmqvist, người từng làm Dymola—triển khai thương mại tiêu biểu của Modelica—tại Dassault
      Dự án của ông ấy là Modia.jl
      https://github.com/ModiaSim/Modia.jl
      Cá nhân tôi có cảm giác cộng đồng Julia đang quy tụ quanh MTK, nhưng ở giai đoạn đầu của mô phỏng hệ động lực trong Julia thì Modia từng đi trước, và tôi cho rằng MTK đã lấy nhiều cảm hứng từ cả Modia lẫn Modelica
      Modia cho cảm giác sử dụng tốt hơn một chút, đã tích hợp những thứ như trình xem 3D và gói đa vật thể hoàn chỉnh sớm hơn vài năm, còn Julia Computing giờ mới đang bắt kịp
      MTK có hỗ trợ bộ giải phía backend tốt hơn và rất có khả năng vượt qua Modia
      Đặc biệt là vì có vẻ tốc độ phát hành của Modia đã chậm lại
      https://github.com/JuliaComputing/Multibody.jl

    • Từ góc độ từng dùng bản trả phí ở nơi làm việc, nhận xét ngắn của tôi là: hãy tránh xa, chạy ngay đi
      Nó không làm được nhiều hơn SPICE miễn phí là bao, giấy phép thì phức tạp, lại nhiều lỗi
      Giống như LabVIEW của giới mô phỏng vậy
      Tôi chưa dùng bản miễn phí

    • Tôi cùng các đồng nghiệp đã phát triển NESTML, một ngôn ngữ mô hình hóa hệ động lực dành cho các hệ động lực lai
      Ở đây, hệ động lực lai là hệ bao gồm cả động lực thời gian liên tục được biểu diễn bằng phương trình vi phân thường, lẫn việc gửi và nhận các sự kiện rời rạc xảy ra tức thời theo thời gian
      Chúng tôi cố gắng tối giản cú pháp, nên có thể viết mô hình rất gọn
      Ví dụ:
      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

      Với sự kiện thì có các cú pháp như "onReceive(in_port_name)" và "emit_spike()"
      Cách đặt tên chịu ảnh hưởng khá nhiều từ miền ứng dụng khoa học thần kinh
      Vẫn đang trong quá trình phát triển, nhưng đã có những ứng dụng thú vị như mạng nơ-ron spiking có thể phát lại chuỗi sau khi học
      https://nestml.readthedocs.io/en/latest/tutorials/sequence_learning/sequence_learning.html
      Thành thật mà nói, tôi đã khá ngạc nhiên khi bắt đầu phát triển NESTML mà những thứ như vậy vẫn chưa tồn tại
      Modelica thì tương tự, nhưng dường như không hỗ trợ sự kiện rời rạc
      Tôi biết đây là quảng bá lộ liễu, nhưng thật ra chúng tôi rất hoan nghênh bình luận và phản hồi
      Toàn bộ quá trình phát triển đều diễn ra công khai trên GitHub và theo giấy phép GPL
      Nếu ai biết các ngôn ngữ chuyên biệt miền tương tự, tôi rất muốn đọc bình luận