AGGIORNAMENTO 2018-07-26: Questo è tutto! Ci stiamo avvicinando al punto in cui questo tipo di gioco sarà risolvibile! Utilizzando OpenAI e basato sul gioco DotA 2, una squadra potrebbe creare un'intelligenza artificiale che può battere i giocatori semi-professionisti in una partita 5v5 . Se conosci DotA 2, sai che questo gioco è abbastanza simile ai giochi simili a Diablo in termini di meccanica, ma si potrebbe sostenere che è ancora più complicato a causa del gioco di squadra.
Come previsto, ciò è stato ottenuto grazie agli ultimi progressi nell'apprendimento di rinforzo con l'apprendimento profondo e nell'utilizzo di framework di gioco aperti come OpenAI che facilitano lo sviluppo di un'intelligenza artificiale poiché si ottiene un'API ordinata e anche perché è possibile accelerare il gioco (l'IA ha giocato l'equivalente di 180 anni di gioco contro se stesso ogni giorno!).
Il 5 agosto 2018 (tra 10 giorni!) , Si prevede di mettere questa IA contro i migliori giocatori DotA 2. Se questo funziona, aspettati una grande rivoluzione, forse non mediatizzata come la risoluzione del gioco Go, ma sarà comunque un'enorme pietra miliare per i giochi AI!
AGGIORNAMENTO 2017-01: Il campo si sta muovendo molto velocemente dal successo di AlphaGo e ci sono nuovi framework per facilitare lo sviluppo di algoritmi di machine learning sui giochi quasi ogni mese. Ecco un elenco degli ultimi che ho trovato:
- OpenAI's Universe : una piattaforma per giocare praticamente a qualsiasi gioco usando l'apprendimento automatico . L'API è in Python ed esegue i giochi dietro un ambiente desktop remoto VNC, quindi può catturare le immagini di qualsiasi gioco! Probabilmente puoi usare Universo per giocare a Diablo II attraverso un algoritmo di apprendimento automatico!
- Palestra di OpenAI : simile all'universo ma mirata specificamente agli algoritmi di apprendimento del rinforzo (quindi è una specie di generalizzazione del framework utilizzato da AlphaGo ma per molti più giochi). C'è un corso su Udemy che copre l'applicazione dell'apprendimento automatico a giochi come breakout o Doom usando OpenAI Gym.
- TorchCraft : un ponte tra Torch (framework di apprendimento automatico) e StarCraft: Brood War.
- pyGTA5 : un progetto per costruire auto a guida autonoma in GTA5 usando solo schermate (con molti video online ).
Tempi molto eccitanti!
AGGIORNAMENTO IMPORTANTE (2016-06): Come notato da OP, questo problema di formazione di reti artificiali per giocare utilizzando solo input visivi è ora affrontato da diverse istituzioni serie, con risultati abbastanza promettenti, come DeepMind Deep-Qlearning-Network (DQN ) .
E ora, se vuoi affrontare la sfida di livello successivo, puoi utilizzare una delle varie piattaforme di sviluppo di giochi di visione AI come ViZDoom , una piattaforma altamente ottimizzata (7000 fps) per addestrare le reti a giocare a Doom usando solo input visivi :
ViZDoom consente di sviluppare bot AI che riproducono Doom utilizzando solo le informazioni visive (il buffer dello schermo). È principalmente destinato alla ricerca nell'apprendimento visivo automatico e in particolare all'apprendimento approfondito del rinforzo. ViZDoom si basa su ZDoom per fornire le meccaniche di gioco.
E i risultati sono piuttosto sorprendenti, guarda i video sulla loro pagina web e il bel tutorial (in Python) qui!
Esiste anche un progetto simile per Quake 3 Arena, chiamato Quagents , che fornisce anche un facile accesso API ai dati di gioco sottostanti, ma è possibile eliminarli e utilizzare solo schermate e API solo per controllare il proprio agente.
Perché una tale piattaforma è utile se utilizziamo solo schermate? Anche se non accedi ai dati di gioco sottostanti, tale piattaforma fornisce:
- alte prestazioniimplementazione di giochi (puoi generare più dati / giochi / generazioni di apprendimento con meno tempo in modo che i tuoi algoritmi di apprendimento possano convergere più velocemente!).
- un'API semplice e reattiva per controllare i tuoi agenti (ad esempio, se provi a utilizzare input umani per controllare un gioco, alcuni dei tuoi comandi potrebbero andare persi, quindi ti occuperesti anche dell'affidabilità dei tuoi output ...).
- facile configurazione di scenari personalizzati .
- rendering personalizzabile (può essere utile per "semplificare" le immagini ottenute per facilitare l'elaborazione)
- riproduzione sincronizzata ("turn-by-turn") (quindi all'inizio non è necessario che l'algoritmo funzioni in tempo reale, il che è una riduzione enorme della complessità).
- funzionalità aggiuntive come compatibilità con la piattaforma incrociata, retrocompatibilità (non rischi più che il tuo bot non funzioni più con il gioco in caso di un nuovo aggiornamento del gioco), ecc.
Riassumendo, la cosa grandiosa di queste piattaforme è che alleggeriscono gran parte dei precedenti problemi tecnici che dovevi affrontare (come manipolare gli input di gioco, come impostare scenari, ecc.) In modo che tu abbia solo a che fare con l'algoritmo di apprendimento si.
Quindi, mettiti al lavoro e rendici il miglior bot visivo AI di sempre;)
Vecchio post che descrive i problemi tecnici dello sviluppo di un'IA che si basa solo su input visivi:
Contrariamente ad alcuni dei miei colleghi di cui sopra, non penso che questo problema sia intrattabile. Ma è sicuramente difficile!
Il primo problema come indicato sopra è quello della rappresentazione dello stato del gioco : non è possibile rappresentare lo stato completo con una sola immagine, è necessario mantenere un qualche tipo di memorizzazione(salute ma anche oggetti equipaggiati e oggetti disponibili da usare, missioni e obiettivi, ecc.). Per recuperare tali informazioni hai due modi: o accedendo direttamente ai dati di gioco, che è il più affidabile e facile; oppure puoi creare una rappresentazione astratta di queste informazioni implementando alcune semplici procedure (apri l'inventario, fai uno screenshot, estrai i dati). Ovviamente, l'estrazione di dati da uno screenshot ti costringerà a mettere in una procedura supervisionata (che definisci completamente) o senza supervisione (tramite un algoritmo di apprendimento automatico, ma poi aumenterà notevolmente la complessità ...). Per l'apprendimento automatico senza supervisione, dovrai utilizzare un tipo di algoritmi abbastanza recente chiamato algoritmi di apprendimento strutturale (che apprendono la struttura dei dati piuttosto che come classificarli o prevedere un valore).http://techtalks.tv/talks/54422/
Quindi, un altro problema è che anche quando hai recuperato tutti i dati di cui hai bisogno, il gioco è solo parzialmente osservabile . Quindi devi iniettare un modello astratto del mondo e dargli da mangiare informazioni elaborate dal gioco, ad esempio la posizione del tuo avatar, ma anche la posizione di oggetti missione, obiettivi e nemici fuori dallo schermo. Per questo, potresti forse esaminare i filtri per particelle di miscela di Vermaak 2003.
Inoltre, devi avere un agente autonomo , con obiettivi generati dinamicamente. Un'architettura ben nota che puoi provare è l'agente BDI, ma probabilmente dovrai modificarla affinché questa architettura funzioni nel tuo caso pratico. In alternativa, c'è anche la rete di Petri ricorsiva, che probabilmente è possibile combinare con tutti i tipi di variazioni delle reti di Petri per ottenere ciò che si desidera in quanto è un quadro molto ben studiato e flessibile, con ottime procedure di formalizzazione e prove.
E alla fine, anche se fai tutto quanto sopra, dovrai trovare un modo per emulare il gioco velocità accelerata (usare un video può essere bello, ma il problema è che il tuo algoritmo sarà in grado di guardare solo senza controllo e di essere in grado provare per se stesso è molto importante per l'apprendimento). In effetti, è noto che l'attuale algoritmo all'avanguardia richiede molto più tempo per apprendere la stessa cosa che un essere umano può imparare (anche di più con l'apprendimento per rinforzo), quindi se non può accelerare il processo ( cioè, se non riesci ad accelerare il tempo di gioco), il tuo algoritmo non converge nemmeno in una sola vita ...
Per concludere, quello che vuoi ottenere qui è al limite (e forse un po 'oltre) degli attuali algoritmi all'avanguardia . Penso che possa essere possibile, ma anche se lo è, passerai molto tempo , perché questo non è un problema teorico ma un problema pratico che stai affrontando qui, e quindi devi implementare e combinare molto di diversi approcci AI per risolverlo.
Diversi decenni di ricerca con un intero team che ci sta lavorando potrebbero non essere sufficienti, quindi se sei solo e ci lavori a tempo parziale (dato che probabilmente hai un lavoro da vivere) potresti trascorrere un'intera vita senza raggiungere alcun luogo vicino una soluzione funzionante.
Quindi il mio consiglio più importante qui sarebbe di abbassare le tue aspettative e provare a ridurre la complessitàdel tuo problema utilizzando tutte le informazioni che puoi ed evita il più possibile affidandoti a schermate (ad esempio, prova a collegarti direttamente al gioco, cerca l'iniezione di DLL) e semplifica alcuni problemi implementando procedure supervisionate, non lasciare che il tuo l'algoritmo impara tutto (ad esempio, elimina il più possibile l'elaborazione delle immagini per ora e fa affidamento sulle informazioni di gioco interne, in seguito se l'algoritmo funziona bene, puoi sostituire alcune parti del tuo programma di intelligenza artificiale con l'elaborazione delle immagini, raggiungendo così il tuo obiettivo, ad esempio, se riesci a far funzionare qualcosa piuttosto bene, puoi provare a complicare il problema e sostituire le procedure supervisionate e i dati dei giochi di memoria con algoritmi di apprendimento automatico non controllati su schermate).
Buona fortuna e, se funziona, assicurati di pubblicare un articolo, puoi sicuramente diventare famoso per aver risolto un problema così difficile e pratico!