- 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 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
-
Ngôn ngữ, thư viện, công cụ
- Modelica Language: Thông tin về ngôn ngữ Modelica
- Modelica Libraries: Thông tin về thư viện Modelica
- Modelica Tools: Thông tin về công cụ Modelica
- Modelica Association: Thông tin về Modelica Association
-
Association và các kênh liên hệ
- Modelica Association có thành viên tổ chức, và trên trang web có thể xem thêm hơn 21 thành viên
- Có thể chuyển đến cửa hàng merchandising qua Modelica merchandising shop
- Các kênh liên hệ là email board@modelica.org và Modelica Association Newsletter
1 bình luận
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/
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/
Đâ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
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
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í 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
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/
Tôi bấm khoảng 5 giây là tới được đoạn sau
Tôi tìm thấy trong chưa đầy 5 giây
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?
Tôi đã phải bấm vài lần mới tới được đây
https://mbe.modelica.university/behavior/equations/first_order/
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/
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
Đó đú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
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
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
Thực ra cộng đồng Modelica và cộng đồng bond graph có phần hơi đối lập nhau
Lập trường của tôi về câu chuyện này nằm ở [1] và [2]
Tôi cũng không đồng ý với ý tưởng rằng bond graph giúp hiểu trực quan gần như mọi hệ thống
Điều bạn có thể nhận được là sự cảm nhận về nét thanh nhã của cách hình thức hóa bond graph
Nhưng theo 30 năm kinh nghiệm mô hình hóa công nghiệp của tôi, các phép tương tự rút ra từ đó rất hời hợt
Vượt ra ngoài các phần tử thụ động, tuyến tính thì mọi phép tương tự đều đổ vỡ
Ví dụ sẽ nảy sinh các vấn đề như tại sao hệ nhiệt lại không có động lượng, nếu có chất lưu nén được thì sao, hay trong hệ điện thì thứ tương ứng với ly hợp là gì
Bond graph thực ra cũng không thật sự phi nhân quả, mà chỉ là một cách hình thức hóa nhân quả khác, gần với vật lý hơn
Những người hâm mộ bond graph chắc chắn sẽ không đồng ý, nhưng đây là chia sẻ quan điểm cá nhân và chủ quan của tôi
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/
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
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