1 पॉइंट द्वारा GN⁺ 2024-04-29 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • यह एक HTML5 simulation है जिसमें browser में देखा जा सकता है कि randomly generate किए गए दो-पहिया आकार पीढ़ियों के साथ ज्यादा दूर चलने वाली कारों के रूप में कैसे चुने और mutate होते हैं
  • यह BoxCar2D के idea को ढीले तौर पर follow करता है, लेकिन code नया लिखा गया है और physics calculations के लिए box2d का उपयोग करता है
  • mutation rate, mutation size, floor conditions, gravity, और elite clones की संख्या adjust करके evolution conditions बदली जा सकती हैं
  • same seed से same track बनाया जा सकता है, इसलिए results compare करना आसान है, लेकिन simulation खुद पूरी तरह deterministic नहीं है
  • genome में chassis और wheels का shape, position, और density शामिल होती है; जितना आगे जाते हैं, terrain ज्यादा complex होता जाता है, इसलिए सिर्फ best record से stability guarantee करना मुश्किल है

कारें कैसे evolve होती हैं

  • यह program random two-wheel shapes को पीढ़ी-दर-पीढ़ी evolve कर, कार की तरह दौड़ने वाले individuals बनाने वाला एक सरल genetic algorithm simulation है
  • BoxCar2D से loosely inspired है, लेकिन code scratch से लिखा गया है
  • physics engine के लिए box2d का उपयोग करता है
  • seedrandom.js David Bau ने लिखा है

Controls और evolution settings

  • save और restore functions से experiment state को आगे जारी रखा जा सकता है
    • Save Population current population को local में save करता है
    • Restore Saved Population पहले save की गई population को restore करता है
  • simulation चलने का तरीका भी सीधे बदला जा सकता है
    • Suprise drawing को toggle करके simulation को faster बनाता है
    • New Population generated track को बनाए रखते हुए पूरी car population को restart करता है
    • View top replay current simulation को pause करके best-performing car दिखाता है, और दोबारा click करने पर simulation resume करता है
  • Create new world with seed में same seed हमेशा same track बनाता है, इसलिए आप दूसरों के साथ same seed पर compete कर सकते हैं
  • evolution parameters तय करते हैं कि नई generation कितनी ज्यादा बदलेगी
    • Mutation rate वह probability है कि नई generation पैदा होते समय हर individual का हर gene random value में mutate हो
    • Mutation size वह range है जिसमें हर gene mutate हो सकता है; value कम होने पर नए values original value के ज्यादा करीब रहते हैं
    • Elite clones top n cars की संख्या तय करता है जिन्हें next generation में वैसे ही copy किया जाएगा

Graph में performance changes देखना

  • graph के colors generation-wise performance को अलग-अलग criteria से दिखाते हैं
    • लाल हर generation का highest score दिखाता है
    • हरा हर generation की top 10 cars का average दिखाता है
    • नीला पूरी generation का average दिखाता है

Genome से व्यक्त car structure

  • कार का genome chassis और wheels बनाने वाले कई genes में बंटा होता है
    • Shape: हर vertex के लिए 1, कुल 8 genes
    • Wheel size: हर wheel के लिए 1, कुल 2 genes
    • Wheel position: हर wheel के लिए 1, कुल 2 genes
    • Wheel density: हर wheel के लिए 1, कुल 2 genes; ज्यादा dark wheel का मतलब higher density है
    • Chassis density: 1 gene; ज्यादा dark chassis का मतलब higher density है

Limitations और code release

  • simulation उम्मीद जितना deterministic नहीं है, इसलिए best car पहले जैसी performance न दे सकती है
  • terrain distance बढ़ने के साथ ज्यादा complex होता जाता है
  • script loading check अलग से handle नहीं किया गया है, इसलिए behavior अजीब लगे तो page refresh करना चाहिए
  • code GitHub repository पर public है और contributions लिए जा सकते हैं
  • इसे originally rednuht.org पर लिखा गया था, और बाद में GitHub contributors ने participate किया

1 टिप्पणियां

 
GN⁺ 2024-04-29
Hacker News टिप्पणियाँ
  • मैंने इसे पहली बार लगभग 20 साल पहले बनाया था, और यह देखकर अब भी अच्छा लगता है कि यह कभी-कभी यहाँ फिर से आ जाता है
    Ruffle की वजह से यह अब भी ब्राउज़र में चलता है:
    https://peteshadbolt.co.uk/posts/ga/

    • उस समय मैं Adobe Flash Player टीम में काम करता था, और याद है कि हमने इस Flash movie को test case की तरह इस्तेमाल किया था :)
    • क्या आपके पास कुछ दिनों तक चलाने के बाद के नतीजों के उदाहरण हैं? या फिर 20 साल के दौरान के भी? ;-)
    • Firefox में "Save Local Population" विकल्प दबाने पर crash होता लगता है। कोई अंदाज़ा है कि ऐसा क्यों हो सकता है?
      साइट वाकई शानदार है। यह हर बार ऊपर आती है तो मैं इसे बहुत देर तक देखता रह जाता हूँ
    • अगर collision detection सिर्फ load पर रखने के बजाय structure या spring पर भी जोड़ दिया जाए, तो क्या नतीजे होंगे?
    • इंटरनेट पर समय छीन लेने वाली चीज़ों में भी यह मूल संस्करण सबसे यादगार चीज़ों में से एक है
      मैं और मेरा दोस्त इसे lunch break के दौरान चलाकर छोड़ देते थे और लौटकर देखते थे कि कौन जीता
  • लगता है कि हमेशा कोई एक design किस्मत से सफल हो जाता है, फिर हर generation पर हावी हो जाता है, और उसके बाद की mutations ऐसे dead end में फँस जाती हैं जो ठीक से काम करने के स्तर के आसपास भी नहीं पहुँचतीं
    सैकड़ों generations के बाद भी top 10 नहीं बदलते। शायद यह genetic algorithm की प्रकृति ही हो। हो सकता है यह पहले काफी अच्छा solution जल्दी ढूँढ लेता हो और फिर local maximum में फँस जाता हो, या फिर mutation probability और mutation size की settings को और tweak करने की ज़रूरत हो

    • आम तौर पर mutation probability बहुत कम रखना बेहतर होता है ताकि population समय के साथ धीरे-धीरे बदले
      high mutation probability local optimum तक जल्दी पहुँचा देती है लेकिन उससे निकलना मुश्किल कर देती है, जबकि low mutation probability में बहुत ज़्यादा generations लगती हैं, पर आम तौर पर उससे बेहतर adaptation मिलती है
    • यह तो ऐसा लगता है जैसे इसे सिर्फ एक elite cloned individual के साथ चलाया जा रहा हो
      genetic heuristics में ठीक इसी वजह से यह बहुत खराब तरीका माना जाता है
    • सिर्फ shape नहीं, और भी कई चीज़ें बदलनी चाहिए। ज़्यादा ताकत वाला लेकिन धीमा vehicle शायद गड्ढों में कम फँसे
      लेकिन अभी power और speed बदलते नहीं दिखते, और कुछ generations के बाद सिर्फ shape में बहुत हल्का बदलाव दिखता है। नीचे स्क्रॉल किया तो genome का विवरण मिला: shape के 8 genes, wheel size के 2, wheel position के 2, wheel density के 2, और body density का 1 gene। आखिरकार यह दो wheels और मध्यम body shape पर converge करता दिखता है, और उसके बाद कोई खास प्रगति नहीं दिखती। अगर power और speed को भी mutation factors में शामिल किया जाए तो दिलचस्प होगा
  • मज़ेदार है। बस speed control बहुत intuitive नहीं है। "Surprise" दबाने पर यह तेज़ हो जाता है, इसलिए कई iterations जल्दी देखे जा सकते हैं
    mutation probability, यानी g के बदलने की संभावना, और mutation size Δg ऐसे hyperparameters हैं जिनसे population का समय के साथ evolve होना देखते हुए खेलना अच्छा लगता है। अगर "compliance" gene हो ताकि कार में किसी तरह का suspension बन सके, तो वह दिलचस्प होगा। मैंने जो ज़्यादातर runs किए, उनमें यह लगभग Tron bike जैसी शक्ल में evolve हुआ

    • बहुत high mutation probability के साथ इसे लंबे समय तक background में चलाया, तो कुछ काफी अलग shapes भी मिलीं
      बड़े wheel के साथ छोटा wheel वाला shape, जो उछलते हुए हर obstacle पार कर जाता है
  • पुरानी चर्चाएँ यहाँ हैं:
    https://news.ycombinator.com/item?id=5942757 (664 points | Jun 2013 | 169 comments)
    https://news.ycombinator.com/item?id=10600486 (162 points | Nov 2015 | 57 comments)

  • यह तो Flash के बिना boxcar2d है
    https://news.ycombinator.com/item?id=2196747

    • और अजीब बात यह है कि suspension parameters पूरी तरह गायब लगते हैं
      physics simulation साफ़ तौर पर inelastic collisions का इस्तेमाल करती दिखती है, जो काफी अवास्तविक है, और इसी वजह से बहुत सी कारें जो देखने में ठीक लगती हैं, course पूरा नहीं कर पातीं। friction coefficient भी बहुत कम लगता है। मैंने जो ज़्यादातर कारें बनाईं, वे दो-segment वाली चढ़ाई भी नहीं चढ़ पाईं
    • पता चला कि boxcar2d Ruffle में पूरी तरह काम करता है, और Internet Archive अपने-आप Ruffle लोड कर देता है :)
      https://web.archive.org/web/20240428203838/http://boxcar2d.c...
    • मुझे लगा था कि मैंने यह 10 साल से भी पहले देखा है, और सच में देखा था
  • एक छोटा bug है। लगभग 280m के बाद सड़क ही नहीं है, इसलिए सारी कारें एक अंतहीन गड्ढे में गिर जाती हैं

  • इसमें लिखा है, “कई generations में random two-wheeled forms को car में evolve किया जाता है,” लेकिन जहाँ मैं रहता हूँ वहाँ दो-पहिया कार को motorcycle कहते हैं
    फिर भी simulation बहुत शानदार है!

    • इस simulation में, जिसमें ये कारें चल रही हैं, ऐसा तीसरा dimension ही नहीं है जिसमें vehicle पलट सके, और न ही wheels की एक और जोड़ी के लिए जगह है
      इसलिए पारंपरिक चार-पहिया कार की तरह यह 0 speed पर भी नहीं गिरता। सिर्फ इसी गुण के आधार पर भी मुझे लगता है कि इसका व्यवहार motorcycle की तुलना में चार-पहिया car के ज़्यादा करीब है
  • यह बहुत visual और मज़ेदार visualization है, इसलिए मुझे पसंद आया
    इसे देखकर मैंने "Self-parking car evolution" में genetic algorithm के साथ प्रयोग करना शुरू किया:
    https://trekhleb.dev/self-parking-car-evolution/

  • इससे मुझे Cell Lab नाम का एक शानदार Android app याद आता है। उसमें आप petri dish में रहने वाले multicellular या unicellular जीव बना सकते थे
    और चाहें तो radiation level बढ़ाकर mutation और evolution भी होने दे सकते थे

  • अगर आपको ऐसी चीज़ें पसंद हैं, तो https://old.reddit.com/r/WatchMachinesLearn/ पर आइए

    • विषय तो शानदार है, लेकिन subreddit ज़्यादा सक्रिय नहीं लगता। आख़िरी पोस्ट 3 साल पहले की है :-/