- Modelica เป็น ภาษาเชิงวัตถุ สำหรับสร้างแบบจำลองระบบไซเบอร์-กายภาพที่ซับซ้อนได้อย่างมีประสิทธิภาพยิ่งขึ้น
- สามารถประกอบคอมโพเนนต์ที่นำกลับมาใช้ซ้ำได้ผ่าน การเชื่อมต่อแบบไม่ระบุเหตุและผล และสร้างแบบจำลองที่อิงสมการทางคณิตศาสตร์ได้
- ออกแบบมาเพื่อให้การสร้างแบบจำลองตาม หลักการพื้นฐาน (first principles) ทำได้ง่ายขึ้น โดยมุ่งเน้นการแสดงโครงสร้างและพฤติกรรมของระบบทางกายภาพโดยตรง
- เว็บไซต์ทางการรวบรวมข้อมูลเกี่ยวกับภาษา Modelica, ไลบรารี, เครื่องมือ และ Modelica Association ไว้ในที่เดียว
- ยังสามารถดูเอกสารเกี่ยวกับ Association, สมาชิกองค์กร, ร้านขายสินค้า, ช่องทางติดต่อทางอีเมลและจดหมายข่าวได้ด้วย
แนวทางการสร้างแบบจำลองของภาษา Modelica
- Modelica เป็นภาษาเชิงวัตถุสำหรับสร้างแบบจำลองระบบไซเบอร์-กายภาพ
- สามารถประกอบคอมโพเนนต์ที่นำกลับมาใช้ซ้ำได้ด้วยวิธี การเชื่อมต่อแบบไม่ระบุเหตุและผล
- คอมโพเนนต์ถูกแสดงเป็นแบบจำลองที่ถูกกำกับด้วย สมการทางคณิตศาสตร์
- โครงสร้างลักษณะนี้ใกล้เคียงกับการออกแบบเพื่อให้การสร้างแบบจำลองตามหลักการพื้นฐานทำได้ง่ายขึ้น
ข้อมูลที่มีให้บนเว็บไซต์ทางการ
-
ภาษา ไลบรารี และเครื่องมือ
- Modelica Language: ข้อมูลภาษา Modelica
- Modelica Libraries: ข้อมูลไลบรารี Modelica
- Modelica Tools: ข้อมูลเครื่องมือ Modelica
- Modelica Association: ข้อมูล Modelica Association
-
Association และช่องทางติดต่อ
- Modelica Association มี สมาชิกองค์กร และสามารถดูสมาชิกเพิ่มเติมได้มากกว่า 21 แห่งบนเว็บไซต์
- สามารถไปยังร้านขายสินค้าได้ผ่าน Modelica merchandising shop
- ช่องทางติดต่อคืออีเมล board@modelica.org และ Modelica Association Newsletter
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ตามคำอธิบายบนเว็บไซต์ Modelica เป็น ภาษาเชิงประกาศระดับสูง สำหรับอธิบายพฤติกรรมทางคณิตศาสตร์ และมักนำไปใช้กับระบบวิศวกรรม
ในอุตสาหกรรม HVAC ใช้กันค่อนข้างมาก และในกรณีของผมในฐานะวิศวกรควบคุม ผมสามารถขอ FMU ของคอมโพเนนต์หลาย ๆ ตัวจากวิศวกรระบบเพื่อทำงานด้านการปรับให้เหมาะสมได้
FMU (Functional Mockup Unit) คือไบนารีแบบสแตนด์อโลนที่แทนระบบพลวัตซึ่งแอปพลิเคชันอื่นสามารถรันได้
พื้นหลังของผมอยู่ฝั่ง reinforcement learning, model predictive control และ Python การที่สามารถฝังโมเดลอิงฟิสิกส์ที่เขียนด้วยภาษาเฉพาะโดเมนเข้าไปในเวิร์กโฟลว์ Python ได้จึงสะดวกมาก
Modelica มีมุมมองต่างจากการเขียนโปรแกรมเชิงคำสั่งทั่วไปอย่าง Python/MATLAB
เมื่อกำหนดสมการ ตัวแปร และข้อจำกัดโดยไม่ขึ้นกับลำดับ คอมไพเลอร์จะตัดสินใจเองว่าจะจำลองอย่างไร เช่น ควรแก้ตัวแปรใดก่อน
OpenModelica พัฒนาไปมากในฐานะ implementation แบบโอเพนซอร์สของมาตรฐานภาษา แต่ในภาคอุตสาหกรรม แอปพลิเคชันกรรมสิทธิ์อย่าง Dymola ยังเหนือกว่าอยู่
https://fmi-standard.org/
https://fmpy.readthedocs.io/en/latest/
https://openmodelica.org/
องค์กรเชิงพาณิชย์ที่อยู่เบื้องหลังภาษา Julia ได้รับทุนจาก DARPA เพื่อสร้างเครื่องมือเหล่านี้ และกำลังรวมกลุ่มนักวิจัยด้านการวิเคราะห์เชิงตัวเลข การคำนวณที่ขยายขนาดได้ และผู้เชี่ยวชาญโดเมนด้านการสร้างโมเดลระบบวิศวกรรมอย่างไฟฟ้าและเครื่องกลเข้าด้วยกัน
ผมคิดว่าอนาคตของการจำลองน่าจะไปทางนี้
https://juliahub.com/products/juliasim
https://news.ycombinator.com/item?id=26425659
https://docs.sciml.ai/DiffEqDocs/stable/
เป็น ภาษาแบบไม่กำหนดเหตุและผล ที่ค่อนข้างเฉพาะทาง และใช้กันอย่างแพร่หลายในมอเตอร์สปอร์ต (F1, NASCAR) สำหรับการจำลองแบบเรียลไทม์ใน driver simulator
สเปกของภาษาเป็นโอเพนซอร์ส แต่มีคอมไพเลอร์เชิงพาณิชย์อยู่หลายตัว โดย Dymola เป็นตัวที่มีชื่อเสียงที่สุด
ผมเขียนโค้ดด้วยภาษานี้เยอะ และความไม่กำหนดเหตุและผลของมันทรงพลังมาก
มันทำให้โมเดลประกอบกันได้ดีมาก จนสามารถประกอบระบบกลไกเหมือนบล็อกเลโก้ แล้วสมการจะออกมาเองโดยอัตโนมัติ
การกลับด้านโมเดลก็ทำได้ง่าย
ถ้าเทียบในโลกโปรแกรมมิง สิ่งที่ใกล้เคียงที่สุดคือ Haskell
แต่สุดท้ายตัวแก้สมการรับสมการที่สร้างขึ้นมาไม่ไหว และมันดูเหมือนกล่องดำที่ดีบักไม่ได้ เลยยอมแพ้
ยังไม่ชัดเจนว่าเป็นเพราะเราทำผิดเอง หรือเพราะทางเลือกโอเพนซอร์สยังรับมือไม่ไหว
ผมรู้สึกว่าสภาพแวดล้อมการสร้างโมเดลแบบไม่กำหนดเหตุและผลก็คล้ายกับระบบคำนวณเชิงสัญลักษณ์มาก
เพราะโดยเนื้อแท้แล้วมันคือระบบพีชคณิตคอมพิวเตอร์ที่นำมาประยุกต์ใช้นั่นเอง
จากการดูคำอธิบายในหน้า landing page ในฐานะคนนอกวงการนี้ ผมอยากให้หน้าแรกมี ตัวอย่าง หรือลิงก์ไปยังตัวอย่าง
ลองคลิกอยู่ราว 30 วินาที แต่ไม่เจออะไรที่ดึงดูดใจ
เช่น กฎแก๊สอุดมคติ PV = nRT มีตัวระบุ 5 ตัว
ในภาษาโปรแกรมส่วนใหญ่ ฝั่งซ้ายของการกำหนดค่าต้องมีตัวแปรเพียงตัวเดียว จึงต้องเขียนประมาณ T=PV/nR และถ้าจะหาตัวแปรอื่นก็ต้องสร้างชุดสมการคล้าย ๆ กันแยกต่างหาก
ใน Modelica คุณเขียนสมการเดียวกันด้วยสัญกรณ์คณิตศาสตร์ตามธรรมชาติได้เลย แล้วมันจะหาค่าที่ไม่รู้จากค่าที่รู้ให้
https://mbe.modelica.university/behavior/equations/electrical/
มากกว่านี้ผมก็ไม่ค่อยรู้แล้ว
ดูเหมือนเป็นเฟรมเวิร์กที่ทำให้ง่ายขึ้นสำหรับเขียนการจำลองระบบฟิสิกส์และไฟฟ้า
https://mbe.modelica.university/
ผมคลิกประมาณ 5 วินาทีก็ไปถึงส่วนนี้
ใช้เวลาไม่ถึง 5 วินาทีก็หาเจอ
ไม่รู้ว่ามันคืออะไร
ใน หน้าแลนดิ้งเพจ ไม่มีตัวอย่างเลยสักอัน และในลิงก์หลัก ๆ บนหน้าแลนดิ้งเพจก็ไม่มีตัวอย่างเลยสักอัน
แต่กลับมีร้านขายของที่ระลึกที่ซื้อแก้วมัคกับฮู้ดดี้ได้ และมีโลโก้บริษัทขนาดใหญ่จำนวนมากในส่วน “organizational members”
ถ้าสร้างอะไรขึ้นมา ก็ควรแสดงให้เห็นว่าสร้างอะไร
ถ้าไม่ได้รู้อยู่แล้วว่าต้องใช้มัน ก็คงไม่ใช้เวลาเกิน 30 วินาทีเพื่อพยายามหาว่ามันคืออะไร
ทำไมถึงทำให้ยากขนาดนี้นะ?
ต้องคลิกอยู่หลายครั้งกว่าจะมาถึงตรงนี้
https://mbe.modelica.university/behavior/equations/first_order/
ลองเทียบกับ USB Consortium ดูก็ได้
https://www.usb.org
หรือ PCI-SIG:
https://pcisig.com
บางทีภาษาในการออกแบบอาจจะทันสมัยเกินไปก็ได้
คุณอาจเข้าใจผิดว่าเป็นโปรเจกต์สตาร์ทอัพ แทนที่จะเป็นมาตรฐานอุตสาหกรรมที่มีอายุกว่า 25 ปีหรือเปล่า?
เป็นประเด็นที่น่าคิดว่า การดูทันสมัยเกินไปอาจส่งผลเสียต่อการรับรู้และความคาดหวังได้
ถ้าเป็นดีไซน์ไซต์ราวปี 2018 ปฏิกิริยาจะเป็นอย่างไรนะ?
http://web.archive.org/web/20180214180117/https://www.modelica.org/
มันทำมาสำหรับคนที่ต้องจำลองระบบซับซ้อนแบบสหสาขา และต้องการวิธีอธิบาย·บรรจุ·แลกเปลี่ยนพฤติกรรมของระบบ
นี่คือประโยคแรกตามตัวอักษรเลย
ตอนนี้ที่ทำงาน ผมใช้ Modelica ร่วมกับ OpenModelica เพื่ออธิบาย ระบบแม่เหล็กไฟฟ้า อยู่ ภาษาเองก็ยอดเยี่ยม และสภาพแวดล้อมผู้ใช้แบบกราฟิกของ OpenModelica ก็ยอดเยี่ยมเช่นกัน
บางครั้งผมมองว่ามันคล้าย SPICE สำหรับระบบหลายฟิสิกส์
ไลบรารี Modelica ค่อนข้างเติบโตและสมบูรณ์แล้ว และตัวแก้ปัญหาเชิงตัวเลขที่รวมมากับ OpenModelica ก็แข็งแกร่งและมีประสิทธิภาพดี
ใช้เวลาศึกษาอยู่พอสมควร แต่ตอนนี้เริ่มเห็นผลตอบแทนแล้ว
นอกจากนี้ การที่ Modelica เป็นมาตรฐานที่มีผู้ให้บริการหลายรายนำไป implement และยังมีแอปพลิเคชันโอเพนซอร์สด้วย ก็ช่วยหลีกเลี่ยงการถูกผูกติดกับผู้ขายได้ดี
ในมุมของวิศวกรและบริษัท ผมมองว่าเป็นเทคโนโลยีที่ลงทุนได้อย่างปลอดภัย
การที่ การส่งออก FMU ตามมาตรฐาน FMI เป็นฟังก์ชันระดับ first-class ก็มีคุณค่ามาก โดยเฉพาะสำหรับผู้บูรณาการระบบ
สามารถส่งต่อโมเดลระบบที่ถูกทำให้เข้าใจยากในระดับสมเหตุสมผลให้ฝ่ายที่ไม่น่าไว้วางใจได้ ขณะเดียวกันพวกเขาก็ยังได้รับประโยชน์จากโมเดลระบบอย่างเต็มที่
ในด้านนี้ OpenModelica นำหน้าคู่แข่งอย่าง ModelingToolkit.jl แบบโอเพนซอร์ส รวมถึงไลบรารีที่เกี่ยวข้องอย่าง FMIExport.jl
https://openmodelica.org/doc/OpenModelicaUsersGuide/v1.11.0/fmi.html
https://docs.sciml.ai/ModelingToolkit/stable/
https://github.com/ThummeTo/FMIExport.jl
เมื่อเทียบกับ API ของซอฟต์แวร์วิศวกรรมที่เก่าและแข็งทื่อแล้ว มันเป็นมาตรฐานที่ค่อนข้างดี
ผมเรียนจบมหาวิทยาลัยมา 4 ปีแล้ว แต่เพิ่งตอนนี้ถึงได้ลงไปในโพรงกระต่ายของ การสร้างโมเดลแบบ bond graph และกำลังศึกษาด้วยตัวเองจากโน้ตการบรรยาย MIT ของ Henry M. Paynter ขณะเดียวกันที่ทำงานก็ใช้ Simscape สร้างโมเดลระบบยานยนต์อยู่
ผมเข้าใจว่า Modelica และ Simscape ใช้ bond graph เป็นกลไกพื้นฐาน ไม่รู้ว่าเข้าใจถูกไหม
ถ้ามีผู้เชี่ยวชาญในสาขานี้ช่วยชี้ทางให้หน่อยก็คงดี
ตอนนี้ผมเชื่อว่าถ้าเข้าใจทฤษฎี bond graph แล้ว จะเข้าใจแทบทุกระบบที่ผมทำงานด้วยได้อย่างเป็นสัญชาตญาณ
น่าสนใจด้วยที่สาขานี้กลับค่อนข้างเฉพาะกลุ่ม
เพื่อนร่วมงานรอบตัวส่วนใหญ่ไม่ได้ใส่ใจเป็นพิเศษ แต่พอผมได้รู้จักมัน มันดูเหมือนกระสุนวิเศษสำหรับทุกปัญหาของผม
https://dirac.ruc.dk/~heine/paynter/analysis_and_design_of_engineering_systems_henry_m_paynter.pdf
จริง ๆ แล้วคอมมูนิตี้ Modelica กับคอมมูนิตี้ bond graph มีแง่ที่ค่อนข้างขัดแย้งกันอยู่บ้าง
จุดยืนของผมในเรื่องนี้อยู่ใน [1] และ [2]
ผมไม่เห็นด้วยเช่นกันกับแนวคิดที่ว่า bond graph จะทำให้เข้าใจแทบทุกระบบได้อย่างเป็นสัญชาตญาณ
สิ่งที่คุณจะได้คือความซาบซึ้งในความสง่างามของการจัดรูปแบบแบบ bond graph
แต่จากประสบการณ์สร้างโมเดลในอุตสาหกรรม 30 ปี อุปมาที่ดึงออกมาจากตรงนั้นนั้นผิวเผินมาก
พอเกินกว่าองค์ประกอบแบบพาสซีฟและเชิงเส้น อุปมาทั้งหมดก็พังลง
ตัวอย่างเช่น จะเกิดคำถามอย่างทำไมระบบความร้อนจึงไม่มีโมเมนตัม, ถ้ามีของไหลอัดตัวได้จะเป็นอย่างไร, หรือสิ่งที่เทียบเท่ากับคลัตช์ในระบบไฟฟ้าคืออะไร
bond graph ไม่ได้เป็นแบบไร้สาเหตุจริง ๆ และเป็นเพียงการจัดรูปแบบเชิงสาเหตุอีกแบบหนึ่งที่ใกล้กับฟิสิกส์มากกว่าเท่านั้น
แฟน ๆ bond graph คงไม่เห็นด้วยแน่นอน แต่นี่เป็นการแบ่งปันมุมมองส่วนตัวและเชิงอัตวิสัยของผม
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/
บทความที่เกี่ยวข้อง:
All about Modelica: An equation-based language for modeling physical systems - https://news.ycombinator.com/item?id=23690788 - มิถุนายน 2020, 44 ความคิดเห็น
Modelica - https://news.ycombinator.com/item?id=16013179 - ธันวาคม 2017, 12 ความคิดเห็น
+1 ให้ ModelingToolkit.jl
มันนำสิ่งที่เรียนรู้จาก Modelica มาใช้ และทำงานด้วยแล้วสนุก
ตามที่ผมเข้าใจ นี่เป็นภาษาที่ใช้อธิบาย “ระบบ” ในลักษณะที่ค่อนข้างทั่วไป และระบบสามารถถูกสร้างโมเดลด้วย สมการเชิงอนุพันธ์ หรือสมการแบบไม่ต่อเนื่อง (if/then/else) ได้
ถ้าทั่วไปได้เพียงพอก็ยอดเยี่ยมมาก
แต่ส่วนที่น่าสนใจกว่านั้นคือระเบียบวิธีทั่วไปในการรันการจำลองระบบแบบอิงเวลาเหล่านั้นจริง ๆ
โดยเฉพาะอย่างยิ่งถ้าเราสามารถอธิบายสมการเชิงอนุพันธ์ที่ซับซ้อนตามอำเภอใจได้ ไม่ใช่แค่การอินทิเกรตหรือการสุ่มตัวอย่างแบบ Monte Carlo อย่างหว่านแห
จะขาด OpenModelica ซึ่งเป็นการใช้งานแบบโอเพนซอร์สที่อิงภาษา Modelica ไปไม่ได้เช่นกัน
ยังไม่เคยลองใช้ แต่ตั้งใจจะดูฟีเจอร์บางอย่างในวันหยุดนี้
https://openmodelica.org/
ถ้าคิดจะลองดู OpenModelica ก็อาจชอบ ModelingToolkit.jl ด้วย
https://docs.sciml.ai/ModelingToolkit/dev/
ยังมีโปรเจกต์ของ Hilding Elmqvist ผู้เคยทำงานกับ Dassault ใน Dymola ซึ่งเป็น implementation เชิงพาณิชย์ตัวแทนของ Modelica
โปรเจกต์ของเขาคือ Modia.jl
https://github.com/ModiaSim/Modia.jl
โดยส่วนตัวรู้สึกว่าชุมชน Julia กำลังไปรวมกันที่ MTK แต่ในช่วงแรก ๆ ของการจำลองระบบพลวัตใน Julia นั้น Modia นำหน้าอยู่ และมองว่า MTK ได้แรงบันดาลใจมามากทั้งจาก Modia และ Modelica
Modia ใช้งานได้ลื่นกว่าเล็กน้อย และรวมสิ่งอย่าง 3D viewer กับแพ็กเกจ multibody แบบครบถ้วนไว้ก่อนหลายปี ส่วน Julia Computing เพิ่งกำลังไล่ตามทัน
MTK รองรับ backend solver ได้ดีกว่า และมีโอกาสแซง Modia ได้มาก
โดยเฉพาะเพราะดูเหมือนความถี่ในการออกรุ่นของ Modia จะช้าลง
https://github.com/JuliaComputing/Multibody.jl
จากมุมมองที่เคยใช้ในที่ทำงาน ความเห็นสั้น ๆ ของผมต่อเวอร์ชันเสียเงินคือ: อยู่ให้ห่าง หนีไปให้ไกล
ทำอะไรได้ไม่มากไปกว่า SPICE ฟรีสักเท่าไร ไลเซนส์ก็ซับซ้อน และบั๊กเยอะ
เหมือน LabVIEW แห่งวงการ simulation
ส่วนเวอร์ชันฟรีไม่เคยลองใช้
ผมกับเพื่อนร่วมงานได้พัฒนาภาษาแบบจำลองระบบพลวัตสำหรับระบบพลวัตไฮบริดชื่อ NESTML
ในที่นี้ ระบบพลวัตไฮบริดหมายถึงระบบที่มีทั้งพลวัตเวลาอย่างต่อเนื่องซึ่งแสดงด้วยสมการอนุพันธ์สามัญ และการรับส่งเหตุการณ์แบบไม่ต่อเนื่องที่เกิดขึ้นทันทีตามเวลา
เราพยายามลดไวยากรณ์ให้เหลือน้อยที่สุด จึงเขียนโมเดลได้กระชับมาก
ตัวอย่างเช่น:
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
สำหรับ event มีไวยากรณ์อย่าง "onReceive(in_port_name)" และ "emit_spike()"
แนวการตั้งชื่อได้รับอิทธิพลค่อนข้างมากจากโดเมนการประยุกต์ใช้ด้านประสาทวิทยาศาสตร์
แม้ยังอยู่ระหว่างพัฒนา แต่ก็มีแอปพลิเคชันเจ๋ง ๆ แล้ว เช่น spiking neural network ที่เรียนรู้แล้วเล่นลำดับซ้ำ
https://nestml.readthedocs.io/en/latest/tutorials/sequence_learning/sequence_learning.html
พูดตรง ๆ ว่าตอนเริ่มพัฒนา NESTML ผมแปลกใจที่ยังไม่มีของแบบนี้อยู่ก่อนแล้ว
Modelica คล้ายกัน แต่ดูเหมือนจะไม่รองรับเหตุการณ์แบบไม่ต่อเนื่อง
รู้ว่าเป็นการโปรโมตอย่างโจ่งแจ้ง แต่จริง ๆ แล้วยินดีรับคอมเมนต์และฟีดแบ็กมาก
การพัฒนาทั้งหมดทำแบบเปิดบน GitHub และใช้ไลเซนส์ GPL
ถ้าใครรู้จักภาษาเฉพาะโดเมนที่คล้ายกัน ก็อยากอ่านคอมเมนต์ครับ