racing-AI
Cento auto che non vedono il tracciato, lasciate evolvere finché non imparano a guidarlo.

La storia
Ho visto un video sull'evoluzione di controller tramite riproduzione e mutazione, e ho voluto verificare di persona se una cosa così semplice funzionasse davvero. Funziona. Cento auto partono con dei numeri a caso in testa e vanno dritte contro un muro. Le poche che arrivano più lontano vengono copiate, mescolate e mutate leggermente, e i loro figli riprovano. Nessuno mostra loro un giro fatto bene: non c'è un dataset, solo sopravvivenza.
- pesi in ogni cervello
- 470
- generazioni di evoluzione
- 300
- tracciati mai visti su 40 finiti senza incidenti
- 40
- giro medio su quei tracciati
- 27,7 s
Cosa può vedere l'auto
È la scelta da cui dipende tutto il resto. Ogni auto riceve otto numeri: sette distanze dai muri, lanciate come raggi, e la propria velocità. Niente mappa e nessuna idea di dove si trova, quindi non può imparare un tracciato a memoria. Qualunque cosa finisca per fare, deve essere guida vera.
Il cervello è una piccola rete, 8 → 16 → 12 → 8 → 2, e le sue due uscite sono lo sterzo e il pedale. Tutti i suoi 470 pesi, messi in fila, sono il genoma dell'auto.
- 1
Correre
Ogni auto guida sei tracciati generati solo per questa generazione. Nessun tracciato si vede due volte, e quelli usati per giudicare il campione vengono da un intervallo di seed separato.
- 2
Valutare
Finire il giro è un cancello, non un bonus: un'auto che completa il giro sta sempre sopra una che non lo completa, quindi il tempo sul giro non si compra rischiando. Sui sei tracciati il punteggio è per il 70% la media e per il 30% il peggiore, così la costanza batte un colpo di fortuna.
- 3
Riprodurre
Le 5 migliori passano intatte. Le altre sono figlie delle prime 25, scelte con tornei a tre, mescolate gene per gene e mutate leggermente. 3 nuove auto casuali entrano a ogni generazione, così la popolazione non si appiattisce su un'idea sola.
- 4
Ripetere
La mutazione si restringe un poco a ogni generazione, dall'esplorazione ampia dell'inizio alla rifinitura della fine.
Dal muro al traguardo
Nella generazione zero quasi tutte le auto si schiantano o non vanno da nessuna parte: finisce il giro mezzo percento delle corse. Nelle ultime cinquanta generazioni lo finisce l'82%, su tracciati che le auto non avevano mai visto fino a quel momento.
La frenata che nessuno ha premiato
È la fisica a decidere cosa vuol dire guidare. Sotto circa 4 unità al secondo lo sterzo è limitato dalla cremagliera; sopra, dall'aderenza, quindi il raggio di curva cresce con il quadrato della velocità. A velocità massima l'auto ha bisogno di un raggio di circa 84 unità, e le curve generate scendono fino a circa 19.
Quindi una curva non si fa in pieno. Niente nel punteggio parla di frenata, e le auto hanno imparato a frenare lo stesso, perché era l'unico modo per passare un tornante.
Scegliere il campione
I punteggi non si possono confrontare tra generazioni, perché i tracciati cambiano sotto di loro. Per questo il pilota salvato non è quello con il punteggio più alto. Ogni dieci generazioni il leader del momento corre su tracciati tenuti da parte apposta, e sostituisce il campione solo se ne finisce di più, con il tempo sul giro come spareggio. Il campione finale li finisce tutti e 40 senza incidenti, in media in 27,7 secondi al giro.
Abbastanza veloce da provare idee
L'intera popolazione è un unico insieme di array NumPy: una sola chiamata di raycast e un solo passaggio della rete per cento auto insieme. Una generazione su sei tracciati richiede circa 8 secondi su un portatile, ed è questo che rende una corsa da 300 generazioni abbastanza economica da provarci sopra le idee.
Una corsa è riproducibile al byte: l'addestramento con la finestra aperta e quello senza finestra, dallo stesso seed, producono popolazioni identiche, e riprendere una corsa continua lo stesso flusso casuale. 114 test lo tengono così.
Galleria

Vuoi qualcosa del genere?
Posso costruire la stessa cosa per il tuo prodotto.
Raccontami cosa hai in mente. Ricevi una risposta in giornata, con uno scope e dei tempi realistici, non una proposta di vendita.