Come progetteresti un sistema di apprendimento automatico per giocare a Angry Birds?


22

Dopo aver giocato troppo ad Angry Birds, ho iniziato ad osservare le mie strategie. Si scopre che ho sviluppato un approccio molto specifico per ottenere 3 stelle su ogni livello.

Ciò mi ha fatto riflettere sulle sfide dello sviluppo di un sistema di apprendimento automatico in grado di riprodurre Angry Birds. Interagire con il gioco e lanciare gli uccelli è banale. Ma una domanda che ho avuto riguarda i "mattoni" del sistema.

I sistemi di apprendimento automatico sembrano funzionare con concetti semplici o comprensione del problema. Questo è spesso codificato come funzionalità come input. Quindi sembra che il sistema debba avere la capacità di comprendere alcuni concetti di alto livello per generare una strategia.

È vero? Inoltre, quali sono le sfide o le parti difficili dello sviluppo di un tale sistema?

EDIT # 1:

Ecco alcuni chiarimenti. Ottenere 3 stelle è un problema difficile perché devi massimizzare i punti. Questo può essere fatto in due modi non esclusivi: 1) Riducendo al minimo il numero di uccelli utilizzati (ottieni 10.000 punti per ogni uccello inutilizzato). 2) Massimizzata la distruzione di vetro, legno e altri oggetti. Ogni oggetto distrutto ti dà punti. È possibile distruggere più di 10.000 punti di oggetti con un singolo uccello.

Ecco una spiegazione in più sui "concetti di alto livello". Al fine di massimizzare i punti sopra descritti, è necessario utilizzare i poteri speciali di ciascun uccello. Quindi, ciò significa lanciare diversi uccelli con traiettorie diverse, a seconda del layout della mappa. E, mentre gioco, sviluppo una strategia che distrugge determinate aree con determinati uccelli in un certo ordine.

Sembra che senza una comprensione di come utilizzare ogni uccello per distruggere un'area specifica il sistema non potrebbe imparare a ottenere 3 stelle. Quindi, come gestisci e codifichi qualcosa del genere? Come assicurate che il sistema possa apprendere questi concetti di alto livello?

Risposte:


13

Supponendo che potresti ottenere i giusti hook nel software (o lavori con il tuo mock-up), alcune cose sarebbero facili qui, e altre meno. Questo è un problema piuttosto difficile, penso. Come accennato da Carlosdc, Reinforcement Learning (RL) è una possibile strada, anche se non sono sicuro che sia quella giusta.

Quando inizi, devi definire quali sono lo spazio del tuo stato , lo spazio d'azione , le dinamiche di transizione e la funzione di ricompensa . Gli spazi stato / azione possono essere continui o discreti e le dinamiche di transizione potrebbero essere date dal problema o modellate matematicamente. Infine, la funzione di ricompensa può essere assegnata a priori o può essere campionata (con o senza rumore).

Lo spazio d'azione è semplice: è semplicemente la direzione e il potere a cui spari l'uccello attuale. Per l'uomo, questo è un problema discreto (il mouse / touchscreen è un dispositivo di input digitale) - diciamo (per esempio) ci sono 32 direzioni possibili e 10 possibili potenze, dando 320 possibili azioni.

Anche la funzione di ricompensa è abbastanza facile da ottenere: l'obiettivo è quello di sbarazzarsi di tutti i maiali con il minor numero di uccelli (OK, quindi ci sono punti extra per altre cose, ma per ora ignoriamo). La cosa migliore sarebbe se conoscessimo l'effettiva funzione che genera punti dall'uccisione dei maiali (dipende dalla dimensione del maiale ecc. IIRC) - ma per un singolo livello questo potrebbe essere modellato perfettamente.

Lo spazio degli stati e le dinamiche di transizione sono molto più difficili. Per modellarlo correttamente, dovremmo conoscere l'intero layout della mappa e la fisica del gioco. La dinamica di transizione dice "Se sono nello stato x ed eseguo l'azione y , atterrerò nello stato z ". Puoi vedere la difficoltà di questo, in primo luogo poiché la complessa fisica del sistema significa che questo sarà estremamente difficile da modellare accuratamente, e in secondo luogo poiché ci sono così tanti possibili stati risultanti anche dopo il primo round (320), e questo è se supponiamo che non ci sia stocastica nel motore fisico, che da averlo giocato sospetto che ci sia. Penso che a questo punto ti arrenderesti e tornerai a casa.

Un altro approccio è quello di trattarlo come fa un essere umano all'inizio, ovvero tentativi ed errori. L'essere umano, almeno per cominciare, spara in modo praticamente casuale (anche se con un discreto potere prima di inviare gli uccelli verso i maiali, ma questo può essere facilmente codificato), fino a quando non viene trovata una serie di buone azioni. Questo è più simile al bandito multi-armatoambientazione. Le "armi" dei banditi qui sono le azioni possibili. L'algoritmo cerca di bilanciare l'esplorazione e lo sfruttamento, vale a dire esplorare lo spazio d'azione e sfruttare le buone azioni quando vengono trovate. Per questo non devi sapere nulla delle dinamiche sottostanti, devi solo conoscere azioni e ricompense. Per farlo completamente dovresti avere un braccio per ogni possibile azione in tutti i round (ad es. Hai 5 uccelli * 320 azioni = 320 ^ 5 = circa 10 ^ 12 azioni), quindi lo spazio d'azione è molto grande! Tuttavia potresti usare alcuni trucchi per migliorare questo se ne conosci un po 'sullo spazio degli stati. Ad esempio, potresti probabilmente escludere azioni che allontanano l'uccello dai maiali, scendono nel terreno o senza abbastanza potenza per raggiungerli. Inoltre, devi raggiungere il 5 ° uccello solo se non hai ucciso i maiali nei round precedenti, quindi una parte degli stati di azione non è effettivamente possibile. Questo in qualche modo ricorda l'approccio usato nell'algoritmo MoGo , che è un programma per computer per giocare a Go basato sui limiti di confidenza superiore applicati agli alberi , un approccio per risolvere il problema dei banditi multi-armati.


1
Bella risposta! Penso che lo spazio d'azione sia molto più ampio di 320 possibili azioni. Ogni pixel spazzato da un arco di forse .7 pollici (su iPad) da orizzontale a sinistra verso il basso genererà una traiettoria e un risultato diversi. L'iPad ha una risoluzione di 132 dpi, quindi potrebbero essere circa 8.000 i pixel possibili tra cui scegliere per il lancio. Non volevo soffermarmi sui dettagli, ma aumentare lo spazio d'azione a 8.000 cambia la risposta? Come puoi lavorare con uno spazio d'azione più ampio?
B Seven,

Cercare di simulare la dinamica è una domanda completamente diversa (e difficile). Penso che per questa discussione dovremmo presumere che abbiamo accesso al codice sorgente e che possiamo ottenere accuratamente le informazioni sullo stato. Inoltre, la funzione di ricompensa non è solo il numero di maiali che uccidi. Per ottenere 3 stelle su un livello, devi fare qualcosa di più difficile. Vedi modifica alla domanda.
B Seven,

@BSeven In linea di principio no, lo spazio d'azione più ampio non cambia la risposta, anche se potrebbe essere necessario eseguire più potature e utilizzare molta più potenza di calcolo ;-) Si noti tuttavia che questo è un candidato perfetto per l'elaborazione parallela. La questione delle stelle è complicata, poiché ciò implica che non esiste una semplice mappatura dalle uccisioni alle stelle, anche se ho pensato che tu avessi più stelle semplicemente varcando le soglie dei punti (di solito questo è fatto usando meno uccelli). Altrimenti, dovresti aumentare artificialmente la quantità di esplorazione per evitare di stabilirti su percorsi non ottimali troppo presto.
TCD,

8

Bella domanda!

Sembra che questa domanda riguardi la tecnica naturale per questo tipo di problema. Penso che la tecnica naturale per questo tipo di problema sia il rinforzo dell'apprendimento (RL). RL riguarda il modo in cui un agente dovrebbe intraprendere azioni in un ambiente in modo da massimizzare la nozione di ricompensa cumulativa. Forse l'algoritmo più noto per RL è Q-learning . Penso che questa sia la prima domanda in questo sito sull'apprendimento per rinforzo.

Penso che ciò che stai chiedendo sia vero se provi ad affrontarlo come classificazione / regressione, ma quelli non sembrano lo strumento giusto per questo problema. Questo è naturalmente un problema di RL in cui è necessario prendere in considerazione sequenze di azioni e risultati.



4

appena menzionato sopra in meta. c'è stato un uso pionieristico di algoritmi genetici da parte di Koza per risolvere il videogioco Pacman. costruì primitivi algoritmici che potevano percepire e agire. come ricordo, questi sono stati combinati in alberi simili a Lisp per creare algoritmi più grandi. il crossover con alberi di Lisp comporta la sostituzione o lo scambio di sottotitoli che rappresentano le espressioni dell'algoritmo. la funzione di successo è qualcosa come "punti mangiati" o "punti più fantasmi mangiati" o "tempo rimasto vivo". c'è ancora del lavoro in quest'area. c'è un riferimento koza in questo documento che segue. il tempo di formazione può essere molto lungo e la "convergenza" molto graduale per questo tipo di problemi.

Imparare a giocare a Pac-Man: un approccio evolutivo e basato sulle regole di Gallagher e Ryan

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.