Un approccio di punteggio agli avversari informatici che necessita di un bilanciamento


16

Questa domanda riguarda un approccio agli avversari informatici che ho creato e che sono attualmente in uso o che si prevede di utilizzare in diversi giochi per computer.

sfondo

L'anno scorso, quando cercavo di migliorare un avversario informatico per un gioco chiamato "Minesweeper Flags" (breve descrizione: una versione multiplayer a turni di Minesweeper in cui devi prendere più mine rispetto al tuo avversario) , ho fortemente cambiato il modo in cui i miei algoritmi funzionavano . Invece di usare un approccio come if-else-if-else, sto usando una serie di "marcatori" con pesi specifici per determinare quale sia la mossa migliore.

Potresti pensare che per un gioco come Minesweeper Flags, si tratta solo di fare mosse che ti danno la più alta probabilità di prendere una mina, ma non è così semplice. La mossa che il computer farà di solito dipende da diverse funzionalità per quella mossa specifica nello stato di gioco corrente. Esempi di funzionalità:

  • Qual è la probabilità che questa mossa vinca una mina?
  • Qual è la probabilità di rivelare qualcosa al mio avversario qui?

Descrizione del sistema

Il sistema funziona sostanzialmente in questo modo:

  1. "Pre-marcatori": alcune pre-analisi vengono eseguite per lo stato di gioco corrente (in termini di bandiere dei dragamine, di solito si tratta di: calcolo di tutte le probabilità)
  2. "Marcatori": un set di marcatori ordinari viene chiesto di determinare il punteggio per ogni possibile mossa, ogni marcatore applica i punteggi secondo i propri criteri. I marcatori possono verificare i risultati della pre-analisi effettuata.
  3. I punteggi calcolati nel passaggio precedente vengono sommati e impostati per essere il punteggio di una mossa.
  4. Le mosse sono ordinate in base al loro punteggio e classificate in modo che tutte le mosse con lo stesso punteggio ottengano lo stesso rango.
  5. "Post-marcatori": il risultato di cui sopra può essere inviato a "Post-marcatori" che hanno la possibilità di modificare i punteggi di tutti i campi nel modo che preferiscono, secondo le regole del post-segnapunti.

Quando combini un gruppo di pre-marcatori, marcatori (con i loro pesi) e post-marcatori, diventa quella che chiamo configurazione del punteggio .

Risultato di esempio

Questo è un esempio di punteggi applicati alle bandiere del dragamine. Questa è la mappa che è stata segnata:

Mappa delle bandiere del dragamine che è stata segnata

E questo è l'output di una configurazione del punteggio reale. Sta mostrando il rango delle mosse possibili, dove 1 è il rango migliore ed è stato evidenziato in bianco:

Esempio di output dell'approccio di punteggio

Grazie alla scrittura di codice altamente flessibile, questo approccio agli AI può essere inserito anche in altri giochi.

Vantaggi e svantaggi

Di seguito sono riportati alcuni vantaggi e svantaggi di questo sistema che posso pensare a me stesso

vantaggi

  • È molto semplice creare molte configurazioni diverse per gli AI.
  • È possibile utilizzare con algoritmi genetici: ogni marcatore ha un peso associato, il peso può diventare il gene.
  • Utilizzando alcuni strumenti, è possibile verificare perché è stata effettuata una mossa specifica e quali marcatori sono stati i principali responsabili di quella mossa
  • Utilizzando gli strumenti, è possibile creare una mappa del punteggio / grado complessivo delle mosse possibili (come lo screenshot sopra)
  • Applicando i punteggi al modo in cui l'umano gioca, è possibile creare un "#AI_Mirror" che cerca di fare mosse che pensa che l'umano farebbe

svantaggi

  • Può essere estremamente difficile regolare la configurazione del punteggio "correttamente", per far funzionare l'IA nel miglior modo possibile.

Domande

  • Il sistema che ho costruito qui è ampiamente conosciuto nel mondo dell'IA? Come si chiamerebbe in termini reali di AI?

  • Questo approccio ha senso o esiste un approccio diverso che consiglieresti?

  • Quali sono i modi per rendere più semplice il processo di modifica della configurazione di un punteggio?

Per quanto riguarda l'ultima domanda, sono consapevole della possibilità di utilizzare algoritmi genetici, sono anche leggermente consapevole della SARSA (e penso che i miei marcatori assomiglino alla descrizione di quel sito di caratteristiche con pesi, ma dalla mia comprensione non è esattamente quello che ho creato Qui). Penso che un problema con SARSA sia che non conosci la ricompensa fino alla fine del gioco, la mossa migliore è spesso una mossa che non dà affatto una ricompensa (una miniera). Le tue attuali possibilità di vincita dipendono sia dal punteggio attuale (quante mine tu e dal tuo avversario avete preso) sia dall'aspetto della mappa attuale.


Questa domanda è stata originariamente pubblicata su un sito di Intelligenza Artificiale ormai defunto .
Il codice (Java) utilizzato per questo approccio è stato ora pubblicato in Code Review .

Risposte:


7

A un tratto è un sistema esperto (come la logica fuzzy). Dato che non stai eseguendo un algoritmo per eseguire feedback sui parametri decisionali basati sull'output, non sta realmente imparando. Tuttavia, l'esecuzione del feedback non è l'unico indicatore se un alogirthm è AI. Si potrebbe sostenere che se agisce in un modo che sembra intelligente, questo è tutto ciò che conta, specialmente quando il gioco è giocato da un avversario umano.

Il tipo di algoritmo che hai specificato è in realtà un'equazione parametrizzata, il tipo che troverai nei calcoli dell'assicurazione. Dopo ogni mossa, lo spazio di input cambia ma l'algoritmo non ha bisogno di memoria dello stato precedente, quindi tratta ogni mossa come una nuova scheda separata.

Utilizzando algoritmi genetici

Esistono due opzioni chiare per gli algoritmi genetici:

  • Usa i parametri per il genoma (come hai suggerito). Ottimizzerai le regole che hai ma ti rimane ancora un sistema esperto.
  • Usa Learning Classifier System (LCS) per scegliere le regole per te. Un LCS è un tipo di algoritmo genetico in cui si codificano le regole e i parametri. Richiedono più tempo per convergere e sono sensibili alla funzione di fitness. Penso che il modo di giocare che ne risulta potrebbe essere più interessante per questo.

Ricottura simulata

Un altro modo per risolvere il problema è utilizzare Simulated Annealing (SA). Il tuo problema è uno spazio di input limitato e puoi scrivere analiticamente una funzione che trova il quadrato migliore da scegliere in un determinato scenario. L'uso della ricottura simulata troverà un ottimo globale per i tuoi parametri.

Nel renderlo troppo bello

So che vuoi che l'algoritmo sia il migliore che possa essere, ma non dimenticare che un umano ci sta giocando contro. C'è un modo tatticamente perfetto per giocare a questo tipo di giochi deterministici e se il giocatore dell'IA lo prende, sarebbe solo pura fortuna, il che significa che il giocatore vince.


La tua risposta mi ha dato molto da studiare, grazie mille! Anche se non sono così sicuro di essere d'accordo con la classificazione di questo particolare gioco come "deterministico" ..
Simon Forsberg

Il motivo per cui dico che è deterministico è che il numero di possibilità per ogni dato gioco è limitato e sebbene il giocatore umano possa sembrare che faccia scelte casuali, lo sta facendo in uno spazio così strettamente definito che è deterministico. Una regola empirica è che se stai usando un generatore di numeri casuali (o un fattore esterno che non controlli) ovunque, è stocastico. Altrimenti, è deterministico.
Dott. Rob Lang,

Bene, Minesweeper è stocastico, direi, poiché non conosci il contenuto di un campo fino a quando non hai fatto una mossa per rivelarlo.
Simon Forsberg,

1
IMHO che non lo rende stocastico. Sarebbe stocastico se: date le stesse condizioni iniziali (la scheda nascosta) il risultato potesse essere diverso ogni volta che si fa clic sul quadrato.
Dott. Rob Lang,

2
Stocastico / deterministico e completamente osservabile / parzialmente osservabile sono proprietà ortogonali rigorosamente diverse. Per definizione (diciamo, Russel / Norvig "Se il prossimo stato dell'ambiente è completamente determinato dallo stato corrente e dall'azione eseguita dall'agente ...") Il dragamine è deterministico, sebbene non sia del tutto osservabile.
Peteris,

0

Sì, la tecnica di assegnazione dei punteggi in base a determinati aspetti della posizione è standard nello scrivere AI per giocare. Ad esempio, quasi tutti i programmi di scacchi funzionano calcolando le posizioni in modo più significativo in base ai pezzi disponibili, con bonus più piccoli in base alle loro posizioni (ad esempio, i pedoni si proteggono a vicenda). Quindi tentano di calcolare la migliore mossa disponibile usando un algoritmo di ricerca contraddittoria come alfa-beta.

La ricerca dell'avversario potrebbe essere difficile qui a causa del grande fattore di ramificazione - in qualsiasi posizione, le mosse legali sono di contrassegnare o rivelare qualsiasi quadrato sconosciuto. D'altro canto, è possibile ridurre l'euristica del fattore di ramificazione. Ad esempio, segnare o svelare un quadrato di cui non sai nulla è molto raramente la mossa migliore. Al contrario, se si conoscono le posizioni di alcune miniere non contrassegnate, contrassegnarne una sarà presumibilmente la mossa migliore, il più delle volte. Anche il mantenimento di una tabella di trasposizione sarebbe probabilmente di aiuto.

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.