1 poin oleh GN⁺ 2023-12-30 | 1 komentar | Bagikan ke WhatsApp

Simulasi Kehidupan Partikel

  • Program sederhana untuk mensimulasikan kehidupan buatan primitif menggunakan aturan sederhana tarik-menarik dan tolak-menolak antar partikel seperti atom.
  • Selain elemen GUI, kodenya kurang dari satu halaman.
  • Tutorial video dan panduan dapat dilihat di bawah.

Pelajari lebih lanjut (tutorial video YouTube)

  • Tautan tutorial video YouTube tersedia.

Demo online (versi JavaScript)

  • Tautan demo langsung 2D dan 3D tersedia.

Antarmuka (versi C++)

Hasil contoh

Beberapa pola menarik yang dapat direproduksi

  • Tidak perlu mencocokkan parameter secara persis untuk mereproduksi pola-pola ini.
  • Cara terbaik untuk mendapatkan pola menarik adalah terlebih dahulu mencoba eksplorasi parameter secara acak.
  • Jika menemukan pola yang menarik, cobalah menyempurnakannya secara bertahap.
  • Sesekali Anda dapat melakukan lompatan parameter yang besar agar tidak terjebak pada maksimum lokal.

Cara penggunaan

  • Unduh repositori ini, ekstrak, pindah ke folder /particle_life/bin/, lalu klik particle_life.exe.

Kode

  • Kode sumber tersedia dalam C++, JavaScript, dan Python.
  • Tautan tutorial video YouTube tersedia.
  • Jika Anda ingin berkontribusi pada program C++, algoritme intinya ada di 100 baris pertama "/particle_life/src/ofApp.cpp".
  • Sisanya adalah komponen GUI dan kontrol rendering yang disediakan oleh pustaka openFrameworks.
  • Untuk memulai, unduh repositori ini dan pustaka openFrameworks, lalu gunakan projectGenerator milik openFrameworks untuk mengimpor folder /particle_life/ ke dalam proyek.
  • Atau, buat proyek openFrameworks baru dan tambahkan ofxGui, lalu ganti file proyek yang dihasilkan dengan folder /src/ yang disediakan di sini.
  • Sekarang Anda dapat mengompilasi kode C++.

Port lain

  • Tersedia daftar versi yang diporting ke berbagai bahasa seperti Godot, Rust, Go-1, Go-2, Go-3, Python, Lua, QB64-PE, WebGL, Java, C# Winforms, FreeBasic, dan lainnya.

Contoh kode JavaScript

  • Anda dapat melihat contoh kode JavaScript dan file particle_life.html yang merupakan versi yang dioptimalkan.

Topik terkait

  • Penjelasan tentang simulasi kehidupan partikel, primordial soup - evolusi, Conway's Game of Life, cellular automata, pola swaterorganisasi, dan lainnya.
  • Proyek ini terinspirasi oleh Clusters karya Jeffery Ventrella, dan karena tidak menerapkan deteksi tabrakan, proyek ini dapat mensimulasikan ribuan partikel secara real-time.
  • Dengan menambahkan kontrol GUI sehingga parameter dapat dengan mudah disesuaikan dan dieksplorasi secara real-time, pola-pola yang belum pernah terlihat muncul dari model relasi yang sangat sederhana.
  • Kode ini dimulai sebagai materi pendidikan, dan ditujukan untuk non-programmer serta masyarakat umum untuk menunjukkan bahwa kompleksitas dapat muncul dari kesederhanaan.

Daftar tugas

  1. Menambahkan kemampuan untuk menyimpan dan memuat parameter (agar orang dapat dengan mudah membagikan model yang menarik)
  2. Kemampuan untuk menambahkan lebih banyak jenis partikel (saat ini tetap pada empat jenis partikel)
  3. Bottleneck terbesar saat ini adalah nested for loop yang menghitung jarak berpasangan antara semua partikel, sehingga kompleksitas komputasinya bersifat kuadratik.
  4. Sebagai alternatif untuk poin 3, perhitungan jarak berpasangan cukup mudah diparalelkan sehingga dapat dihitung di GPU.
  5. Menambahkan kemampuan untuk mengubah ukuran layar dan memperbaiki pemeriksaan batas (partikel dengan banyak gerakan cepat dapat keluar dari batas layar).
  6. Menambahkan UI yang lebih intuitif yang memungkinkan kontrol parameter yang lebih rinci.
  7. Menambahkan tombol acak atau, yang lebih baik, memiliki meta-rule sederhana yang terus mengubah aturan awal agar pola terus berubah tanpa terjebak pada maksimum lokal.
  8. Metode yang lebih baik mungkin adalah menggunakan algoritme evolusi untuk memilih dan mengoptimalkan parameter, tetapi untuk itu perlu menulis fungsi fitness. Saat ini belum diketahui apa fungsi fitness yang tepat dalam ranah program ini.

Opini GN⁺

  • Proyek ini sangat bernilai untuk menunjukkan secara visual bagaimana fenomena kehidupan yang kompleks dapat muncul dari aturan yang sederhana.
  • Ini bisa menjadi materi pengantar yang menarik bagi software engineer pemula yang tertarik pada pemrograman dan riset kehidupan buatan.
  • Karena ada versi yang diporting ke berbagai bahasa, ini juga dapat membantu memperluas pemahaman tentang berbagai bahasa pemrograman.

1 komentar

 
GN⁺ 2023-12-30
Opini Hacker News
  • Proyek coding pertama saya di sekolah adalah Conway's Game of Life, tetapi karena hitam-putih terasa membosankan, saya menambahkan "gen" RGB dan memberi mutasi dengan menggabungkan warna dari induknya. Menyenangkan melihat "faksi" yang menguasai papan.
  • Hasil yang paling menarik adalah ketika selama beberapa waktu terbentuk gumpalan besar yang tidak stabil dan gumpalan yang stabil, lalu berhenti dalam keadaan itu. Sebelumnya, sesuai dugaan, saya mengamati objek-objek saling bertemu dan bergabung.
  • Saya baru-baru ini membuat sesuatu yang mirip, tetapi versi ini memproses semuanya dengan shader WebGL dan menyimpan status simulasi dalam texture/uniform. Ini bisa mensimulasikan dan menggambar lebih banyak partikel, tetapi mungkin tidak berjalan di semua perangkat karena menggunakan beberapa fitur ekstensi WebGL yang tidak didukung.
  • Ini adalah versi yang lebih kompleks daripada Conway's Game of Life, dan mengejutkan betapa mudahnya bentuk-bentuk mirip kehidupan terbentuk pada skala kecil; seolah parameter di alam semesta kita justru membuat pembentukan kehidupan menjadi sulit.
  • Tautan terkait:
  • Mencampurkan 'gen' berwarna-warni ke dalam Conway's Game of Life terasa seperti coding dengan palet pelangi, dan gumpalan-gumpalan itu seperti memainkan drama kecil mereka sendiri lalu beristirahat begitu saja. Di simulasi ini muncul gerakan dan bentuk yang keren, seperti film mini superhero dengan bentuk-bentuk sebagai gantinya karakter.
  • Saya sempat memulai eksperimen 3D bernama "Altphy", tetapi terlalu kompleks untuk diproses secara real-time sehingga tidak bekerja sesuai niat. Saya membagikannya karena rasanya sebagian kode atau idenya mungkin bisa berkembang suatu hari nanti.
  • Saya pernah mencoba hal serupa di Godot 4 menggunakan compute shader. Jika tertarik, saya sarankan untuk melihatnya.
  • Saya sedang melihat versi 3D JS, dan ini mungkin jadi salah satu favorit saya sejak Conway's Game of Life asli atau screen saver Primordial Life dari era 90-an. Saya sarankan mempertimbangkan penambahan dukungan shader. Saya ingin melihat versi yang lambat dan "lebih blob" dijalankan dalam layar penuh. Mungkin itu juga bisa mengubah Mac menjadi tungku, tetapi untuk saat ini itu justru bonus.
  • Karyanya sangat keren, tetapi sayang saya tidak bisa menjalankannya di TV yang dipasang di dinding. Saya sempat mengira "Particle Life" adalah merek kaus untuk para fisikawan, dan membayangkan kausnya punya slogan seperti, "Setelah mendengar Anda berbicara, saya merasa sah saja mengabaikan semua yang Anda katakan, karena Anda hanyalah getaran tidak beruntung di dalam medan kuantum."