1 puan yazan GN⁺ 2023-12-30 | 1 yorum | WhatsApp'ta paylaş

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

  1. Parametreleri kaydetme ve yükleme özelliği ekle (insanların ilginç modelleri kolayca paylaşabilmesi için)
  2. Daha fazla parçacık türü ekleyebilme özelliği (şu anda dört parçacık türüyle sabit)
  3. 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.
    1. maddedeki alternatife göre, ikili mesafe hesaplaması GPU üzerinde çalıştırılabilecek kadar paralelleştirilebilir.
  4. 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).
  5. Parametreler üzerinde daha ince kontrol sağlayan daha sezgisel bir UI ekle.
  6. 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.
  7. 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

 
GN⁺ 2023-12-30
Hacker News görüşleri
  • Okulda ilk programlama projesi olarak Conway'in Yaşam Oyunu'nu yapmıştım; siyah beyaz sıkıcı geldiği için RGB "genlerini" ekleyip ebeveynlerin renklerini birleştirerek mutasyon uyguladım. Tahtayı ele geçiren "fraksiyonları" izlemek eğlenceli.
  • En ilginç sonuç, bir süre sonra büyük ve kararsız kümelerle kararlı kümelerin oluşup ardından o halde durmasıydı. Ondan önce ise beklendiği gibi nesnelerin karşılaşıp birleştiğini gözlemledim.
  • Yakın zamanda benzer bir şey yaptım; bu sürüm her şeyi WebGL shader'larıyla işliyor ve simülasyon durumunu texture/uniform'larda tutuyor. Daha fazla parçacığı simüle edip çizebiliyor, ancak desteklenmeyen bazı WebGL uzantılarını kullandığı için her cihazda çalışmayabilir.
  • Bu, John Conway'in Yaşam Oyunu'nun daha karmaşık bir sürümü gibi; küçük ölçekte yaşam benzeri yapıların bu kadar kolay oluşması şaşırtıcı ve bu da sanki evrenimizin parametreleri yaşam oluşumunu zorlaştırıyormuş gibi görünüyor.
  • İlgili bağlantılar:
  • Conway'in Yaşam Oyunu'na rengarenk 'genler' katmak, sanki gökkuşağı paletiyle kod yazmak gibi; kümeler de kendi küçük dramalarını oynayıp sonra dinlenmeye çekiliyormuş gibi görünüyor. Simülasyonda ortaya çıkan hareketler ve şekiller çok etkileyici; sanki karakterler yerine biçimlerin olduğu mini bir süper kahraman filmi gibi.
  • "Altphy" adlı bir 3D deneye başladım, ancak gerçek zamanlı işleme için fazla karmaşık olduğu için amaçladığım gibi çalışmıyor. Koddaki bazı parçalar ya da fikirler bir gün gelişebilir diye paylaşıyorum.
  • Godot 4'te compute shader kullanarak buna benzer bir şey denedim. İlgileniyorsanız bakmanızı öneririm.
  • 3D JS sürümüne bakıyorum; bu, belki de orijinal Conway'in Yaşam Oyunu'ndan ya da 90'lardaki Primordial Life ekran koruyucusundan beri en sevdiğim şey olabilir. Shader desteği eklemeyi düşünmenizi öneririm. Yavaş ve "daha blob benzeri" sürümün tam ekranda çalıştığını görmek isterdim. Muhtemelen Mac'i sobaya çevirebilir ama şu an o da bonus.
  • Çok hoş bir iş, ama bunu duvara asılı TV'de çalıştıramamak üzücü. "Particle Life"ı fizikçilere yönelik bir tişört markası sandım; tişörtlerde "Seni dinledikten sonra, kuantum alanındaki talihsiz bir titreşimden ibaret olduğuna karar verdim; dolayısıyla söylediğin her şeyi görmezden gelmem tamamen meşru" gibi sloganlar olmasını bekliyordum.