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

24

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à. Intendo qui che ogni giocatore può scegliere quali carte gioca, ma non avviene alcun processo casuale come quando si distribuiscono le carte all'inizio del gioco.
  • C'è una restrizione sulle carte che possono essere giocate quando una carta è già stata giocata.
  • Il giocatore che vince il trucco, gioca prima di tutto. Per esempio. Il giocatore 1 gioca una carta, il giocatore 2 gioca una carta e vince. Quindi il giocatore 2 gioca una carta e poi gioca il giocatore 1.

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

Non sono sicuro che questo sarebbe un buon modo per sviluppare un'IA per un gioco di carte come questo?

Mi sto anche chiedendo se ci siano altre tecniche che meglio si adattano al problema. Per esempio, ho dato un'occhiata a minimax (magari con un algoritmo di potatura), ma sarebbe una buona opzione per questo problema? Sono abbastanza insicuro dal momento che le partite più importanti sono all'inizio del gioco quando ci sono i più alti parametri sconosciuti (la maggior parte delle carte non vengono ancora giocate).

    
posta LaurentG 09.10.2013 - 13:22
fonte

3 risposte

10

Il tuo esempio sembra simile a Bridge . I sistemi di gioco Bridge utilizzano i metodi Monte Carlo per selezionare le mosse. Ad alto livello:

  • Determina le probabilità di ciascuna carta 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, eventualmente, l'offerta di un giocatore se è prevista l'offerta. Per iniziare, potresti semplicemente usare un'ingenua e uguale probabilità che una carta sia nella mano di un giocatore.
  • Ora esegui quanti più giochi "virtuali" puoi. Simula giocando una carta dalla tua mano e poi 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 carte a un giocatore e quindi simulare rapidamente il gioco. Supponiamo che ogni giocatore giocherà al meglio delle proprie capacità. Conoscete tutte le carte del vostro gioco virtuale in modo che possiate giocare perfettamente ogni giocatore.
  • Quando hai un campionamento solido (o esaurisci il tempo), scegli la mossa legale che ti ha dato il miglior risultato più spesso.

Una volta che hai lavorato, puoi aggiungere tutti i tipi 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 considera anche gli effetti di specifici giocatori che giocano insieme.

Modifica per il commento di LaurentG:

In definitiva, potresti voler eliminare 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 data carta legale durante una mano (selezione della carta).

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

Esistono anche opportunità di apprendimento per la distribuzione delle carte. Le offerte passate di un giocatore e la selezione delle carte durante una mano potrebbero rivelare un "tell" su ciò che è nascosto nella loro mano. Puoi utilizzare i dati storici per regolare le probabilità quando costruisci ogni gioco virtuale.

    
risposta data 09.10.2013 - 15:46
fonte
6

Un caso di recente esperienza personale:

Ho lavorato io stesso a un gioco di carte (Bisca, un gioco portoghese a 2 giocatori), e ho ottenuto buoni risultati usando i metodi Monte Carlo, specialmente usando l'algoritmo di ricerca dell'albero di Monte Carlo (ISMCTS). , descritto con codice sorgente di esempio in Python all'indirizzo link ).

Gioca ragionevolmente bene, con l'occasionale mossa sbagliata, solo con la conoscenza delle regole del gioco. Al momento sto cercando di eliminarlo, 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 ( link ) e l'inferenza della carta avversaria.

    
risposta data 14.01.2014 - 18:56
fonte
3

Penso che dipenda dalle regole del gioco.

Ecco cosa ho capito dalla tua domanda:

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

Presupposti:

  • Con piena conoscenza delle carte dell'altro giocatore, il giocatore che sta per primo può decidere, per ciascuna di esse, se una carta vincerà il round o meno (il primo giocatore può giocare una carta vincita sicura)
  • Se le carte A e B vinceranno entrambe quando giocate per la prima volta in questo round, giocando A in questo round (e vincendo) e poi giocando B il round successivo significa che anche B vincerà (le carte non perderanno valore)
  • Con piena conoscenza delle carte dell'altro giocatore, il giocatore che va secondo può decidere se una carta può vincere questo round, ma perderebbe se giocasse prima il turno successivo (scegli la peggiore carta vincente)

Esempio di gioco che segue queste regole:

First player plays a card. Second player has to play a card of the same suite or lose. If suites match, highest card wins.

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 in modo che l'IA ricordi solo quali carte sono state giocate, rimuovendo a caso dalla lista ricordata una certa percentuale delle carte giocate (numero più basso = difficoltà superiore AI), ma non importanti come Aces o Kings. In questo modo, per esempio, l'IA saprà che è sicuro giocare una Regina di Cuori perché ricorderà che l'avversario non ha l'Asso o il Re, ma dovrà calcolare una probabilità se vuole poi giocare il 10, perché potrebbe non ricordare se il Jack è ancora in gioco.
Questo imita la capacità di attenzione umana.

TL; DR
Limita il grado di conoscenza dell'IA in modo che le sue decisioni non siano perfette, solo abbastanza buone.

    
risposta data 09.10.2013 - 14:42
fonte

Leggi altre domande sui tag