1 คะแนน โดย GN⁺ 2023-12-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การจำลองชีวิตของอนุภาค

  • โปรแกรมอย่างง่ายที่จำลองชีวิตประดิษฐ์แบบปฐมภูมิโดยใช้กฎแรงดึงดูดและแรงผลักอย่างง่ายระหว่างอนุภาคคล้ายอะตอม
  • เมื่อไม่นับองค์ประกอบ 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 ทำให้สามารถปรับละเอียดและสำรวจพารามิเตอร์แบบเรียลไทม์ได้ง่ายขึ้น ส่งผลให้เกิดรูปแบบที่ไม่เคยเห็นมาก่อนจากโมเดลความสัมพันธ์ที่เรียบง่ายมาก
  • โค้ดนี้เริ่มต้นจากการเป็นสื่อการสอน และมุ่งไปที่ผู้ที่ไม่ใช่โปรแกรมเมอร์และสาธารณชนทั่วไป เพื่อพิสูจน์ว่าความซับซ้อนสามารถเกิดขึ้นจากความเรียบง่ายได้

รายการสิ่งที่ต้องทำ

  1. เพิ่มฟังก์ชันสำหรับบันทึกและโหลดพารามิเตอร์ (เพื่อให้ผู้คนแชร์โมเดลที่น่าสนใจได้ง่าย)
  2. เพิ่มความสามารถในการรองรับชนิดของอนุภาคมากขึ้น (ปัจจุบันล็อกไว้ที่อนุภาค 4 ชนิด)
  3. คอขวดที่ใหญ่ที่สุดในตอนนี้คือลูป for แบบซ้อนสำหรับคำนวณระยะทางแบบจับคู่ระหว่างอนุภาคทั้งหมด ซึ่งมีความซับซ้อนในการคำนวณแบบกำลังสอง
  4. อีกทางเลือกสำหรับข้อ 3 คือ การคำนวณระยะทางแบบจับคู่สามารถทำแบบขนานได้มากพอที่จะย้ายไปคำนวณบน GPU
  5. เพิ่มความสามารถในการปรับขนาดหน้าจอและปรับปรุงการตรวจสอบขอบเขต (อนุภาคจำนวนมากที่เคลื่อนที่เร็วอาจหลุดออกนอกขอบหน้าจอได้)
  6. เพิ่ม UI ที่ใช้งานเข้าใจง่ายขึ้น เพื่อให้ควบคุมพารามิเตอร์ได้ละเอียดมากขึ้น
  7. เพิ่มปุ่มสุ่ม หรือแนวทางที่ดีกว่าคือมีกฎเมตาอย่างง่ายที่เปลี่ยนกฎตั้งต้นอย่างต่อเนื่อง เพื่อให้รูปแบบไม่ค้างอยู่ที่ค่าสูงสุดเฉพาะจุดแต่เปลี่ยนแปลงต่อไปเรื่อย ๆ
  8. วิธีที่ดีกว่าอาจเป็นการใช้อัลกอริทึมวิวัฒนาการเพื่อเลือกและปรับพารามิเตอร์ให้เหมาะสม แต่สำหรับสิ่งนั้นจำเป็นต้องเขียนฟังก์ชันความเหมาะสมขึ้นมา ซึ่งตอนนี้ยังไม่ทราบว่าฟังก์ชันความเหมาะสมในขอบเขตของโปรแกรมนี้ควรเป็นอะไร

ความเห็นของ GN⁺

  • โปรเจกต์นี้มีคุณค่าอย่างมากในการแสดงให้เห็นเชิงภาพว่า ปรากฏการณ์ชีวิตที่ซับซ้อนสามารถเกิดขึ้นได้อย่างไรจากกฎที่เรียบง่าย
  • อาจเป็นสื่อเริ่มต้นที่น่าสนใจสำหรับวิศวกรซอฟต์แวร์ระดับเริ่มต้นที่สนใจการเขียนโปรแกรมและการวิจัยชีวิตประดิษฐ์
  • เนื่องจากมีเวอร์ชันที่พอร์ตไปยังหลายภาษา จึงอาจช่วยขยายความเข้าใจเกี่ยวกับภาษาการเขียนโปรแกรมที่หลากหลายได้

1 ความคิดเห็น

 
GN⁺ 2023-12-30
ความคิดเห็นใน Hacker News
  • โปรเจ็กต์เขียนโค้ดแรกที่ทำในโรงเรียนคือ Conway's Game of Life แต่ภาพขาวดำมันน่าเบื่อ เลยใส่ "ยีน" แบบ RGB เข้าไป แล้วผสมสีของพ่อแม่พร้อมเพิ่มการกลายพันธุ์ สนุกดีที่ได้ดู "ฝ่าย" ต่าง ๆ เข้ายึดครองกระดาน
  • ผลลัพธ์ที่น่าสนใจที่สุดคือ หลังจากผ่านไประยะหนึ่งจะเกิดทั้งก้อนขนาดใหญ่ที่ไม่เสถียรและก้อนที่เสถียร แล้วก็ค้างอยู่ในสภาพนั้น ก่อนหน้านั้นก็เห็นปรากฏการณ์ที่วัตถุเคลื่อนมาพบกันและรวมตัวกันตามที่คาดไว้
  • ไม่นานมานี้ผมก็ทำอะไรคล้าย ๆ กัน เวอร์ชันนี้ประมวลผลทุกอย่างด้วย WebGL shader และเก็บสถานะของการจำลองไว้ใน texture/uniform มันจำลองและวาดอนุภาคได้มากขึ้น แต่เพราะใช้ WebGL extension บางอย่างที่ยังไม่รองรับ จึงอาจรันไม่ได้บนทุกอุปกรณ์
  • นี่เหมือนเป็นเวอร์ชันที่ซับซ้อนกว่า Game of Life ของ John Conway และน่าทึ่งที่ในสเกลเล็ก ๆ รูปแบบคล้ายสิ่งมีชีวิตก่อตัวขึ้นได้ง่าย ขณะที่พารามิเตอร์ของจักรวาลเรากลับดูเหมือนทำให้การก่อกำเนิดชีวิตเป็นเรื่องยาก
  • ลิงก์ที่เกี่ยวข้อง:
  • การผสม 'ยีน' สีสันสดใสเข้าไปใน Conway's Game of Life ให้ความรู้สึกเหมือนกำลังเขียนโค้ดด้วยพาเลตต์สีรุ้ง และก้อนต่าง ๆ ก็ดูเหมือนเล่นดราม่าเล็ก ๆ ของตัวเองก่อนจะพักเฉย ๆ ในการจำลองนี้มีทั้งการเคลื่อนไหวและรูปร่างที่เท่มาก ราวกับเป็นหนังซูเปอร์ฮีโร่จิ๋วที่มีรูปร่างแทนตัวละคร
  • เริ่มทำการทดลอง 3D ชื่อ "Altphy" แต่ซับซ้อนเกินไปสำหรับการประมวลผลแบบเรียลไทม์ เลยยังไม่ทำงานตามที่ตั้งใจไว้ จึงนำมาแชร์ไว้เผื่อว่าโค้ดบางส่วนหรือไอเดียอาจต่อยอดได้ในอนาคต
  • เคยลองทำอะไรคล้ายกันใน Godot 4 โดยใช้ compute shader ถ้าสนใจก็แนะนำให้ลองดู
  • กำลังดูเวอร์ชัน 3D JS อยู่ และนี่อาจเป็นสิ่งที่ชอบที่สุดตั้งแต่ Conway's Game of Life ต้นฉบับหรือ Primordial Life screensaver จากยุค 90 เลยก็ได้ ขอเสนอให้ลองพิจารณาเพิ่มการรองรับ shader ดู อยากเห็นเวอร์ชันที่ช้ากว่าและ "เป็นก้อนมากกว่า" แบบเต็มจอ คงทำให้ Mac กลายเป็นเตาผิงได้เหมือนกัน แต่ตอนนี้นั่นก็นับเป็นโบนัส
  • งานนี้เจ๋งมาก แต่ก็น่าเสียดายที่เอาไปรันบนทีวีที่แขวนผนังไม่ได้ ตอนแรกนึกว่า "Particle Life" เป็นแบรนด์เสื้อยืดสำหรับนักฟิสิกส์ โดยคิดว่าเสื้อยืดคงมีสโลแกนประมาณว่า "พอได้ฟังคุณพูดแล้ว ผมรู้สึกว่าคุณก็เป็นแค่การสั่นสะเทือนที่ซวยใน quantum field เท่านั้น ดังนั้นผมจึงรู้สึกว่าการเมินทุกอย่างที่คุณพูดเป็นเรื่องสมเหตุสมผล"