Le migliori tecniche per un'intelligenza artificiale di un gioco di carte


27

Sto cercando di sviluppare un'intelligenza artificiale per un gioco di carte e sono un po 'bloccato sulla tecnica / algoritmo che dovrei usare. Ecco alcune ipotesi sul gioco:

  • Dopo che le carte sono state distribuite ai giocatori, non c'è casualità. Voglio dire qui che ogni giocatore può scegliere quali carte giocare, ma non si verifica alcun processo casuale come quando si distribuiscono le carte all'inizio del gioco.
  • Vi sono restrizioni sulle carte che possono essere giocate quando una carta era già stata giocata.
  • Il giocatore che vince la presa, gioca per primo. Ad esempio, il giocatore 1 gioca una carta, il giocatore 2 gioca una carta e vince. Quindi il giocatore 2 gioca una carta e quindi il giocatore 1 gioca.

Conosco molti suggerimenti / regole (ad esempio se so che il giocatore ha le carte A, B, C, allora dovrei giocare a D) che mi aiuta a vincere al gioco. Quindi, per prima cosa volevo usare una rete bayesiana per descrivere quelle regole. Il problema è che non conosco alcuna probabilità da assegnare, ma potrei calcolare un'euristica usando la storia dei giochi giocati (contro un essere umano). Secondo problema, è molto probabile che io non conosca tutte le regole e che ci siano alcune regole implicite necessarie all'intelligenza artificiale per trovare il gioco ottimale.

Non sono sicuro se questo sarebbe un buon modo per sviluppare un'intelligenza artificiale per un tale gioco di carte?

Mi chiedo anche se ci sono altre tecniche che meglio si adattano al problema. Ad esempio, ho dato un'occhiata a minimax (forse con un algoritmo di potatura), ma sarebbe una buona opzione per questo problema? Non sono abbastanza sicuro poiché le giocate più importanti sono all'inizio del gioco quando ci sono i parametri sconosciuti più alti (la maggior parte delle carte non è ancora giocata).


1
Ottima domanda! Non ho una risposta completa. Vorrei solo aggiungere il mio 2c: se conosci tutti i possibili stati in cui può trovarsi il tuo gioco, Minimax sarebbe teoricamente un buon modo per attraversare quell'albero degli stati di gioco. Potrebbero verificarsi problemi di prestazioni se quel gioco indica che l'albero è troppo grande ...
Drago di Shivan,

1
Qual è l'obiettivo del gioco? Chi vince? Potrebbe essere possibile per un giocatore approssimare le sue possibilità di vincere la partita in un dato momento?
VIENI DAL

Non posso spiegare in dettaglio il gioco. Per vincere uno devi ottenere il maggior numero di punti (più dell'altro giocatore). All'inizio, è difficile / impossibile dire se stiamo per vincere. Alla fine, possiamo essere certi che per vincere se uno ha già abbastanza punti (l'altro giocatore non può più guadagnare abbastanza punti per vincere).
LaurentG,

1
Il gioco HeartStone è? :)
Lescai Ionel,

1
Sembra che io sia in una situazione molto simile a te, anche un gioco di carte, anche locale (non la Svizzera) e sto anche cercando di capire da dove comincio. Una cosa che ho trovato interessante è un evolutore, in cui assegni DNA ai giocatori virtuali e poi li metti l'uno contro l'altro. Uccidi i perdenti e allevi i vincitori. Il risultato potrebbe essere un robot AI abbastanza decente. Non ho capito come adattare questo tropiceuro.com/puerto-rico-evolver al mio gioco di carte, ma penso che sia possibile.
Andrew Savinykh,

Risposte:


11

Il tuo esempio sembra simile a Bridge . I migliori sistemi per giocare a bridge usano i metodi Monte Carlo per selezionare le mosse. Ad alto livello:

  • Determina le probabilità che ciascuna carta sia in una data mano. Sai con certezza quali carte hai in mano e quali carte sono state giocate. Determina la probabilità di tutte le altre carte in base alle carte che sono state giocate e possibilmente l'offerta di un giocatore se ci sono offerte coinvolte. Per iniziare, potresti semplicemente usare un'ingenua e uguale probabilità che una carta sia nella mano di un giocatore.
  • Ora, esegui il maggior numero di giochi "virtuali" che puoi. Simula il gioco di una carta dalla tua mano e quindi determina le risposte dei tuoi avversari usando le regole del gioco e le tue probabilità. Per ogni gioco virtuale, usa le tue probabilità per assegnare le carte a un giocatore e quindi simulare rapidamente il gioco. Supponiamo che ogni giocatore giocherà al meglio delle proprie capacità. Conosci tutte le carte del tuo gioco virtuale in modo da poter far giocare perfettamente ogni giocatore.
  • Quando hai un campione solido (o sei a corto di tempo), scegli la mossa legale che ti ha dato il miglior risultato il più delle volte.

Una volta che qualcosa funziona, puoi aggiungere ogni sorta di strategie arricchite. Ad esempio, varia le tue probabilità in base alle giocate storiche di un giocatore, varia le probabilità in base allo stile di un giocatore (passivo, cauto, aggressivo) o addirittura considera gli effetti di giocatori specifici che giocano insieme.


Modifica per il commento di LaurentG:

Alla fine, potresti voler scartare l'idea del gioco perfetto per tutti i giocatori e sostituire qualcosa di più realistico. Concettualmente, separa le probabilità che una carta sia nella mano di qualcuno (distribuzione delle carte) dalla probabilità che un giocatore giochi una determinata carta legale durante una mano (selezione della carta).

La selezione delle carte è matura per l'apprendimento. Se segui le partite in tutti i giochi, puoi imparare come un determinato giocatore, o i giocatori in generale, tendono a giocare in base alle carte in mano e alle carte che sono state giocate. Potresti anche avere fantasia e modellare i loro presupposti sulle carte nascoste da loro.

Ci sono anche opportunità di apprendimento per la distribuzione delle carte. Le offerte passate di un giocatore e la selezione di una carta durante una mano potrebbero rivelare un "racconto" di ciò che è nascosto nella loro mano. È possibile utilizzare i dati storici per regolare le probabilità durante la creazione di ogni gioco virtuale.


Grazie per la tua risposta interessante. Hai ragione, il gioco condivide alcune regole con Bridge. A quanto ho capito, la tua IA non sarà migliore di quella che hai codificato. C'è un modo per usare un metodo Monte Carlo e far apprendere l'IA? Sarebbe possibile assegnare le probabilità per ogni carta usando gli eventi passati (di tutti i giochi precedenti)?
LaurentG,

Puoi sicuramente far imparare l'IA. Il trucco sarebbe quello di separare le probabilità che una carta si trovi in ​​una mano particolare dalla probabilità che un giocatore giochi una determinata carta legale una volta che è in mano. Elaborerò sopra.
Corbin,

6

Un caso di recente esperienza personale:

Ho lavorato io stesso su un gioco di carte (Bisca, un gioco portoghese per 2 giocatori) e sto ottenendo buoni risultati usando i metodi Monte Carlo, in particolare utilizzando il recente algoritmo di ricerca di informazioni Monte Carlo Tree Search (ISMCTS, descritto con codice sorgente di esempio in Python all'indirizzo http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm ).

Gioca ragionevolmente bene, con la mossa errata occasionalmente, solo con la conoscenza delle regole del gioco. Attualmente sto provando a grok, per essere in grado di migliorarlo, poiché secondo le informazioni che ho letto su di esso (e il suo MCTS "genitore") è possibile migliorare il suo gioco con l'euristica ( http: // www .orangehelicopter.com / ed / papers / aiide13.pdf ) e inferenza sulla carta dell'avversario.


1
questo post è piuttosto difficile da leggere (wall of text). Ti dispiacerebbe modificarlo in una forma migliore?
moscerino

grazie per la risposta di qualcuno con esperienza reale sul problema. ottimi collegamenti!
luben,

3

Penso che dipenda dalle regole del gioco.

Ecco cosa ho capito dalla tua domanda:

  • Il gioco si svolge in round, con ogni giocatore che gioca una carta per round
  • Il giocatore che inizia per primo può giocare qualsiasi carta desideri
  • Il giocatore che va secondo può giocare solo determinate carte, a seconda di ciò che è stato giocato per primo
  • Il giocatore che vince il round inizia per primo al round successivo
  • Tutte le carte sono distribuite prima del primo round

Ipotesi:

  • Con la piena conoscenza delle carte dell'altro giocatore, il giocatore che inizia per primo può decidere, per ciascuna delle sue, se una carta vincerà il round o meno (il primo giocatore può giocare una carta vincente)
  • Se le carte A e B vincono entrambe quando vengono giocate per prime in questo round, giocando A in questo round (e vincendo), quindi giocare B nel round seguente significa che vincerà anche B (le carte non perdono valore)
  • Con la piena conoscenza delle carte dell'altro giocatore, il secondo giocatore può decidere se una carta può vincere in questo round, ma perderebbe se giocata per prima nel turno successivo (scegli la carta peggiore)

Esempio di gioco che segue queste regole:

Il primo giocatore gioca una carta. Il secondo giocatore deve giocare una carta della stessa suite o perdere. Se le suite corrispondono, vince la carta più alta.

Ora, questo gioco è deciso dalla fortuna del sorteggio e dalla possibilità di memorizzare quali carte sono state giocate per conoscere la mano dei tuoi avversari.
In questa situazione, farei ricordare all'IA solo in parte le carte giocate, ovvero rimuovere casualmente dall'elenco ricordato una percentuale delle carte giocate (numero più basso = intelligenza artificiale maggiore), ma non quelle importanti come gli assi o i re. In questo modo, ad esempio, l'IA saprà che è sicuro giocare una Regina di Hearts perché ricorderà che l'avversario non ha l'asso o il re, ma dovrà calcolare una probabilità se vuole quindi giocare il 10, perché potrebbe non ricordare se il Jack è ancora in gioco.
Questo imita l'intervallo di attenzione umana.

TL; DR
Limita quanto l'IA conosce, quindi le sue decisioni non sono perfette, ma abbastanza buone.


Grazie per la tua risposta. Ma come detto nella domanda, non c'è fortuna / casualità dopo che le carte sono state distribuite. E un giocatore non conosce le carte degli altri giocatori. Deve fare ipotesi usando le carte già giocate e alcune "regole".
LaurentG,

2
Come l'idea di rimuovere casualmente le carte memorizzate. Questo dà un suggerimento sullo sviluppo di livelli come facile, medio e difficile.
superM
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.