Parçacık yaşam simülasyonu
- Atomlara benzer parçacıklar arasındaki basit çekim ve itim kurallarını kullanarak ilkel yapay yaşamı simüle eden basit bir program.
- GUI öğeleri hariç, kod bir sayfadan daha kısa.
- Video eğitimi ve kılavuzu aşağıda bulabilirsiniz.
Daha fazlasını öğrenin (YouTube video eğitimi)
- YouTube video eğitimi bağlantısı sunuluyor.
Çevrimiçi demo (JavaScript sürümü)
- 2D ve 3D canlı demo bağlantıları sunuluyor.
Arayüz (C++ sürümü)
Örnek sonuçlar
Yeniden üretilebilen bazı ilginç desenler
- Bu desenleri yeniden üretmek için parametreleri birebir eşleştirmeniz gerekmez.
- İlginç desenler elde etmenin en iyi yolu önce rastgele parametre keşfini denemektir.
- İlginç bir desen bulursanız, kademeli olarak ince ayar yapmayı deneyin.
- Yerel maksimumlarda kalmamak için ara sıra parametrelerde büyük sıçramalar yapabilirsiniz.
Kullanım
- Bu depoyu indirip arşivden çıkarın, /particle_life/bin/ klasörüne gidin ve ardından particle_life.exe dosyasına tıklayın.
Kod
- Kaynak kodu C++, JavaScript ve Python olarak sunuluyor.
- YouTube video eğitimi bağlantısı sunuluyor.
- C++ programına katkıda bulunmak istiyorsanız, temel algoritma "/particle_life/src/ofApp.cpp" dosyasının ilk 100 satırında yer alıyor.
- Geri kalanı, openFrameworks kütüphanesi tarafından sağlanan GUI bileşenleri ve render kontrolleridir.
- Başlamak için bu depoyu ve openFrameworks kütüphanesini indirin, ardından openFrameworks'ün projectGenerator aracını kullanarak /particle_life/ klasörünü projeye aktarın.
- Alternatif olarak yeni bir openFrameworks projesi oluşturup ofxGui ekleyin, ardından oluşturulan proje dosyalarını burada sunulan /src/ klasörüyle değiştirin.
- Artık C++ kodunu derleyebilirsiniz.
Diğer portlar
- Godot, Rust, Go-1, Go-2, Go-3, Python, Lua, QB64-PE, WebGL, Java, C# Winforms, FreeBasic ve daha birçok dilde taşınmış sürümlerin listesi sunuluyor.
JavaScript kod örneği
- JavaScript kod örneğini ve optimize edilmiş sürüm olan particle_life.html dosyasını inceleyebilirsiniz.
İlgili konular
- Parçacık yaşam simülasyonu, ilkel çorba - evrim, Conway'in Yaşam Oyunu, hücresel otomatlar, kendi kendini organize eden desenler ve benzeri konular hakkında açıklamalar.
- Bu proje, Jeffery Ventrella'nın Clusters çalışmasından ilham aldı ve çarpışma algılaması uygulanmadığı için gerçek zamanlı olarak binlerce parçacığın simüle edilmesini mümkün kıldı.
- GUI kontrolleri eklenerek parametrelerin gerçek zamanlı olarak kolayca ince ayarlanıp keşfedilmesi sağlandı; böylece çok basit bir ilişki modelinden daha önce görülmemiş desenler ortaya çıktı.
- Bu kod eğitim materyali olarak başladı ve karmaşıklığın basitlikten doğabileceğini göstermek için programcı olmayanlara ve genel kamuya yönelik hazırlandı.
Yapılacaklar listesi
- Parametreleri kaydetme ve yükleme özelliği ekle (insanların ilginç modelleri kolayca paylaşabilmesi için)
- Daha fazla parçacık türü ekleyebilme özelliği (şu anda dört parçacık türüyle sabit)
- Mevcut en büyük darboğaz, tüm parçacıklar arasındaki ikili mesafeleri hesaplayan iç içe geçmiş for döngüsü; hesaplama karmaşıklığı ikinci dereceden.
-
- maddedeki alternatife göre, ikili mesafe hesaplaması GPU üzerinde çalıştırılabilecek kadar paralelleştirilebilir.
- Ekran boyutunu ayarlama özelliği ekle ve sınır denetimini iyileştir (çok hızlı hareket eden birçok parçacık ekran sınırlarının dışına çıkabiliyor).
- Parametreler üzerinde daha ince kontrol sağlayan daha sezgisel bir UI ekle.
- Rastgele düğmesi ekle ya da daha iyi bir yöntem olarak, başlangıç kurallarını sürekli değiştiren basit bir meta kural kullanarak desenlerin yerel maksimumlarda takılı kalmak yerine sürekli değişmesini sağla.
- Parametre seçimi ve optimizasyonu için evrim algoritması kullanmak daha iyi bir yöntem olabilir, ancak bunun için bir uygunluk fonksiyonu yazmak gerekir. Şu anda bu programın alanında uygunluk fonksiyonunun ne olması gerektiği bilinmiyor.
GN⁺ görüşü
- Bu proje, karmaşık yaşam benzeri olguların basit kurallardan nasıl ortaya çıkabileceğini görsel olarak göstermede büyük değer taşıyor.
- Programlama ve yapay yaşam araştırmalarına ilgi duyan başlangıç seviyesindeki yazılım mühendisleri için ilgi çekici bir giriş materyali olabilir.
- Farklı dillere taşınmış sürümler bulunduğundan, çeşitli programlama dillerine dair anlayışı genişletmeye yardımcı olabilir.
1 yorum
Hacker News görüşleri