Come progettare un'IA per scusarmi?

0

Contesto : sto lavorando a una versione per console Windows del gioco da tavolo Spiacente. In Scusa, ogni giocatore ha quattro pedine. Basato su carte pescate, un giocatore muove le sue pedine attorno al tabellone. Queste mosse possono influenzare le pedine di altri giocatori, come battere di nuovo il pedone di un altro giocatore su Start.

Problema : insieme ai giocatori umani, voglio avere giocatori di computer. Quindi, sto cercando di scrivere un'IA semplice ma intelligente. Quando prende il suo turno, ogni giocatore di computer ottiene lo stato attuale della scacchiera e una serie di possibili nuovi stati di bordo tra cui scegliere, in base alla carta pescata e alle diverse mosse legali che possono essere fatte. Uno stato della scheda è una raccolta di oggetti Pawn, che conoscono la loro posizione sulla scacchiera.

Idee:

Idea n. 1: La mia prima idea AI è stata quella di convertire ciascuna scheda in un valore numerico e scegliere il valore più grande come la mossa migliore possibile. Per produrre un valore, ho dato a ciascun pedone del giocatore un valore e sommato i valori insieme. Il valore di una pedina aumenta man mano che si avvicina a casa. Il problema con questo approccio è che trascura la forza relativa di un avversario nel gioco. Ad esempio, se il giocatore ha due pedine, sceglierà sempre di muovere quello che avanza più vicino a casa. Tuttavia, più lontano si può urtare una pedina dell'avversario su Start, che potrebbe essere una scelta migliore.

Idea n. 2: La mia seconda idea era di sommare i delta dello stato della scheda. Nello specifico, per ogni nuovo stato della scacchiera, determina il suo punteggio tramite la posizione del pedone (una idea n. 1), ma fallo per tutti i giocatori. Quindi confronta questi valori con lo stato della scheda corrente per ottenere i delta e sommare i delta. Questo mi permetterebbe di calcolare i miglioramenti della posizione del giocatore e di perdere qualsiasi posizione dell'avversario. I problemi qui sono che non stiamo calcolando se stiamo guidando o se un avversario è in testa. Mi spiace che un avversario che sto battendo facilmente non valga la pena.

Domanda : Si tratta di un approccio ragionevole per una AI scusa che può essere migliorata, oppure esiste un modo migliore per farlo?

    
posta Craig 03.06.2017 - 04:19
fonte

1 risposta

4

Hai un buon inizio. Ogni IA deve essere in grado di capire il "valore" della scheda corrente. Ma spesso non è abbastanza. Questo perché calcolare una buona euristica "value" potrebbe essere complicata e spesso lo stato attuale della scheda non ti darà un'idea completa dei possibili sviluppi futuri.

È qui che esistono algoritmi che cercano di prevedere il futuro. Nel tuo caso, semplice algoritmo ExpectiMinMax (che è l'estensione di classico MinMax con probabilità) dovrebbe essere sufficiente. Detto semplicemente, questo algoritmo cerca di calcolare il maggior numero possibile di stati futuri e capire quale sia il miglior movimento corrente basato su tali informazioni.

Nel tuo caso, i nodi casuali possono essere facilmente calcolati da quali carte rimangono da raccogliere e da tutte le opzioni di ogni giocatore per ogni carta. Dato che lo spazio di ricerca è relativamente piccolo, potresti probabilmente cercare una grande quantità di giochi per ogni turno.

    
risposta data 03.06.2017 - 06:24
fonte

Leggi altre domande sui tag