Caratteri AI di PacMan per la prossima direzione ottimale


9

Innanzitutto, questa è AI per PacMan e non i fantasmi .

Sto scrivendo uno sfondo animato Android che riproduce PacMan attorno alle tue icone. Mentre supporta i suggerimenti degli utenti tramite tocchi dello schermo, la maggior parte del gioco sarà giocata da un'intelligenza artificiale. Ho finito il 99% con tutta la programmazione del gioco, ma l'IA per PacMan stesso è ancora estremamente debole. Sto cercando aiuto per sviluppare una buona IA per determinare la prossima direzione di viaggio di PacMan.

Il mio piano iniziale era questo:

  1. Inizializza un contatore di punteggio per ogni direzione con un valore pari a zero.
  2. Inizia dalla posizione corrente e usa un BFS per attraversare verso l'esterno nelle quattro possibili direzioni iniziali aggiungendole alla coda.
  3. Rimuovi un elemento dalla coda, assicurati che non sia già stato "visto", assicurati che sia una posizione della scheda valida e aggiungi al punteggio delle direzioni iniziali corrispondente un valore per la cella corrente in base a:

    1. Ha un punto: più 10
    2. Ha un potenziamento: più 50
    3. Ha un frutto: più valore del frutto (varia in base al livello)
    4. Ha un fantasma spaventato: più 200
    5. Ha un fantasma che viaggia verso PacMan: sottrai 200
    6. Ha un fantasma che si allontana da PacMan: non fare nulla
    7. Ha un fantasma che viaggia perpendicolare: sottrai 50
    8. Moltiplica il valore della cella moltiplicato per un valore in base al numero di passi verso la cella, più passi dalla direzione iniziale, più il valore della cella si avvicina a zero.

    e accodare le tre possibili direzioni dalla cella corrente.

  4. Una volta che la coda è vuota, trova il punteggio più alto per ciascuna delle quattro direzioni iniziali possibili e sceglilo.

Suonava bene sulla carta, ma i fantasmi circondano PacMan estremamente rapidamente e si contrae avanti e indietro nelle stesse due o tre celle fino a quando uno non lo raggiunge. Anche la regolazione dei valori per la presenza fantasma non aiuta. Il mio punto BFS più vicino può arrivare almeno al livello 2 o 3 prima della fine del gioco.

Sto cercando codice, pensieri e / o collegamenti a risorse per sviluppare un'intelligenza artificiale adeguata, preferibilmente le prime due. Vorrei rilasciarlo sul mercato qualche volta questo fine settimana, quindi ho un po 'di fretta. Qualsiasi aiuto è molto apprezzato.


Cordiali saluti, questo è stato originariamente pubblicato su StackOverflow


Molto dipende dall'intelligenza artificiale fantasma. Se stai usando lo stesso identico algoritmo AI del gioco originale, potresti semplicemente far seguire a pac-man uno dei tanti modelli già scoperti, senza bisogno di IA tranne una tabella di ricerca. Se i fantasmi si stanno avvicinando rapidamente al tuo pac-man, hai considerato che il problema è che l'IA fantasma è troppo buona, piuttosto che l'IA pac-man è troppo debole?
Ian Schreiber,

@Ian L'intelligenza artificiale fantasma è esattamente come nel gioco, ma il layout del tabellone non è lo stesso. È solo un semplice layout a griglia che confina con il layout dell'icona (4x4, ecc.). Il PacMan attuale è il punto più vicino che non ha un fantasma tra se stesso e il punto. Andrà direttamente verso un fantasma fintanto che ci sono punti in mezzo. Forse ho solo bisogno di guardare qualche passo oltre il punto più vicino e determinare se questa è una buona direzione da prendere. Dal momento che l'intera direzione di ricerca della logica deve verificarsi ogni movimento cellulare, deve essere anche relativamente semplice e veloce.
Jake Wharton,

Cerca in Collaborative Diffusion, ti posso aiutare in qualche modo.
user712092

Risposte:


3

L'idea di Tandem dell'algoritmo di arrampicata in collina è buona. Un altro è: alcune variazioni su A * per vedere fino a che punto si può andare per vedere come è possibile ottenere il punteggio più alto nei prossimi N giri, dove N è sintonizzato per dare il risultato desiderato.

I valori di punteggio che dai possono essere pensati come "costo per muoversi" - sei praticamente sulla strada giusta, ma dovrai modificare i valori fino a ottenere il risultato desiderato.

In termini generali (non specifici di PacMan), è necessario allocare valori appropriati per

  • Ferito all'altro ragazzo.
  • Ha ucciso un altro ragazzo.
  • Raggiunto qualche altro obiettivo (diverso dall'uccisione)
  • Ferito.
  • Sono stato ucciso

e quindi cercare la mossa che porterà al punteggio massimo N giri in futuro. Puoi anche evitare mosse che portano a un punteggio inferiore a X (diciamo, il costo della morte) N si trasforma in futuro.

Dopo aver segnato tutte le mosse possibili, aggiunto bonus per quanto bene potrebbe rivelarsi in futuro e dedotto per quanto male potrebbe rivelarsi in futuro, quindi basta ordinare l'array e prendere la mossa migliore.

Facci sapere come va!



0

Stai per eseguire una ricerca.

  • Nodo / Stato: posizione Pacman, posizioni fantasma, posizioni pellet, punteggio totale, vite totali.
  • Transizione: Pacman si sposta in alto, in basso, a sinistra o a destra. Se Pacman si muove in un muro e cambia posizioni che vanno benissimo (potrebbe portare ad alcune strategie di stallo davvero interessanti). Se Pacman colpisce un fantasma, rimuovi una vita e sposta lui e i fantasmi verso l'origine.
  • Costo: se Pacman si sposta su una pallina 1, se si sposta su uno spazio vuoto 2.
    Il costo è un po 'complicato, poiché non è ovvio. La funzione di costo che ho descritto incoraggerà Pacman a finire il livello. Ciò preclude una possibile strategia e basta accamparsi in attesa che appaia un frutto bonus. Ma penso che vogliamo che AI ​​Pacman finisca il labirinto anche se produce un punteggio più basso.
  • Obiettivo: punteggio massimo raggiunto. Ciò significa che vengono consumati tutti i pellet, la frutta e il pellet.

A * o UCS sono fantastici quando si cerca un obiettivo. Il modo in cui ho descritto lo Stato / Transizione / Obiettivo troverà un grande percorso a piedi per Pacman che l'IA non ha bisogno di considerare specificamente di evitare la morte o di cercare frutta. Lo farà da solo. Dal momento che il gioco è completamente deterministico, è possibile "cercare" dalla posizione iniziale di Pacman e trovare il percorso di camminata ottimale fino alla fine (tutti i pellet consumati) come pre-calcolo e fare in modo che AI ​​Pacman percorra quel percorso, no al volo AI. Il principale svantaggio di questo approccio è che potrebbe facilmente sfuggire di mano nel tempo della CPU e nel consumo di memoria.

Invece di dedicare la CPU e la memoria all'esecuzione di una ricerca completa, è possibile eseguire una ricerca parziale al volo.

È ancora possibile utilizzare UCS / A * ma interrompere la ricerca dopo aver ispezionato i Nnodi e utilizzare solo il percorso migliore trovato finora. Questo approccio è utile in quanto è possibile sintonizzarsi Nper trovare l'equilibrio tra velocità e precisione.

Un altro metodo a cui sono particolarmente affezionato è la ricerca dell'albero di Monte-Carlo. Con questo metodo lasci che Pacman esegua una camminata casuale di Nmosse. Dopo ogni camminata casuale registri la sua mossa iniziale e il punteggio finale. Esegui Mpasseggiate casuali (o continua a farle fino a quando non sei fuori dal tempo o che mai). Scegli la mossa iniziale con la migliore media delle passeggiate casuali.

Queste ricerche parziali hanno un grave svantaggio. Se la ricerca con UCS e Pacman non segna affatto nei primi Nnodi controllati, si bloccherà e poiché tutte le mosse sono ugualmente sbagliate.
A * non avrebbe questo problema fintanto che l'euristica era attenta ad avvicinare Pacman a pellet non consumati.
MCTS potrebbe essere in grado di evitare questo problema se la camminata casuale è distorta per spostarsi verso pellet non consumati e la camminata casuale non si interrompe mai prima del punteggio (cioè la camminata casuale continua se Pacman ha punteggio 0.

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.