Insegna a una rete neurale a giocare a carte


10

Attualmente sto scrivendo un motore per giocare a carte, dato che non esiste ancora un motore per questo particolare gioco.

Spero di poter introdurre in seguito una rete neurale al gioco e far sì che impari a giocare.

Sto scrivendo il motore in modo che sia utile per un giocatore AI. Esistono punti di scelta e in questi punti viene presentato un elenco di opzioni valide. La selezione casuale sarebbe in grado di giocare (anche se non bene).

Ho imparato molto sulle reti neurali (principalmente NEAT e HyperNEAT) e ho persino costruito la mia implementazione. Non sono ancora sicuro di come costruire un'intelligenza artificiale in grado di tenere conto di tutte le variabili in uno di questi tipi di giochi. C'è un approccio comune? So che Keldon ha scritto una buona intelligenza artificiale per RftG che ha una discreta quantità di complessità, non sono sicuro di come sia riuscito a costruire una tale intelligenza artificiale.

Qualche consiglio? È fattibile? Ci sono dei buoni esempi di questo? Come sono stati mappati gli input?

EDIT: ho cercato online e imparato come funzionano le reti neurali e di solito come si riferiscono al riconoscimento delle immagini o alla guida di un semplice agente. Non sono sicuro se o come lo applicherei per effettuare selezioni con carte che hanno una sinergia complessa. Qualsiasi direzione verso ciò che dovrei guardare sarebbe molto apprezzata.

Informazioni sul gioco: il gioco è simile a Magic: The Gathering. C'è un comandante che ha salute e abilità. I giocatori hanno una riserva di energia che usano per mettere sul tavolo servitori e incantesimi. I minion hanno salute, valori di attacco, costi, ecc. Le carte hanno anche abilità, queste non sono facilmente enumerabili. Le carte vengono giocate dalla mano, le nuove carte vengono pescate da un mazzo. Questi sono tutti aspetti che sarebbe utile considerare la rete neurale.


Ciao, benvenuto su AI.SE! Allo stato attuale, sembra un po 'troppo ampio per noi per essere in grado di rispondere bene. Pensi di poterlo modificare per restringerlo un po '? Grazie!
Mithical,

Mentre la domanda è ampia, è una domanda ovvia e comune per qualcuno che è nuovo sul campo. Anche uno in cui le risposte sono difficili da trovare utilizzando Google (poiché la maggior parte dei tutorial su NN sembrano concentrarsi sul riconoscimento delle immagini e sugli esempi di lingua). Penso che meriti una risposta indicando buone risorse su approcci e tecniche per usare NN per giocare, in questo caso in particolare con i giochi di carte.
user12889

Grazie per il feedback. Ho modificato un po 'la mia domanda. Qualsiasi direzione verso l'apprendimento del materiale sarebbe utile. Trovo principalmente il riconoscimento delle immagini come hai menzionato. Sono impaziente di imparare e sono felice di avere una vasta serie di letture consigliate, piuttosto che una semplice risposta.
pcaston2,

Risposte:


3

Penso che sollevi una buona domanda, in particolare WRT su come gli input e gli output delle NN sono mappati sulla meccanica di un gioco di carte come MtG in cui le azioni disponibili variano notevolmente a seconda del contesto.

Non ho una risposta davvero soddisfacente da offrire, ma ho giocato a Keldon's Race for the Galaxy basato sull'intelligenza artificiale basata su NN - sono d'accordo sul fatto che sia eccellente - e ho esaminato come ha affrontato questo problema.

L'ultimo codice per l'IA di Keldon è ora ricercabile e navigabile su github .

Il codice ai è in un file . Utilizza 2 NN distinti, uno per "valutare le carte mano e attive" e l'altro per "prevedere le scelte di ruolo".

Quello che noterai è che utilizza una discreta quantità di codice non NN per modellare le meccaniche di gioco. Molto una soluzione ibrida.

La mappatura dello stato del gioco nella valutazione NN viene eseguita qui . Varie caratteristiche rilevanti sono codificate a caldo, ad esempio il numero di prodotti che possono essere venduti in quel turno.


Un altro eccellente caso di studio sulla mappatura di un gioco complesso in una NN è l'ambiente di apprendimento Starcraft II creato da Deepmind in collaborazione con Blizzard Entertainment. Questo documento offre una panoramica di come un gioco di Starcraft è mappato su una serie di funzioni che un NN può interpretare e come le azioni possono essere eseguite da un agente NN alla simulazione del gioco.


2

Questo è completamente fattibile, ma il modo in cui gli input sono mappati dipenderebbe molto dal tipo di gioco di carte e da come si gioca.

Prenderò in considerazione alcune possibilità:

  1. Il tempo conta in questo gioco? Una mossa passata influenzerebbe una futura? In questo caso, staresti meglio usando le reti neurali ricorrenti (LSTM, GRU, ecc.).
  2. Vorresti che la rete neurale apprendesse dai dati che raccogli o imparassi da sola? Se da solo, come? Se raccogli dati di te stesso giocando a decine o centinaia di volte, li inserisci nella Rete Neurale e li fai imparare da te, allora stai facendo qualcosa chiamato "Clonazione comportamentale". Tuttavia, se desideri che NN impari da solo, puoi farlo in 2 modi:

    a) Apprendimento per rinforzo - RL consente alla Rete neurale di imparare giocando contro se stessa molte volte.

    b) NEAT / Algoritmo genetico - NEAT consente alla Rete neurale di apprendere usando un algoritmo genetico.

Tuttavia, ancora una volta, per essere più specifico su come codificare gli ingressi e le uscite della rete neurale, dovrei sapere di più sul gioco di carte stesso.


Ciao, grazie per la risposta! Studierò queste aree per vedere cosa si applica. Ho aggiunto una breve descrizione del gioco nella speranza che questo si restringa per te. Il mio motore supporta annullamenti in modo che possa essere utile in combinazione con NN. Dato che il motore è incompiuto, non ho un set di campioni, ma ho intenzione di mantenere tutte le storie di gioco dal server di hosting tra 2 giocatori. Stavo pensando di utilizzare la propagazione posteriore per accelerare il processo.
pcaston2,

Se lo stato del gioco conta, ma non come sei arrivato a quello stato , diresti che il tempo conta? Puoi fare qualche esempio di gioco in cui il tempo conta e in cui il tempo non conta? Al momento posso solo pensare a situazioni in cui lo stato attuale conta (chi è il turno, quali carte conosciute o pezzi di gioco sono dove) ma non come ci sei arrivato (l'unica cosa che conta è dove sono ora , non dove si trovano erano due turni fa)
Simon Forsberg il

2

Vorresti sicuramente che la tua rete conoscesse informazioni cruciali sul gioco, ad esempio quali carte ha l'agente AI (i loro valori e tipi), il pool di mana, quante carte sul tavolo e i loro valori, il numero del turno e così via. Queste cose che devi capire da solo, la domanda che dovresti porti è "Se aggiungo questo valore per inserire come e perché migliorerà il mio sistema". Ma la prima cosa da capire è che la maggior parte degli NN sono progettati per avere una dimensione di input costante, e suppongo che questo sia un aspetto importante in questo gioco poiché i giocatori possono avere una diversa quantità di carte in mano o sul tavolo. Ad esempio, vuoi far sapere a NN quali carte ha, supponiamo che il giocatore possa avere un massimo di 5 carte in mano e ogni carta può avere 3 valori (mana, attacco e salute), quindi puoi codificarlo come 5 * 3 vettoriale, dove i primi 3 valori rappresentano la carta numero uno e così via. Ma cosa succede se il giocatore ha attualmente 3 carte, un approccio semplice sarebbe quello di assegnare zeri agli ultimi 6 input, ma ciò potrebbe causare problemi poiché alcune carte possono avere 0 costo di mana o 0 attacco. Quindi è necessario capire come risolvere questo problema. Puoi cercare modelli NN in grado di gestire dimensioni di input variabili o di capire come codificare input come vettore di dimensioni costanti.

In secondo luogo, anche le uscite sono vettori di dimensioni costanti. Nel caso di questo tipo di gioco, può essere un vettore che codifica le azioni che l'agente può eseguire. Quindi diciamo che abbiamo 3 azioni: metti una carta, salta il turno e concedi. Quindi può essere un codificatore a caldo, ad es. Se si dispone di 1 0 0 output, ciò significa che l'agente deve inserire una scheda. Per sapere quale carta dovrebbe mettere puoi aggiungere un altro elemento all'output che produrrà un numero compreso tra 1 e 5 (5 è il numero massimo di carte nella mano).

Ma la parte più importante dell'allenamento di una rete neurale è che dovrai inventare una funzione di perdita adatta al tuo compito. Forse le funzioni di perdita standard come la perdita al quadrato medio o L2 saranno buone, forse dovrai cambiarle per soddisfare le tue esigenze. Questa è la parte in cui dovrai fare una ricerca. Non ho mai lavorato con NEAT prima, ma come ho capito bene, utilizza un algoritmo genetico per creare e addestrare NN e GA usa alcune funzioni di fitness per selezionare un individuo. Quindi, in pratica, dovrai sapere quale metrica utilizzerai per valutare il rendimento del tuo modello e in base a questa metrica cambierai i parametri del modello.

PS. È possibile risolvere questo problema con la rete neurale, tuttavia, le reti neurali non sono magiche e non sono la soluzione universale a tutti i problemi. Se il tuo obiettivo è risolvere questo determinato problema, ti consiglio anche di approfondire la teoria dei giochi e la sua applicazione nell'intelligenza artificiale. Direi che risolvere questo problema richiederebbe conoscenze complesse da diversi campi dell'IA.

Tuttavia, se il tuo obiettivo è quello di conoscere le reti neurali, consiglierei di svolgere attività molto più semplici. Ad esempio, è possibile implementare NN che funzionerà sul set di dati di riferimento, ad esempio NN che classificherà le cifre dal set di dati MNIST. La ragione di ciò è che sono stati scritti molti articoli su come fare la classificazione su questo set di dati e imparerai molto e imparerai più velocemente dall'implementazione di cose semplici.


1

Sì. È fattibile.

Panoramica della domanda

L'obiettivo di progettazione del sistema sembra essere quello di ottenere un vantaggio strategico vincente impiegando una o più reti artificiali in combinazione con un motore di gioco di carte.

La domanda mostra una consapevolezza generale delle basi del gioco, come indicato nella teoria dei giochi di Morgenstern e von Neuman .

  • In punti specifici durante il gioco può essere richiesto a un giocatore di eseguire una mossa.
  • C'è una serie di opzioni di mossa finite secondo le regole del gioco.
  • Alcune strategie per la selezione di una mossa producono record vincenti più elevati su più giochi rispetto ad altre strategie.
  • Una rete artificiale può essere impiegata per produrre strategie di gioco vittoriose più frequentemente della selezione di mosse casuali.

Altre caratteristiche del gioco possono essere o meno ovvie.

  • Ad ogni punto di movimento c'è uno stato di gioco, necessario per qualsiasi componente coinvolto nel miglioramento del successo del gioco.
  • Oltre a non sapere quando l'avversario blufferà, nei giochi di carte, l'ordine segreto delle carte mescolate può introdurre l'equivalente di un giocatore virtuale le cui mosse di casualità approssimativa.
  • In tre o più partite del giocatore, la segnalazione di partner o potenziali partner può aggiungere un elemento di complessità alla determinazione della strategia di gioco vincente in qualsiasi momento. Sulla base delle modifiche, non sembra che questo gioco abbia tali complessità.
  • Anche fattori psicologici come l'intimidazione possono svolgere un ruolo nel vincere il gioco. Non è noto se il motore presenti un volto all'avversario, quindi questa risposta lo salterà.

Suggerimenti per l'approccio comune

Esiste un approccio comune alla mappatura di input e output, ma c'è troppo da spiegare in una risposta di Stack Exchange. Questi sono solo alcuni principi di base.

  • Tutta la modellistica che può essere fatta esplicitamente dovrebbe essere fatta. Ad esempio, sebbene una rete artificiale possa teoricamente imparare a contare le carte (tenendo traccia delle possibili posizioni di ciascuna delle carte), un semplice algoritmo di conteggio può farlo, quindi utilizzare l'algoritmo noto e inserire tali risultati nella rete artificiale come ingresso.
  • Utilizzare come input qualsiasi informazione correlata all'output ottimale, ma non utilizzare come input qualsiasi informazione che non sia possibile correlare con l'output ottimale.
  • Codifica i dati per ridurre la ridondanza nel vettore di input, sia durante l'allenamento che durante il gioco automatizzato. Astrazione e generalizzazione sono i due modi comuni per raggiungere questo obiettivo. L'estrazione di feature può essere utilizzata come strumento per astrarre o generalizzare. Questo può essere fatto sia su ingressi che su uscite. Un esempio è che, in questo gioco, J> 10 allo stesso modo di A> K, K> Q, Q> J e 10> 9, quindi codificare le carte come numeri interi da 2 a 14 o da 0 a 12 di sottraendo uno. Codifica i semi da 0 a 3 invece di quattro stringhe di testo.

Il lavoro di riconoscimento delle immagini è solo in remoto, troppo diverso dal gioco di carte per usarlo direttamente, a meno che non sia necessario riconoscere le carte da un'immagine visiva, nel qual caso potrebbe essere necessario LSTM per vedere cosa hanno scelto gli altri giocatori per le mosse. L'apprendimento di strategie vincenti trarrebbe molto probabilmente beneficio dai progetti MLP o RNN o da uno dei loro progetti di reti artificiali derivate.

Cosa farebbe una rete artificiale ed esempi di formazione

Il ruolo principale delle reti artificiali di questi tipi è quello di imparare una funzione dai dati di esempio. Se hai le sequenze di mosse di giochi reali, questa è una grande risorsa da avere per il tuo progetto. Un gran numero di essi sarà molto utile per la formazione.

Vale la pena considerare come organizzare gli esempi e se e come etichettarli, tuttavia senza le regole del gioco di carte è difficile dare indicazioni affidabili. Se ci sono partner, se si basa sul punteggio, se il numero di mosse per una vittoria e una dozzina di altri fattori forniscono i parametri dello scenario necessari per prendere quelle decisioni.

Studia

Il consiglio principale che posso dare è quello di leggere, non tanto articoli generali sul web, ma leggere alcuni libri e alcuni dei documenti che puoi capire sugli argomenti di cui sopra. Quindi trova del codice che puoi scaricare e prova dopo aver compreso abbastanza bene la terminologia per sapere cosa scaricare.

Ciò significa che le ricerche di libri e le ricerche accademiche hanno molte più probabilità di orientarti nella giusta direzione rispetto alle ricerche web generali. Ci sono migliaia di poser nello spazio web generale, che spiegano i principi dell'IA con un gran numero di errori. Gli editori di libri e articoli accademici sono più esigenti di due diligence nei loro autori.

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.