- Particle Life Simulation परमाणु जैसे particles के बीच सरल attraction–repulsion नियमों से जटिल self-organization patterns बनाने वाला एक primitive artificial life simulation है
- GUI को छोड़कर code एक page से भी कम है, और C++ implementation का core algorithm
/particle_life/src/ofApp.cppकी शुरुआती 100 lines में है - JavaScript demo 2D और 3D versions में उपलब्ध हैं, और README में 500x500 canvas पर पीले, लाल और हरे particles के 200-200 particles बनाकर color groups के बीच force rules लागू करने का example शामिल है
- दिलचस्प patterns खोजने के लिए exact parameters की बजाय random exploration और gradual fine-tuning की सलाह दी जाती है; कभी-कभी बड़े parameter changes देकर local maxima में फंसने से बचा जा सकता है
- मौजूदा सीमा यह है कि सभी particle pairs की distance calculate करने वाले nested loops के कारण computational complexity quadratic time हो जाती है; GPU parallel computation, parameter saving, particle type expansion, और अधिक intuitive UI जैसे काम अभी बाकी हैं
Particle Life Simulation का उद्देश्य
- Particle Life Simulation एक program है जो परमाणु जैसे particles के बीच सरल attraction या repulsion rules लागू करके primitive artificial life patterns simulate करता है
- इसका focus यह दिखाना है कि केवल सरल नियमों से भी जटिल self-organization और life-like patterns उभर सकते हैं
- GUI elements को छोड़ दें तो code एक page से भी कम है
- tutorial और walkthrough YouTube video के रूप में उपलब्ध हैं
Demo और चलाने का तरीका
- JavaScript online demo 2D और 3D में उपलब्ध हैं
- C++ version के लिए repository download करके unzip करें और
/particle_life/bin/folder मेंparticle_life.exeचलाएं - README में C++ version interface image और example result images शामिल हैं
Pattern exploration का तरीका
- दिलचस्प patterns reproduce करते समय parameters को बिल्कुल exact match करना जरूरी नहीं है
- सबसे अच्छा तरीका है पहले random parameter exploration आज़माना, फिर कोई दिलचस्प pattern मिलने पर उसे धीरे-धीरे fine-tune करना
- local maxima में फंसने से बचने के लिए कभी-कभी बड़ा parameter jump दिया जा सकता है
- इस तरीके से अलग-अलग और दिलचस्प patterns लगातार सामने आ सकते हैं
Code और implementation structure
- source code C++, JavaScript, और Python में उपलब्ध है
- C++ program में contribute करना हो तो core algorithm
/particle_life/src/ofApp.cppकी शुरुआती 100 lines में है- बाकी GUI components और rendering control है
- GUI और rendering openFrameworks library उपलब्ध कराती है
- C++ build method
- repository download करें
- openFrameworks download करें
- openFrameworks के
projectGeneratorसे/particle_life/folder को project में import करें - या नया openFrameworks project बनाएं,
ofxGuiadd करें, और generated project के/src/folder को repository के/src/से replace करें - इसके बाद local machine पर C++ code compile किया जा सकता है
JavaScript example कैसे काम करता है
- README का JavaScript example 500x500
canvasपर काम करता है atomकोx,y,vx,vy,colorवाले object के रूप में बनाया जाता हैcreatefunction specified count के same-color particle group बनाता है और उन्हें overallatomsarray में भी add करता हैrule(atoms1, atoms2, g)दो particle groups के बीच force calculate करता है- दो particles के बीच distance
d0 से अधिक और 80 से कम होने पर ही force apply होता है - force
(g * 1) / dसे calculate होता है gvalue color groups के बीच attraction या repulsion rule तय करती है
- दो particles के बीच distance
- example पीले, लाल और हरे particles के 200-200 particles generate करता है
updatecolor group combinations के हिसाब से rules apply करता है, फिर screen clear करके black background पर particles को फिर से draw करता हैrequestAnimationFrame(update)से animation loop चलाया जाता है- अधिक optimized version
particle_life.htmlfile में है
अन्य ports
संबंधित विषय और प्रेरणा
- संबंधित topics हैं Particle Life Simulation, Primordial Soup - Evolution, Conway's game of life, Cellular automata, Self organizing patterns
- यह project Jeffery Ventrella के Clusters से inspired है
- Ventrella के code तक access नहीं मिल सका
- मुख्य अंतर अनुमानतः collision detection implement न करना है
- माना जाता है कि collision detection हटाने से हजारों particles को real time में simulate करना संभव हुआ
- GUI controls add करके parameters को real time में बदला जा सकता है
- इससे fine-tuning और exploration आसान हो जाता है
- बहुत सरल relationship model से पहले न देखे गए patterns सामने आ सकते थे
- code की शुरुआत non-programmers और general public के लिए educational material के रूप में हुई थी
- उद्देश्य यह दिखाना है कि complexity simplicity से निकल सकती है
- artificial life code में भी यह single-digit scale पर और सरल हो सकता है, ऐसा माना गया
बाकी काम
- parameter save और load करने की functionality add करना, ताकि users दिलचस्प models आसानी से share कर सकें
- अभी 4 पर fixed particle types को और जोड़ने योग्य बनाना
- सभी particle pairs की distance calculate करने वाला nested loop सबसे बड़ा bottleneck है
- computational complexity quadratic time हो जाती है
- इसे bypass करने का तरीका चाहिए
- particle-pair distance calculation parallelize करना आसान है, इसलिए इसे GPU पर calculate किया जा सकता है
- screen resize functionality और boundary checks में सुधार चाहिए
- तेजी से moving कई particles screen boundary से बाहर जा सकते हैं
- अधिक intuitive UI add करना, ताकि parameters को ज्यादा granular तरीके से control किया जा सके
- randomize button या initial rules को recursive तरीके से बदलते रहने वाला simple meta-rule add किया जा सकता है
- उद्देश्य यह है कि pattern local maxima में फंसे नहीं और लगातार बदलता रहे
- parameters select और optimize करने के बेहतर तरीके के रूप में evolutionary algorithm का उपयोग किया जा सकता है
- इसके लिए fitness function लिखना होगा
- इस program के domain में fitness function क्या होगा, यह अभी पता नहीं है
- real world में fitness function competition और survival of the fittest है
- यहां user दिलचस्प patterns बनाने वाले parameters को fine-tune और select करता है, लेकिन “interestingness” को define करना कठिन है
1 टिप्पणियां
Hacker News की राय
यह देखना काफी मज़ेदार होता है कि कौन सा “faction” board पर कब्ज़ा करता है
Demo: https://genetic-life.surge.sh/
Source: मूल रूप से C++ में था, जिसे Rust/WASM में port किया गया https://github.com/franky47/genetic-life
आखिर में यह एक बड़े, unstable cluster और एक stable cluster में settle हो जाता है, और दोनों हिलते नहीं, इसलिए वहीं खत्म हो जाता है
लेकिन उससे पहले यह वही दृश्य दिखाता है जिसकी उम्मीद थी—objects का मिलना और merge होना
यह सच में मज़ेदार है। इसमें काफी movement है और forms भी अच्छे हैं
हैरानी की बात है कि ऐसे parameters में बहुत छोटे scale पर भी छोटी life जैसी चीज़ें आसानी से बन जाती हैं
कुछ लोग सोचते हैं कि वास्तविक universe के parameters life पैदा होने को आसान बनाने के लिए tuned हैं, लेकिन मुझे तो उल्टा लगता है कि वे life formation को मुश्किल बनाने के लिए tuned हैं
भ्रम पैदा करने वाली चीज़ movement है। इस system में conservation laws built-in नहीं हैं, इसलिए movement बना रहता है। अगर A-B pair बनाया जाए जिसमें B, A की ओर attract होता है और A, B को repel करता है, तो वह सीधे उड़ जाता है
अगर rules में energy या momentum conservation जैसे conservation laws शामिल करने के लिए design किया गया होता, तो बहुत कम दिलचस्प और Conway Game of Life में pentomino explosion के late-stage जैसा structure निकलता
अगर पर्याप्त बड़ा processor हो, तो मैं इसे 3D में देखना चाहूँगा, और ऐसे options भी जोड़ना चाहूँगा जहाँ force r के inverse, r के cube inverse, या r * log(r) के हिसाब से घटे, या ऐसे particles हों जो “दूर से repel करते हैं और बहुत पास से attract करते हैं।” smart optimization के बाद भी लगता है कि ऐसा system ठप पड़ जाएगा
Source: https://github.com/ath92/particle-life
यह version सारा काम WebGL shaders में handle करता है, और simulation state को textures और uniforms में रखता है
इससे ज्यादा particles simulate और draw किए जा सकते हैं, लेकिन यह कम supported WebGL extensions इस्तेमाल करता है, इसलिए सभी devices पर run नहीं हो सकता
Particle Life Emerges from Simplicity - https://news.ycombinator.com/item?id=34156592 - दिसंबर 2022, 1 comment
Particle Life Simulation - https://news.ycombinator.com/item?id=33680845 - नवंबर 2022, 1 comment
Particle Life - https://news.ycombinator.com/item?id=21875720 - दिसंबर 2019, 7 comments
अगर दिलचस्पी हो तो यहाँ है: https://github.com/jasonjmcghee/compute-shaders
यानी CGoL में rules grid के across move करने वाले objects पर नहीं, बल्कि grid की positions पर apply होते हैं। सोच रहा हूँ कि क्या इस system को भी wave-based तरीके से बनाया जा सकता है
साथ ही इस system में हर frame पर सभी particles दूरी की परवाह किए बिना एक-दूसरे पर act करते हैं, इसलिए speed of light infinite जैसी लगती है। दूसरी ओर CGoL में हर cell हर frame में सिर्फ अपने immediate neighbors को influence कर सकता है, इसलिए उसमें एक तरह की speed of light है
सोच रहा हूँ कि क्या shader support जोड़ने का कोई plan था। मैं इसका और धीमा, ज्यादा “clumpy” feel वाला version full screen में देखना चाहूँगा
शायद यह मेरे Mac को heater बना देगा, लेकिन फिलहाल तो वह feature ही है ;)
https://www.youtube.com/watch?v=BpN-DE3o6u8
https://bingdev.binghamton.edu/sayama/SwarmChemistry/
खासकर Lenia में कुछ ज्यादा complex variants हैं, और इस topic से जुड़कर “Flow Lenia” या “Particle Lenia” याद आते हैं