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:
- "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à)
- "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.
- I punteggi calcolati nel passaggio precedente vengono sommati e impostati per essere il punteggio di una mossa.
- 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.
- "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:
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:
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 .