Snake Neural Network

di il
9 risposte

Snake Neural Network

Buonasera a tutti, sono un ragazzo che frequenta l'università di informatica a Roma e nel mezzo degli studi mi piace intrattenermi facendo alcuni progetti.
Ho preso spunto da internet e ho iniziato a studiarmi il funzionamento delle reti neurali e i vari tipi che ne esistono; ho visto alcuni video dove applicavano questo metodo su snake e allora mi ci sono messo anch'io. Non ho letto nessun codice e ho scritto tutto interamente io dalla base logica che avevo appreso sul web e con una grafica criticabile ho iniziato a far partire il mio serpente in base agli output che calcolava la rete neurale.
Il mio progetto si basa su di un algoritmo genetico e non su una rete supervisionata.
Inizialmente ho dato 6 input( 1 o 0 se davanti è bloccato(immediatamente bloccato cioè al prossimo passo troverebbe la morte se continuasse), se a sx è bloccato, se a dx è bloccato; e gli altri 3 sono sempre 0 o 1 se davanti ha il cibo( non il davanti immediato ma su tutta la linea), se a sx ha il cibo, se a dx ha il cibo) e non ho messo layer nascosti ma solo 3 neuroni di output quali : vai dritto, gira a sx. gira a dx; con questo metodo facendo andare la rete e con un algoritmo di selezione e mutazione sono riuscito a farla migliorare fino a 7/8 cibi mangiati per il serpente migliore ma non di piu, anche ore dopo non ho avuto altri miglioramenti anzi peggioramenti quindi ho pensato che senza una struttura di rete minima non sarei andato avanti e ora oltre i layer di input e di output ho un layer middle con 10 neuroni. Ora è molto piu lento il processo di apprendimento ma lo stesso si blocca a 2/3 mangiati dopo svariate ore e anche lui peggiora.
Non so come modificare la mia rete per far in modo che migliori, ho provato diversificando input e aggiungendone ma non arrivo a miglioramenti.
Se qualcuno ha qualche idea sarà bene accetta.
Ho un repo pubblico su Gitlab : https://gitlab.com/Rentox98/snake-neuralne
Il codice è in Java Grazie a tutti

9 Risposte

  • Re: Snake Neural Network

    1) progettino arzigogolato. Congratulazioni, o Condoglianze, a seconda del caso

    2) non ho capito come stai usando la rete neurale E l'algo genetico

    3) NON inventarti la terminologia, altrimenti non si capisce niente!

    3.1) Un algo di Machine Learning SUPERVISIONATO serve per creare un modello secondo una regola ben definita, ED USA un algoritmo di ottimizzazione.
    3.2) Una Neural Network e' uno dei modi per creare il modello, come decision tree/random forest/regressione lineare/ecc
    3.3) Un algoritmo genetico E' uno dei possibili modi di implementare un algoritmo di ottimizzazione, che va bene per il mondo discreto, un po' meno per quello continuo, come una rete neurale (ed infatti si usano degli algoritmi basati su gradiente)

    4) LASCIA PERDERE il web, a meno di non SAPARE GIA' che cosa stai cercando. STUDIA SU LIBRI!

    Quindi, RICOMINCIAMO!

    A) che cosa dovrebbe fare il tuo serpentello? Andare a caccia di cibo? Quali sono gli input? Se sta' a sx o a dx rispetto alla direzione del movimento? E quale dovrebbe essere l'output? SE girare a sx o a dx?

    SE e' cosi', quello che stai cercando di implementare e' un sistema di "Reinforcement Learning"

    https://en.wikipedia.org/wiki/Reinforcement_learnin





    Altrimenti, chiarisci meglio
  • Re: Snake Neural Network

    Buongiorno prima di tutto grazie per i consigli, comunque per chiarimento sto dando alla mia rete 8 input in questo momento: i 6 che ho descritto sopra nella domanda cioè:
    (1 o 0 se davanti è bloccato(immediatamente bloccato cioè al prossimo passo troverebbe la morte se continuasse), se a sx è bloccato, se a dx è bloccato; e gli altri 3 sono sempre 0 o 1 se davanti ha il cibo( non il davanti immediato ma su tutta la linea), se a sx ha il cibo, se a dx ha il cibo) e in più la posizione della x del cibo meno quella della testa del serpente fratto 1000 e lo stesso per la y.
    Come output ho tre neuroni: uno è gira a sx, un altro è gira a dx e l'ultimo è continua dritto.
    Non sto utilizzando un approccio supervisionato perchè non mi sembra applicabile in questo caso, quindi uso un algo genetico cioè:
    Ho una popolazione iniziale generata random di reti, ogni volta che muore il serpente lo rifaccio partire con una rete diversa, ogni rete avrà assegnato un punteggio (fitness) e alla fine della generazione prendo i migliori rispetto la fitness e : ne tengo una copia, formo altre reti facendo il crossover di due altre e le ultime le genero ancora casualmente per non rimanere in un massimo locale.
    Detto questo grazie delle risorse che mi hai inviato penso proprio che ora farò qualche ricerca su altri libri che trattano questo argomento e ne sceglierò uno
  • Re: Snake Neural Network

    Riassumo:

    A) generi un certo numero di reti neurali CON I PESI A CASO

    la rete ha una certa struttura, che e' sempre la stessa, e che comprende in input 8 valori BOOLEANI ed in output UNA CATEGORIA composta da {sx,dx,forward} (gira a sx, dx o va dritto)

    Input:

    - fwd bloccato
    - sx bloccato
    - dx bloccato

    - fwd: cibo
    - sx: cibo
    - dx: cibo

    - x rel cibo
    - y rel cibo

    Out CATEGORICO: {sx, dx, forward}

    B) PARTENDO SEMPRE dalla stessa posizione, fai avanzare il serpendello fino a che non muore.
    C) alla rete viene assegnato un valore (fitness) che dipende, immagino, da quante volte ha mangiato, e da quanto e' avanzato prima di morire

    D) usando il fitness ottenuto dalle reti, ne selezioni alcune, ne generi altre combinando i pesi di quelle selezionate, e ne generi di nuove.

    OK

    Per fare, si puo' anche fare, MA non e' certamente un modo efficiente pe farlo.
  • Re: Snake Neural Network

    Tutto Corretto tranne che la x e y relativi del cibo non sono booleani ma reali tra -1 e 1. Quando dici che non è un modo efficiente per farlo intendi che non è il modus operandi adatto a risolvere questo "problema" o che la scelta dell'algoritmo da usare è giusta ma lo sto sfruttando male (es sbaglio a mettere input o altro del genere)?
  • Re: Snake Neural Network

    Ciao, innanzitutto complimenti per l'argomento interessante.

    Volevo farti un'osservazione: la soluzione standard di snake prevede di indirizzarlo subito su un percorso hamiltoniano e poi percorrerlo all'infinito , fregandosene di dove sia il cibo. Ad intuito, quindi, non dovresti levare proprio gli input del cibo, o magari metterne altri sulla posizione della coda e dei muri?
  • Re: Snake Neural Network

    Ciao grazie, il fatto è che non voglio programmare io il comportamento del serpente ma vorrei farlo "imparare" da solo, quindi senza programmare l'algoritmo per trovare il percorso. A riguardo degli input : quelli sul cibo mi sembrano fondamentali, per i muri ne ho i 3 scritti sopra e non saprei quali altri mettere, invece per la coda è una cosa che farò più avanti, diciamo che ora è una versione piu "semplice" cioè non tiene ancora conto di questo fattore quindi non muore se si colpisce da solo, l ho fatto cosi perchè voglio capire il meccanismo di questo tipo di approccio e intanto farlo funzionare con la preoccupazione di mangiare e non andare addosso ai muri.
    Se hai qualche consiglio su input o altro dimmi quello che ti viene in mente, ho provato già a variare molte combinazioni di input e di grandezza della rete.
  • Re: Snake Neural Network

    @weierstrass: non ""incasiniamogli"" la vita Gia' cosi' e' un bel ""casino""

    @Alberto: una rete neurale usata cosi non ha molto senso
    Si po' anche fare, probabilmente, ma e' come pretendere di avere del caffe' dolce mettendoci il sale Boh!

    Non ho LA SOLUZIONE DEFINITIVA, pero' il problema si adatta di piu' ad un problema che potrebbe essere risolto mediante le tecniche di "reinforcement learning" o "deep reinforcement learning".

    Cerca su Google

    - "neural network pacman"
    - "neural network ping pong"

    Hanno fatto quello che stai cercando di fare tu

    Per i libri, questo dovrebbe fare al caso tuo:

    O'Reilly - Fundamentals of Deep Learning



    Se cerchi libri:

    - la O'Reily ha un SACCO di buoni libri su Machine Learning/Neural Network/ecc
    - la Packt e' una costola della O'Reilly, MA i libri sono di qualita' abbastanza scarsa
  • Re: Snake Neural Network

    Grazie per il materiale e i consigli ora cerco queste cose e per natale mi regalo questo libro
  • Re: Snake Neural Network

    Se apri un topic diverso, magari senza snake, che fa la cosa complicata, ti posso aiutare a capire le reti neurali.
    Consiglio Python e numpy se vuoi fare l'implementazione da solo, altrimenti ci sono diversi framework, ma è carino capire la teoria delle funzioni di attivazione e backpropagation dell'errore.
Devi accedere o registrarti per scrivere nel forum
9 risposte