การจำลองชีวิตของอนุภาค
- โปรแกรมอย่างง่ายที่จำลองชีวิตประดิษฐ์แบบปฐมภูมิโดยใช้กฎแรงดึงดูดและแรงผลักอย่างง่ายระหว่างอนุภาคคล้ายอะตอม
- เมื่อไม่นับองค์ประกอบ GUI แล้ว โค้ดมีความยาวไม่ถึงหนึ่งหน้า
- สามารถดูวิดีโอสอนและคำแนะนำได้ด้านล่าง
เรียนรู้เพิ่มเติม (วิดีโอสอนบน YouTube)
- มีลิงก์ไปยังวิดีโอสอนบน YouTube
เดโมออนไลน์ (เวอร์ชัน JavaScript)
- มีลิงก์เดโมสดแบบ 2D และ 3D
อินเทอร์เฟซ (เวอร์ชัน C++)
ตัวอย่างผลลัพธ์
รูปแบบที่น่าสนใจบางอย่างที่สามารถสร้างซ้ำได้
- ไม่จำเป็นต้องตั้งค่าพารามิเตอร์ให้ตรงกันทุกประการเพื่อสร้างรูปแบบเหล่านี้ซ้ำ
- วิธีที่ดีที่สุดในการได้รูปแบบที่น่าสนใจคือ ลองสำรวจพารามิเตอร์แบบสุ่มก่อน
- เมื่อพบรูปแบบที่น่าสนใจแล้ว ค่อย ๆ ปรับละเอียดทีละน้อย
- อาจลองกระโดดค่าพารามิเตอร์ครั้งใหญ่เป็นบางครั้งเพื่อไม่ให้ติดอยู่ที่ค่าสูงสุดเฉพาะจุด
วิธีใช้งาน
- ดาวน์โหลดรีโพซิทอรีนี้ แตกไฟล์ ไปที่โฟลเดอร์ /particle_life/bin/ แล้วคลิก particle_life.exe
โค้ด
- ซอร์สโค้ดมีให้ใน C++, JavaScript และ Python
- มีลิงก์ไปยังวิดีโอสอนบน YouTube
- หากต้องการมีส่วนร่วมกับโปรแกรม C++ อัลกอริทึมหลักอยู่ใน 100 บรรทัดแรกของ "/particle_life/src/ofApp.cpp"
- ส่วนที่เหลือคือองค์ประกอบ GUI และตัวควบคุมการเรนเดอร์ที่มาจากไลบรารี openFrameworks
- หากต้องการเริ่มต้น ให้ดาวน์โหลดรีโพซิทอรีนี้และไลบรารี openFrameworks จากนั้นใช้ projectGenerator ของ openFrameworks เพื่อนำเข้าโฟลเดอร์ /particle_life/ เข้าเป็นโปรเจกต์
- หรือจะสร้างโปรเจกต์ openFrameworks ใหม่แล้วเพิ่ม ofxGui จากนั้นแทนที่ไฟล์โปรเจกต์ที่สร้างขึ้นด้วยโฟลเดอร์ /src/ ที่ให้ไว้ที่นี่
- จากนั้นก็สามารถคอมไพล์โค้ด C++ ได้
พอร์ตอื่น ๆ
- มีรายการเวอร์ชันที่พอร์ตไปยังภาษาต่าง ๆ มากมาย เช่น Godot, Rust, Go-1, Go-2, Go-3, Python, Lua, QB64-PE, WebGL, Java, C# Winforms, FreeBasic เป็นต้น
ตัวอย่างโค้ด JavaScript
- สามารถดูตัวอย่างโค้ด JavaScript และไฟล์ particle_life.html ซึ่งเป็นเวอร์ชันที่ปรับแต่งประสิทธิภาพแล้ว
หัวข้อที่เกี่ยวข้อง
- คำอธิบายเกี่ยวกับการจำลองชีวิตของอนุภาค, primordial soup - evolution, Conway's Game of Life, cellular automata, รูปแบบการจัดระเบียบตัวเอง และอื่น ๆ
- โปรเจกต์นี้ได้รับแรงบันดาลใจจาก Clusters ของ Jeffery Ventrella และสามารถจำลองอนุภาคหลายพันตัวแบบเรียลไทม์ได้เพราะไม่ได้ใช้การตรวจจับการชนกัน
- การเพิ่มตัวควบคุม GUI ทำให้สามารถปรับละเอียดและสำรวจพารามิเตอร์แบบเรียลไทม์ได้ง่ายขึ้น ส่งผลให้เกิดรูปแบบที่ไม่เคยเห็นมาก่อนจากโมเดลความสัมพันธ์ที่เรียบง่ายมาก
- โค้ดนี้เริ่มต้นจากการเป็นสื่อการสอน และมุ่งไปที่ผู้ที่ไม่ใช่โปรแกรมเมอร์และสาธารณชนทั่วไป เพื่อพิสูจน์ว่าความซับซ้อนสามารถเกิดขึ้นจากความเรียบง่ายได้
รายการสิ่งที่ต้องทำ
- เพิ่มฟังก์ชันสำหรับบันทึกและโหลดพารามิเตอร์ (เพื่อให้ผู้คนแชร์โมเดลที่น่าสนใจได้ง่าย)
- เพิ่มความสามารถในการรองรับชนิดของอนุภาคมากขึ้น (ปัจจุบันล็อกไว้ที่อนุภาค 4 ชนิด)
- คอขวดที่ใหญ่ที่สุดในตอนนี้คือลูป
for แบบซ้อนสำหรับคำนวณระยะทางแบบจับคู่ระหว่างอนุภาคทั้งหมด ซึ่งมีความซับซ้อนในการคำนวณแบบกำลังสอง
- อีกทางเลือกสำหรับข้อ 3 คือ การคำนวณระยะทางแบบจับคู่สามารถทำแบบขนานได้มากพอที่จะย้ายไปคำนวณบน GPU
- เพิ่มความสามารถในการปรับขนาดหน้าจอและปรับปรุงการตรวจสอบขอบเขต (อนุภาคจำนวนมากที่เคลื่อนที่เร็วอาจหลุดออกนอกขอบหน้าจอได้)
- เพิ่ม UI ที่ใช้งานเข้าใจง่ายขึ้น เพื่อให้ควบคุมพารามิเตอร์ได้ละเอียดมากขึ้น
- เพิ่มปุ่มสุ่ม หรือแนวทางที่ดีกว่าคือมีกฎเมตาอย่างง่ายที่เปลี่ยนกฎตั้งต้นอย่างต่อเนื่อง เพื่อให้รูปแบบไม่ค้างอยู่ที่ค่าสูงสุดเฉพาะจุดแต่เปลี่ยนแปลงต่อไปเรื่อย ๆ
- วิธีที่ดีกว่าอาจเป็นการใช้อัลกอริทึมวิวัฒนาการเพื่อเลือกและปรับพารามิเตอร์ให้เหมาะสม แต่สำหรับสิ่งนั้นจำเป็นต้องเขียนฟังก์ชันความเหมาะสมขึ้นมา ซึ่งตอนนี้ยังไม่ทราบว่าฟังก์ชันความเหมาะสมในขอบเขตของโปรแกรมนี้ควรเป็นอะไร
ความเห็นของ GN⁺
- โปรเจกต์นี้มีคุณค่าอย่างมากในการแสดงให้เห็นเชิงภาพว่า ปรากฏการณ์ชีวิตที่ซับซ้อนสามารถเกิดขึ้นได้อย่างไรจากกฎที่เรียบง่าย
- อาจเป็นสื่อเริ่มต้นที่น่าสนใจสำหรับวิศวกรซอฟต์แวร์ระดับเริ่มต้นที่สนใจการเขียนโปรแกรมและการวิจัยชีวิตประดิษฐ์
- เนื่องจากมีเวอร์ชันที่พอร์ตไปยังหลายภาษา จึงอาจช่วยขยายความเข้าใจเกี่ยวกับภาษาการเขียนโปรแกรมที่หลากหลายได้
1 ความคิดเห็น
ความคิดเห็นใน Hacker News