Algoritmo di machine learning per giocare a Connect Four


14

Attualmente sto leggendo l'apprendimento automatico e mi chiedo come applicarlo per giocare a Connect Four .

Il mio attuale tentativo è un semplice classificatore multiclasse che utilizza un modello di funzione sigmoid e il metodo one-vs-all.

A mio avviso, le funzioni di input devono essere lo stato (disco del lettore 1, disco del lettore 2, vuoto) dei campi della griglia 7x6 = 42.

L'output sarebbe il numero della riga in cui inserire il disco. Poiché si tratta di un numero discreto compreso tra 1 e 7, suppongo che questo possa essere trattato come un problema di classificazione multiclasse.

Ma come posso generare esempi di formazione utilizzabili nell'apprendimento supervisionato?

L'obiettivo principale è vincere la partita, ma il risultato ovviamente non è noto quando si fa ogni tranne l'ultimo turno. Se permetto a due giocatori che decidono in modo casuale cosa fare l'uno contro l'altro migliaia di volte, sarà sufficiente prendere semplicemente tutti i turni effettuati dal vincitore di ogni round di gioco come esempi di allenamento? O devo farlo in un modo completamente diverso?

Modifica: come suggerito nei commenti, ho letto un po 'sull'apprendimento per rinforzo. Da quello che so capire, Q-Learning dovrebbe fare il trucco, cioè devo approssimare una funzione Q dello stato corrente e l'azione da intraprendere per essere la massima ricompensa cumulativa che inizia in quello stato. Quindi ogni passo sarebbe scegliere l'azione che si traduce nel valore massimo di Q. Tuttavia, questo gioco ha troppi stati per farlo, ad esempio come una tabella di ricerca. Quindi, qual è un modo efficace per modellare questa funzione Q?


2
Google "Reinforcement Learning"
George

Okay, immagino che si applichi esattamente a questo problema. Sembra che ci sia molta lettura in anticipo. Qualche puntatore o consiglio più specifico?
Tom,

1
Se ne sapessi di più, lo pubblicherei come risposta :) Purtroppo non ho esperienza nell'apprendimento per rinforzo. Vorrei iniziare dal libro "Machine Learning" di Tom Mitchell. È un ottimo libro introduttivo e ha anche un capitolo sull'apprendimento per rinforzo.
George

1
Quest'ultimo, sono solo curioso dell'apprendimento automatico e sto cercando di conoscerlo.
Tom,

1
@Tom, ci sono modi migliori per "conoscere" le tecniche di apprendimento automatico. Comincerei con tecniche di classificazione e regressione più basilari e da lì in avanti. Puoi prendere set di dati dal repository di dati di apprendimento automatico dell'UCI, controllare le note del corso di apprendimento automatico di Andrew Ng (Stanford) e ottenere l'implementazione. Saltare direttamente nel tentativo di risolvere connect 4 usando l'apprendimento per rinforzo sembra piuttosto imbarazzante e eccessivamente complicato.
Nick,

Risposte:


8

Solo per offrire un'alternativa più semplice all'apprendimento del rinforzo, è possibile utilizzare l'algoritmo di base minimax per cercare buone mosse e utilizzare l'apprendimento automatico per valutare le posizioni della scacchiera.

Per chiarire, minimax costruisce un albero di gioco in cui ogni nodo è etichettato con il risultato delle foglie (1 = il giocatore A vince, 0 = il giocatore B vince), supponendo che A scelga le mosse che massimizzano questo numero e B sceglie le mosse che lo minimizza.

A meno che il gioco non sia molto semplice, non sarai in grado di costruire l'intero albero di gioco fino ai terminali. Dovrai invece fermarti in posizioni di tabellone non finite e valutare le foglie con un po 'euristico (essenzialmente la probabilità che il giocatore A vinca da una determinata posizione). Puoi lasciare che un algoritmo di apprendimento automatico come una rete neurale provi ad apprendere questa probabilità collegando quattro posizioni con risultati noti.

Per generare esempi di allenamento potresti costruire il tuo giocatore minimax con un semplice euristico, lasciarlo giocare mille volte, usare quei giochi per allenare la tua prima rete neurale, quindi lasciare che si paghi mille giochi e così via. Con un po 'di fortuna, il tuo sistema migliorerà con ogni generazione.


2

Ho scritto un post sul blog sull'utilizzo di minimax per giocare a connect quattro qualche tempo fa. Puoi vedere il codice in azione qui . Se hai bisogno di addestrare i tuoi modelli, puoi forse lasciarlo giocare un paio di migliaia di partite contro la mia implementazione minimax.


Sentiti libero di inserire il mio codice su Github. github.com/lukasvermeer/minimax
Lukas Vermeer

Benvenuto in Stack Exchange. Questo è un sito di domande e risposte . Si prega di leggere la nostra FAQ , in particolare come rispondere . In particolare, non vogliamo post che consistono esclusivamente in un link a una risposta. Grazie per il tuo contributo, ma potresti riassumere i punti principali del tuo post nel tuo post qui?
Gilles 'SO- smetti di essere malvagio' il

Mi dispiace, ma la domanda originale era "come faccio a generare esempi di formazione utilizzabili nell'apprendimento supervisionato?" Ho fornito collegamenti a codice funzionante che possono essere utilizzati per generarli. Non riesco a vedere come scrivere più testo sopra aiuterebbe a rispondere all'esigenza originale.
Lukas Vermeer,

"Un collegamento a una potenziale soluzione è sempre il benvenuto, ma per favore aggiungi un contesto attorno al collegamento in modo che i tuoi colleghi utenti abbiano qualche idea di cosa sia e perché sia ​​lì. Cita sempre la parte più rilevante di un collegamento importante, nel caso in cui il sito di destinazione non è raggiungibile o passa permanentemente offline. " Penso di aver fatto il primo. Quest'ultimo sarebbe irrilevante. La domanda originale ha bisogno di giochi di esempio, non di una spiegazione su come implementare una soluzione.
Lukas Vermeer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.