कण जीवन सिम्युलेशन
- परमाणुओं जैसे कणों के बीच आकर्षण और प्रतिकर्षण के सरल नियमों का उपयोग करके आदिम कृत्रिम जीवन का सिम्युलेशन करने वाला एक सरल प्रोग्राम।
- GUI elements को छोड़कर, कोड एक पेज से भी कम है।
- वीडियो ट्यूटोरियल और मार्गदर्शन नीचे देखा जा सकता है।
और जानें (YouTube वीडियो ट्यूटोरियल)
- YouTube वीडियो ट्यूटोरियल का लिंक उपलब्ध है।
ऑनलाइन डेमो (JavaScript संस्करण)
- 2D और 3D लाइव डेमो के लिंक उपलब्ध हैं।
इंटरफ़ेस (C++ संस्करण)
उदाहरण परिणाम
पुन: उत्पन्न किए जा सकने वाले कुछ रोचक पैटर्न
- इन पैटर्नों को पुन: उत्पन्न करने के लिए parameters का बिल्कुल समान होना ज़रूरी नहीं है।
- रोचक पैटर्न पाने का सबसे अच्छा तरीका पहले random parameters की खोज करना है।
- कोई रोचक पैटर्न मिलने पर धीरे-धीरे fine-tuning करने की कोशिश करें।
- local maxima पर अटके रहने से बचने के लिए कभी-कभी parameters में बड़े jump किए जा सकते हैं।
उपयोग कैसे करें
- इस repository को डाउनलोड करके unzip करें, फिर /particle_life/bin/ फ़ोल्डर में जाएँ और particle_life.exe पर क्लिक करें।
कोड
- source code C++, JavaScript, Python में उपलब्ध है।
- YouTube वीडियो ट्यूटोरियल का लिंक उपलब्ध है।
- यदि आप C++ प्रोग्राम में योगदान देना चाहते हैं, तो core algorithm "/particle_life/src/ofApp.cpp" की पहली 100 लाइनों में है।
- बाकी हिस्सा openFrameworks लाइब्रेरी द्वारा दिए गए GUI components और rendering controls हैं।
- शुरू करने के लिए इस repository और openFrameworks लाइब्रेरी को डाउनलोड करें, फिर openFrameworks के projectGenerator का उपयोग करके /particle_life/ फ़ोल्डर को project में import करें।
- या नया openFrameworks project बनाएँ, उसमें ofxGui जोड़ें, और बने हुए project files को यहाँ दिए गए /src/ फ़ोल्डर से बदल दें।
- अब आप C++ कोड compile कर सकते हैं।
अन्य ports
- Godot, Rust, Go-1, Go-2, Go-3, Python, Lua, QB64-PE, WebGL, Java, C# Winforms, FreeBasic आदि कई भाषाओं में port किए गए versions की सूची उपलब्ध है।
JavaScript कोड उदाहरण
- JavaScript code example और optimized version particle_life.html फ़ाइल देखी जा सकती है।
संबंधित विषय
- कण जीवन सिम्युलेशन, आदिम सूप - evolution, Conway का Game of Life, cellular automata, self-organizing patterns आदि पर विवरण।
- यह प्रोजेक्ट Jeffery Ventrella के Clusters से प्रेरित है, और collision detection लागू नहीं करने के कारण यह real time में हज़ारों कणों का सिम्युलेशन कर सका।
- GUI controls जोड़कर parameters को real time में आसानी से fine-tune और explore करना संभव बनाया गया, जिससे बहुत सरल संबंध मॉडल से पहले कभी न देखे गए पैटर्न सामने आए।
- यह कोड शैक्षिक सामग्री के रूप में शुरू हुआ था, और इसका लक्ष्य non-programmers तथा आम जनता को यह दिखाना था कि complexity, simplicity से उत्पन्न हो सकती है।
करने योग्य सूची
- parameters को save और load करने की सुविधा जोड़ना (ताकि लोग रोचक मॉडल आसानी से साझा कर सकें)
- अधिक particle types जोड़ने की सुविधा (अभी यह चार particle types पर स्थिर है)
- वर्तमान में सबसे बड़ा bottleneck nested for loop है जो सभी कणों के बीच pairwise distance की गणना करता है, इसलिए computational complexity quadratic है।
- बिंदु 3 के विकल्प के रूप में, pairwise distance calculation इतनी parallelizable है कि इसे GPU पर गणना किया जा सकता है।
- स्क्रीन का आकार बदलने की सुविधा जोड़ना और boundary checks में सुधार करना (तेज़ गति वाले कई कण स्क्रीन की सीमा से बाहर जा सकते हैं)।
- parameters पर अधिक सूक्ष्म नियंत्रण देने वाला अधिक intuitive UI जोड़ना।
- random button जोड़ना, या इससे बेहतर, एक सरल meta-rule रखना जो शुरुआती rules को लगातार बदलता रहे ताकि patterns local maxima में फँसे बिना बदलते रहें।
- parameters चुनने और optimize करने के लिए evolutionary algorithm का उपयोग करना बेहतर तरीका हो सकता है, लेकिन इसके लिए fitness function लिखना होगा। फिलहाल इस प्रोग्राम के क्षेत्र में fitness function क्या होना चाहिए, यह ज्ञात नहीं है।
GN⁺ की राय
- यह प्रोजेक्ट यह दृश्य रूप से दिखाने में बहुत मूल्यवान है कि जटिल जीवन-जैसी घटनाएँ सरल नियमों से कैसे उत्पन्न हो सकती हैं।
- programming और artificial life research में रुचि रखने वाले शुरुआती software engineers के लिए यह एक रोचक परिचयात्मक सामग्री हो सकती है।
- कई भाषाओं में port किए गए versions उपलब्ध होने से, यह विभिन्न programming languages की समझ बढ़ाने में मदद कर सकता है।
1 टिप्पणियां
Hacker News की राय