Tutti i progetti
open source / 2026AI & Agenti · Giochi

racing-AI

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

racing-AI

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
Piloti addestrati su un tracciato che nessuno di loro ha mai visto.

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. 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. 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. 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. 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.

giri finitiincidenti
100%50%
0generazione300
Ogni corsa di ogni auto, generazione per generazione, direttamente dal log dell'addestramento.

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

racing-AI · 1

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.