29
POLITECNICO DI TORINO Collegio di Ingegneria Informatica Corso di Laurea Magistrale in Ingegneria Informatica Tesi di Laurea Magistrale Progettazione e realizzazione di giocatori artificiali per videogiochi strategici in tempo reale Relatore Prof. Giovanni Squillero Candidato Dario Prano Luglio 2016

POLITECNICO DI TORINO di Laurea Magistrale Progettazione e realizzazione di giocatori artificiali per videogiochi strategici in tempo reale Relatore Prof. Giovanni Squillero Candidato

  • Upload
    vonhi

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

POLITECNICO DI TORINOCollegio di Ingegneria Informatica

Corso di Laurea Magistrale in Ingegneria Informatica

Tesi di Laurea Magistrale

Progettazione e realizzazione di giocatoriartificiali per videogiochi strategici in tempo

reale

Relatore

Prof. Giovanni Squillero

Candidato

Dario Prano

Luglio 2016

1. Introduzione

Lo sviluppo di AI per un gioco strategico in tempo reale (in inglese real time strategy RTS) èun compito difficile dovuto al fatto che un giocatore artificiale deve prendere molte decisionee intraprendere molte azioni in un mondo di gioco complesso e in continua evoluzione. Gliumani non hanno grossi problemi quando devono affrontare tale complessità mentre è unostacolo abbastanza alto per i computer. L'adattamento alla strategia avversaria è una dellecose che un giocatore deve fare durante il gioco. Il questo elaborato è presentata unasoluzione al problema dell'adattamento. L'idea di base è di progettare un sistema cheattraverso delle regole riesca a creare una strategia vestitino per l'avversario. Come gioco sucui è stato sviluppata la soluzione è StarCraft e precisamente per la razza Zerg.

Nell'elaborato inizialmente sarà fatta una panoramica sui giochi RTS e il particolare sul giocoStarcraft. Verrà analizzata la differenza tra un classico gioco strategico, come il gioco degliscacchi e gli RTS. Successivamente saranno introdotte le basi delle teorie dei giochi.

Nella progettazione della soluzione si è seguita l'idea dei sistemi esperti, quindi per avere unacomprensione migliore della soluzione, verrà discusso l'argomento dei sistemi esperti.

Un giocatore artificiale viene anche chiamato bot. Un bot in generale è un programma cheinteragisci con un altro programma attraverso gli stessi canali utilizzati dagli umani. Quindiverrà fatta una panoramica dei bot esistenti per il gioco StarCraft, con un approfondimento sulbot OpprimoBot che è stato usato come framework per implementare la soluzione.

Infine sarà illustra la soluzione adottata e l'architettura del bot che la implementa.

1

2. StarCraft Gioco RTS

I videogiochi strategici in tempo reale (detti anche RTS, Real Time Strategy) i giocatoridevono gestire unità, strutture di produzione e risorse in modo tale da riuscire a prevaleresull'avversario. Alcuni RTS famosi sono Age of Empire, Warcraft e Starcraft. Quest'ultimo èdiventato molto popolare tra la comunità di ricercatori perché è considerato un buon banco diprova per tecniche di Machine Learning.

2.1 Caratteristiche gioco RTS

Un match di un RTS si svolge su una mappa che può essere, a seconda dell'ambientazione delgioco, una regione geografica, un quadrante di spazio, e così via. Il giocatore controlla uncerto numero di unità, ossia di personaggi e mezzi in grado di spostarsi sulla mappa, e uncerto numero di edifici. La visibilità che il giocatore ha della mappa complessiva ègeneralmente limitata al campo visivo delle sue unità dovuta alla “nebbia di guerra”. Lanebbia di guerra (in inglese fog of war) indica un velo oscuro che nasconde ai giocatori imovimenti avversari e le porzioni della mappa di gioco sfuggono al campo visivo delleproprie unità. La mappa appare inizialmente del tutto oscurata, fatta eccezione per la zona checade nel campo visivo di una o più unità del giocatore, lo spostamento di unità svelerà nuovearee della mappa. Tuttavia quando una zona esplorata si trova a non essere più inclusa nelcampo visivo di una unità del giocatore, essa viene coperta dalla “nebbia di guerra”, che non èopaca come la nebbia iniziale e consente di vedere il territorio, ma non le unità nemiche inesso eventualmente presenti.

2

Figura x.y Nebbia di guerra

La nebbia di guerra sostanzialmente “congela” l'immagine di quella porzione di mappa; inaltre parole, il giocatore continuerà a vedere quella porzione di mappa così come essaappariva nell'ultimo istante in cui essa si trovava nel campo visivo di una unità del giocatore,per lo meno relativamente agli elementi statici (giacimenti di risorse, fiumi, laghi, edifici,ecc..), solitamente infatti le unità mobili non vengono mostrate e tutti gli elementi staticivengono mostrati così come essi sono apparsi all'ultimo "osservatore" che si sia trovato nellazona; eventuali mutamenti successivi (per esempio l'esaurimento di un giacimento di risorse,la costruzione di nuovi edifici o la distruzione di quelli esistenti, ecc..) non verranno mostratise non quando una unità del giocatore ritornerà nell'area.

Sulla mappa sono generalmente disponibili un certo numero di risorse diverse (ad esempiogas e cristalli in StarCraft) che alcune unità sono in grado di raccogliere migliorando lapropria economia. Le unità che raccolgono risorse in genere sono unità civili, ovvero nonsono in grado di combattere o possono farlo solo in modo molto limitato. L'acquisizione dirisorse è quindi uno degli elementi fondamentali degli RTS. Un giocatore esperto cercherà diimpossessarsi di più risorse possibili in modo da espandersi e potenziare il proprio esercitoprima dell'avversario. Questo non risulta sufficiente per assicurare la vittoria.

Le risorse raccolte possono essere utilizzare per tre principali motivi:

• per costruire nuovi edifici; questa attività in genere richiede l'impiego di unità civili;

• per "addestrare" (creare) nuove unità; questa attività in genere richiede la disponibilitàdi edifici di tipo specifico (per esempio caserme, fabbriche di carri armati, case);

• per "ricercare" (sviluppare) nuove tecnologie; questa attività in genere richiede ladisponibilità di edifici specifici (per esempio biblioteche, università). Inoltre, letecnologie sono generalmente legate da un insieme di dipendenze noto come alberotecnologico: in altre parole, lo sviluppo di una tecnologia può avere come prerequisitoil precedente sviluppo di una o più altre tecnologie. L'acquisizione di nuove tecnologieporta vantaggi di diversi generi: maggiore efficienza nella raccolta di risorse,maggiore potenza delle unità militari, disponibilità di nuovi tipi di edifici e di unità ecosì via.

Un giocatore può perseguire almeno tre linee di sviluppo, interdipendenti ma distinte:

• militare (produzione di nuove e più potenti unità militari)

• economica(aumento del ritmo di raccolta risorse)

• tecnologica (ricerca di tecnologie).

I progressi in tutte e tre le direzioni costano risorse, costringendo quindi il giocatore a sceltestrategiche nell'uso delle risorse acquisite. I diversi approcci in questo senso corrispondono a"pattern strategici" ai quali spesso gli appassionati del genere hanno persino attribuito deinomi specifici. Per esempio, la strategia del rushing consiste nello spendere la maggior partedelle risorse, fin dall'inizio della partita, nell'addestramento di unità militari, per attaccaresubito gli avversari, cercando di trovarli impreparati. L'approccio opposto, detto boomingconsiste nel concentrare inizialmente tutte le risorse nello sviluppo economico (creazione dinuove unità civili per potenziare la raccolta risorse); quando il flusso di ingresso delle risorseè sufficientemente, sarà possibile recuperare rapidamente anche rispetto alle altre linee disviluppo, a patto naturalmente che il booming non sia ostacolato, per esempio, da azioni didisturbo di un avversario che ha scelto la via del rushing.

3

La maggior parte degli RTS sono giochi "simmetrici", nel senso che gli avversari che ilgiocatore affronta (siano essi controllati dal computer o da altri giocatori) agiscono secondo lestesse regole fondamentali (raccolgono risorse, costruiscono una base, addestrano unitàeccetera).

Anche nei giochi simmetrici, è invece piuttosto comune che il giocatore possa scegliere fra uncerto numero di civiltà, razze, o fazioni diverse, caratterizzate da diversi tipi di unità, edifici,tecnologie e così via. In questo caso, un elemento a cui si attribuisce notevole importanzanella valutazione della progettazione di un RTS è l'equilibrio fra le diverse razze. Giochicome StarCraft devono gran parte del loro fascino al fatto di contrapporre razzecompletamente diverse fra loro le cui caratteristiche, tuttavia, si controbilancianoperfettamente. Questo elemento è ovviamente molto gradito ai giocatori poiché garantisce unamaggiore varietà al gioco.

Lo scopo di un individuo di un gioco RTS è quello di riuscire a distruggere tutti gli edificidell'avversario impartendo degli ordini ad unità e edifici.

Uno dei requisiti fondamentali per poter ottenere la vittoria è esplorare la mappa per scoprirela posizione, le unità e gli edifici del nemico in modo da poter costruire una strategia chepossa prevalere in battaglia. É realizzabile effettuare partite con più giocatori, dove è possibileavere giocatori alleati. In questo contesto i giocatori alleati devono adottare una strategiacooperativa, che rappresenta uno dei fattori più critici.

Nella progettazione, per semplicità, si sono considerati solo match di due giocatori.

2.2 Confronto RTS e giochi classici

Un gioco RTS presenta delle caratteristiche un po' diverse dai classici giochi strategici.Prendendo come riferimento un gioco classico come scacchi si evincono le seguentidifferenze:

• il gioco non è suddiviso in “turni” come negli scacchi, ma il gioco fluisce in modocontinuo, i giocatori possono agire in qualsiasi istante anche simultaneamente. Questoimplica che il fattore tempo non ha un aspetto secondario, infatti i giocatori devonoscegliere e adattare la propria strategia prima che lo stato del gioco cambi.

• Il gioco degli scacchi è un gioco ad informazione perfetta, cioè quando un giocatoredeve fare una mossa conosce esattamente la situazione attuale e tutte le mosseprecedenti che hanno portato a quella situazione. I giochi RTS rientrano nellacategoria dei giochi ad informazione imperfetta perché non si ha lo storico delle mossecomplete, infatti non si è a conoscenza delle mosse dell'avversario.

• Il gioco degli scacchi è un gioco ad informazione completa, un individuo è aconoscenza tutte le informazioni “sull'ambiente” di gioco, conosce la posizione e ilnumero di pezzi dell'avversario. Invece nei giochi RTS un individuo ha una parzialeconoscenza “dell'ambiente” perché è presente la “nebbia di guerra”. Questo farientrare gli RTS nei giochi ad informazione incompleta.

• I giochi RTS non sono deterministici, alcuni azioni possono non andare a buon fine.Per esempio un edificio in costruzione può essere distrutto, in questo modo la “mossa”non viene completata. Questo differisce dal gioco degli scacchi che invece quando ungiocatore effettua una mossa non c'è nessuna possibilità che fallisca.

4

• Lo spazio degli stati negli RTS ha ordini di grandezza molto superiore a quello degliscacchi (intorno 1050). Anche il numero di azioni che si può applicare ad ogni stato èmolto grande.

• In un gioco RTS sono presenti tanti tipi diversi di unità diversamente dagli scacchi.

• Il numero di unità presenti è variabile a differenza degli scacchi che è fisso.

Tutte queste differenze fanno si che trovare una strategia vincente non è per niente banale.

2.3 StarCraft

Starcraft è stato realizzato dalla Blizzard Entertainment nel 1998. Ambientato tra il XXV e ilXXVI secolo, il gioco ruota attorno alle sorti di tre razze che si combattono per il dominio diun lontano settore della Via Lattea: i Terrestri (Terran in originale), discendenti da umaniesiliati secoli prima dalla Terra, con la capacità di adattarsi ad ogni situazione; gli Zerg, unarazza di insettoidi mutanti all'inseguimento della perfezione genetica e ossessionatidall'assimilazione con le altre razze; e i Protoss, una antica razza umanoide con tecnologieavanzate e abilità psichiche.

2.3.1 Zerg

Gli Zerg sono una razza di creature dalle sembianze xenomorfi (specie parassitoideextraterrestre). L'intera popolazione viene chiamata Sciame. Lo sciame è un'entità nomade cheha lasciato una scia di morte e distruzione nell'universo.

Lo sciame era in origine organizzato in covate, ognuna governata da un Cerebrato, ovvero iltramite fra le creature Zerg e l'Unica Mente: un'entità senziente unica che è in grado così dicontrollare tutte le creature Zerg (una specie di coscienza collettiva). L'Unica Mente e iCerebrati sono gli unici Zerg con piena consapevolezza. Le genie minori invece, possiedonosolo le facoltà mentali sufficienti per svolgere i loro compiti. Le comunicazioni avvengonocon una sorta di legame psichico condiviso da tutti gli Zerg.

Gli Zerg non fanno uso di tecnologia, non in senso stretto, poiché tutte le loro unità e strutturesono biologiche. Ogni necessità dello sciame viene raggiunta attraverso la manipolazionegenetica delle creature che ve ne fanno parte. Ogni creatura Zerg è specializzata in unruolo/compito. Anche gli 'edifici' sono in effetti creature viventi. Gli Zerg sono in grado disopravvivere nello spazio aperto e in condizioni ambientali critiche.

In battaglia, sono in grado di sviluppare numerose strategie insidiose ed efficaci, colpendopreferibilmente il nemico nei suoi punti tatticamente deboli ed adottando spesso e volentieristrategie di logoramento psicologico.

Le armi offensive Zerg sono di norma costituite da lame e proiettili ossei, getti di acidialtamente corrosivi, sostanze esplosive altamente instabili, nonché un ampio numero disimbionti e parassiti di varia natura ed effetto, in grado di provocare i più disparati effetti sulnemico. Sul campo di battaglia gli Zerg preferiscono impiegare un ingente numero di piccolecreature dal basso costo ed efficacia ma molto rapide negli spostamenti e facili e veloci darimpiazzare. Sono inoltre in grado di sotterrarsi rendendosi invisibili. Gli Zerg prediligono

5

quindi l'accerchiamento, attirando gli avversari in trappole ed imboscate dove grazie ai lorograndi numeri travolgono il nemico. I comandanti nemici devono sempre prestare la massimaattenzione agli spostamenti, poiché venire accerchiati equivale spesso a venire annientati.Sempre in virtù della loro velocità, i giocatori Zerg effettuano molto spesso degli hit & run(colpisci e ritirati), continuando a mantenere alta la tensione nel nemico e cercando di attirarele singole unità nemiche fuori posizione al fine di accerchiarle (e ucciderle) o aggirarle(puntando direttamente verso obiettivi sensibili come gli estrattori prima che questeripieghino a difenderli). La loro produzione, pur centralizzata, è ottimizzata in parallelo. Sonoperciò in grado di produrre diverse unità contemporaneamente, fin dall'inizio della partita.Questo aspetto, insieme al basso costo, porta spesso a strategie di "macrogame" dove unoZerg attacca senza tregua l'avversario con numerose unità poco costose, non dandogli il tempomateriale di rimpiazzare le perdite subite fino ad ottenere il crollo del fronte.

2.3.2 Protoss

I Protoss sono una razza di giganti umanoidi, hanno una struttura sociale ben organizzata euna tecnologia avanzatissima che è centrata sull'uso di potentissimi e misteriosi cristallichiamati "Khaydarin". Sono originari di Aiur, il quale è anche il loro pianeta capitale (adifferenza delle altre 2 razze, più nomadi). La loro civiltà è inizialmente la più avanzata epotente, anche se in seguito alla distruzione del loro pianeta natale subisce un drasticodeclino. Il loro nutrimento è costituito da energia solare e sono dotati di enormi poteri mentaliche possono usare per manipolare materia ed energia in vari modi. La loro tecnologia èampiamente integrata con questa loro capacità, a tal punto che spesso è difficile capire cosa è"meccanico" e cosa è "psichico". I Protoss condividono un legame psichico che permette lorodi comunicare telepaticamente. La società Protoss si basa su una filosofia chiamata Khala ed èclassicamente divisa in 3 caste: templari (guerrieri), giudicatori (ruoli politici) e khalai(artigiani/scienziati). I Protoss sono caratterizzati da lunga vita ma non sono una razzaprolifica. Anche per questo fanno ampiamente uso di robotica ed automazione sia in ambitomilitare che civile, per l'esecuzione dei lavori più semplici. In questo modo i singoli Protosspossono concentrarsi solo sugli aspetti più complessi/creativi del loro compito.

Militarmente i Protoss schierano un ristretto numero di unità dai design eleganti, moltocostose ma estremamente potenti ed efficaci rispetto alle controparti delle altre razze. Itemplari Protoss sono combattenti che spendono l'intero arco della loro millenaria vita aperfezionare l'arte della guerra. Non temono il corpo a corpo, dove anzi eccellono ed inoltrecol procedere della battaglia tendono a dispiegare numerose macchine e poteri mentali ingrado di provocare ingenti danni ad area. A gioco inoltrato perciò i Protoss tendono aprevalere nei grandi scontri aperti anche qualora siano in palese inferiorità numerica. In ciòsono avvantaggiati da numerose abilità volte a negare temporaneamente l'uso di porzioni dispazio o di interi gruppi di unità al nemico, così da riportare lo scontro ad una dimensioneridotta, dove appunto a parità di numeri la migliore qualità delle unità protoss procura loro lavittoria. Specialmente nelle prime fasi di scontro i comandanti Protoss tendono adavvantaggiarsi di tattiche simili a quelle adottate dai comandanti greci Milziade e Leonidacontro i Persiani, attestandosi quindi nei pressi di strettoie o punti elevati: un comandanteavveduto evita sempre di scontrarsi con i Protoss in zone particolarmente anguste che glineghino possibilità di manovra. Tutte le unità Protoss possiedono uno scudo di energia ingrado di assorbire una gran quantità di danno prima dell'esaurimento. Tali scudi sono in gradodi rigenerarsi velocemente fuori dal combattimento perciò quando la situazione lo permette(con alcune eccezioni, in genere le unità Protoss sono meno mobili rispetto alle contropartiTerrestri/Zerg) il comandante protoss cerca sempre di effettuare del hit & run per

6

avvantaggiarsi di questa peculiarità.

2.3.3 Terran

I Terrestri (Terran nella versione originale in inglese) sono la razza umana, di origine terrestree di stampo culturale post-statunitense. Risiedono su pianeti lontanissimi dalla Terra, chehanno abbandonato diversi secoli fa. I primi Terran erano criminali terrestri, mandati in esiliosu 4 navi colonizzatrici, che si persero nello spazio secoli fa. Le varie fazioni terrestri sonoperennemente in lotta tra di loro, impegnate in un'eterna contesa per le risorse. Solo moltotardi nella storia fanno la comparsa gli umani nativi della Terra, che irrompono nel settoredecisi a conquistare tutto e tutti (Zerg, Terrestri coloni, Protoss) tramite una potentespedizione militare.

Nell'universo di Starcraft la democrazia e i diritti civili sono un ricordo del passato, anche sepochi individui idealisti ancora lottano per essi (senza particolare successo). Tutti i governiTerrestri sono di stampo prevalentemente oligarchico o totalitarista e di norma sonofortemente militaristi.

L'umanità di Starcraft sta vivendo un periodo di transizione dal punto di vista evolutivo.Infatti, sempre più umani si scoprono dotati di poteri psionici, anche se non così avanzaticome quelli riscontrabili nei Protoss. Nella stragrande maggioranza dei terrestri tuttavia,questi poteri sono ancora sopiti, e sono destinati a manifestarsi solo nelle future generazioni.

I Terrestri sono fisicamente più deboli in confronto ai loro rivali Protoss e Zerg. Sono inoltrevulnerabili nel corpo a corpo. La loro tecnologia è ovviamente inferiore agli avanzatissimiProtoss, ma è molto funzionale e dimostra la sua efficacia in combattimento: anche nellontano futuro utilizzano principalmente armi da fuoco e armi balistiche come missili e testatenucleari, ma hanno anche sviluppato una tecnologia laser, utilizzata prettamente dalle loroastronavi che sono anche in grado di muoversi nello spazio aperto.

Le caratteristiche peculiari che comunque li parificano ai nemici sono la loro estremaadattabilità al territorio (gli edifici principali che sono in grado di decollare e spostarsi in zonemeglio difendibili o ricche di risorse). Un'altra caratteristica rilevante è il fatto che quasi tuttele unità terrestri sono dotate di abilità speciali, innate o ricercabili presso gli edifici, che usatepropriamente sono in grado di cambiare il corso di una battaglia. In generale, tutte le unitàterrestri sono più "specializzate" in uno specifico ruolo, rispetto a quelle protoss e zerggeneralmente più polivalenti. Talvolta questo si traduce nell'avere unità efficaci solo indeterminati momenti di una partita e scarsamente utili una volta ammassate, ma dato che unoscontro raramente si decide con una singola battaglia definitiva, spesso un paio di queste unitàspecializzate possono creare ingenti danni in qualunque momento se l'avversario non se neavvede.

I Terrestri sono noti per le loro grandi capacità nel combattimento a medio-lungo raggio (adesempio con l'ausilio dei Carri armati in modalità d'assedio/artiglieria). I comandanti terrestriinoltre sono soliti sfruttare gli edifici per costruire barriere artificiali che impediscano alleunità corpo a corpo avversarie di entrare in contatto con quelle terrestri. I punti deboli diquesta razza sono da ricercarsi nella scarsa resistenza fisica e potenza di fuoco rispetto aiProtoss, e nella minore velocità e numero di unità dispiegabili rispetto agli Zerg. Subisconomolto il combattimento corpo a corpo che preferiscono evitare, ma sono dotati di moltissimeunità semplici con attacco a distanza. Questo costringe i comandanti avversari ad ingaggiaregrandi schieramenti di fanteria terrestre con cautela, onde evitare il rischio di perdere tutte leunità corpo a corpo prima che queste raggiungano il bersaglio. Il loro punto forte è costituitodalla possibilità di effettuare rapide riparazioni e medicazioni sul campo. Ogni unità può

7

essere riportata in piena efficienza in pochi secondi. Un altro vantaggio non indifferente stanella capacità di rilevare unità invisibili per pochi secondi in qualunque luogo della mappa.L'attacco nucleare inoltre non ha eguali nelle abilità delle altre specie, e anche quandol'avversario riesce ad evitare i danni, l'attacco provoca molta frustrazione nei giocatori che sitrovano a vivere costantemente sotto la sua minaccia.

8

3. Teoria dei giochi

Il nome “teoria dei giochi” deriva dal libro “Theory of Games and Economic Behavior”,pubblicato nei primi anni quaranta da John Von Neumann e Oskar Morgenstern, che avevanoprovato a definire in termini matematici il modo in cui si comportano gli individui quando sitrovano in una situazione che può portare alla vincita di qualcosa. La teoria si applica quindi aun'infinita di scenari più o meno complessi, da una partita a scacchi a come si regolamenta unmercato per gli scambi economici. Semplificando: si applicano le regole della matematica perdescrivere e in certa misura prevedere l'andamento di un gioco o di uno scenario reale.

Esistono molti tipi di giochi, giochi a carte, videogiochi, giochi sportivi ecc... I giochi che nonrientrano nella teoria dei giochi sono principalmente di due tipi:

• giochi contro il caso, per esempio le lotterie, le slot machines dove il giocatore sfida lasorte e la strategia non ha nessuna importanza

• giochi senza interazione strategica tra i giocatori, per esempio il solitario

Vediamo un esempio di un gioco che non rientra nella teoria dei giochi. Due giocatori hannoun'urna ciascuna contenente 5 palline da 1 a 5. Ciascuno dei due giocatori estrae una pallinadall'urna. Se la somma dei due numeri è pari, vince Piero, se è dispari vince Silvia. É un giococontro il caso. Vi sono 25 possibilità, di cui 13 a favore del primo e 12 a favore del secondo, ilgioco non è equo ma i due giocatori non hanno né scelte né decisioni da prendere.

Le componenti di un gioco sono:

1. l'obiettivo di ogni giocatore è vincere, nei giochi RTS la vittoria si ottienedistruggendo tutti gli edifici e unità dell'avversario

2. tutti devono essere a conoscenza delle regole del gioco

3. ogni partecipante può prendere un numero finito di decisioni

4. ogni decisioni presa, chiamata strategia, da un individuo ha delle conseguenze chepossono essere o positive o negative; una decisione presa influenza anche la strategiadell'avversario

I giocatori coinvolti sono intelligenti e razionali. Intelligenti perché hanno la capacità dicomprendere la situazione che hanno davanti e soprattutto hanno la consapevolezza che conloro partecipano altri individui che adottano schemi per una data situazione. Razionali perchésono in grado di ordinare le possibili strategie attraverso un valore di utilità assegnato a questeultime. Di solito questo ordinamento viene fatto attraverso una funzione di utilità.

Esistono due tipologie di giochi:

• cooperativi, cioè viene ricercato un fine comune tra più individui, c'è la possibilità disottoscrivere accordi vincolanti, che possono essere di vantaggio ai singoli giocatori.

9

• non cooperativi, detti anche competitivi, i giocatori non hanno la possibilità distringere accordi tra di loro. Si presuppone che ogni individuo prende sempre ladecisione più vantaggiosa, in modo da avere il maggior vantaggio, per questa ragionesi dice che l'individuo assume un comportamento “intelligente ottimista”.

Una strategia è un “piano di azione”, cioè una mossa o un insieme di mosse che un giocatore intende seguire per perseguire il suo obiettivo.

10

5. Sistemi esperti

Il bot può essere visto come un sistema esperto. Un sistema esperto o sistema basato sullaconoscenza è un sistema in grado di risolvere problemi in un dominio limitato ma conprestazione simili a quelle di un esperto umano. Generalmente esamina un largo numero dipossibilità e costruisce dinamicamente una soluzione. Nel nostro contesto la soluzione è lastrategia che il bot adotterà. Il punto di forza di questi sistemi è il flusso di esecuzionedell'algoritmo non è ben definito ma è flessibile. A differenza di un sistema esperto classicoqui non c'è nessuna interazione tra uomo e macchina, dove la macchina deve dare dellespiegazione sul motivo di una certa decisione.

Ogni sistema esperto deve riuscire ad esprimere due tipi di conoscenza:

• Conoscenza sul dominio dell'applicazione, nel nostro sistema insieme delleinformazioni di gioco (posizione avversario, quantità di risorse disponibili ecc).

• Conoscenza su come utilizzare la conoscenza sul dominio dell'applicazione.

Un sistema esperto è costituito da :

• Una base di conoscenza, dove sono contenute un insieme di fatti, viene chiamataanche memoria a lungo termine.

• Motore inferenziale, cioè un algoritmo che simula le modalità con cui la mente umanatrae conclusioni logiche attraverso il ragionamento.

• Memoria di lavoro, anche detta memoria a breve termine in cui sono contenuti i dati,

Esistono due tipi di sistemi esperti : sistemi esperti basati su regole e sistemi esperti basati sualberi.

I sistemi esperti basati su alberi hanno un insieme di dati ed alcune deduzioni attraverso ilquale viene creato un albero che classifica i vari dati. Nuovi dati vengono analizzati

11

Figura x.y : Schema Sistema Esperto

dall'albero e il nodo di arrivo rappresenterebbe la deduzione. Può essere espresso attraversoun albero delle decisione come si vede nella figura x.y

Sistemi esperti basati su regole, sono dei programmi composti da regole della forma

if <condizione> then <azione>

Dati una serie di fatti i sistemi esperti, grazie alle regole di cui sono composti, riescono adedurre nuovi fatti, prendere decisioni ecc... Nel nostro caso la strategia che l'avversario staadottando.

Per esempio supponiamo di avere un problema di salute, forniamo al sistema esperto iseguenti fatti:

• ho mal di testa

• sono raffreddato

• la temperatura corporea è di 38 gradi centigradi

Il sistema esperto assume i fatti e sceglie una regola così formata:

IF ((mal di testa) AND (raffreddore) AND (temperatura = 38))THEN (il suo problema è INFLUENZA)

Il motore inferenziale interpreta le regole per generare “conoscenza” dai dati. Non è in gradodi “creare” regole, solo di interpretarle. Il motore inferenziale utilizza le regole attraversodelle strategie di controllo. Queste possono essere o forward o backward.

La strategia forward (in avanti) o controllo guidato dai dati segue il seguente algoritmo:

WHILE <obiettivo non raggiunto> doBEGIN

<MATCH: determina l'insieme delle regole applicabili (cioè le regole antecedente è soddisfatto dai fatti il cui contenuto nella memoria di lavoro)>

<CONFLICT_RESOLUTION: seleziona la regola da applicare><FIRE: esegui l'azione associata alla regola>

END

12

Figura x.y

Albero per decidere se è la giornata ideale per andare a giocare a tennis

La strategia backward (all'indietro) o controllo guidato dal goal G segue il seguentealgoritmo:

If <G è un fatto nella memoria di lavoro>THEN <G è dimostrato>ELSE

BEGIN<MATCH: seleziona le regole il cui conseguente può essere unificato con G><CONFLICT_RESOLUTION: seleziona la regola da applicare><l'antecedente della regola selezionata diventa il nuovo obiettivo da verificare>

END

Un sistema esperto può essere utilizzato nei settori più disparati. Vediamo alcune possibiliapplicazioni:

• Interpretazione, si analizzano dati complessi e potenzialmente rumorosi per ladeterminazione del loro significato. Esempio Dendral e Hearsay II

• Diagnosi, si analizzano dati potenzialmente rumorosi per la determinazione dimalattie. Esempio Mycin

• Monitoring, i dati si interpretano continuamente per la generazione di allarmi insituazioni critiche. Al sistema è richiesta una risposta in tempo reale soddisfacente.

• Plannig e Scheduling, si determina una sequenza intelligente per raggiungere undeterminato obiettivo. Di questa categoria far parte il funzionamento del bot.

13

4. Bot di StarCraft

Blizzard Entertainment non ha rilasciato nessun modulo ufficiale che permette ad unprogramma di AI di interagire con il gioco StarCraft, questo viene fatto utilizzando le BroodWar Api, una libreria C++ open source. BWAPI permette ai programmatori di avere la stessavisione di gioco di un giocatore, cioè non tutte le informazioni sono disponibili e da lapossibilità di impartire degli ordini alle unità.

Da quanto BWAPI è stato sviluppato nel 2009, lo sviluppo di AI per StarCraft ha avuto unnotevole incremento, facendo nascere diversi agenti di AI. Alcuni sono stati implementati perpartecipare solamente per partecipare ai tornei altri sono stati usati per testare differentitecniche di AI. Uno dei più famosi tornei che vengono organizzati è AIIDE StarCraft AICompetition che nasce nel 2010. Dal 2011, solo gli agenti open-source possono partecipare equesto a fatto si che molti programmatori hanno sviluppato i propri bot partendo da altri giàesistenti.

La maggior parte dei bot di maggior successo usa delle strategie predefinite. Anche se sipotrebbe scegliere tra alcune strategie in modo dinamico e intelligente, queste sono ancorahard-coded, cioè progettate per gestire solo situazioni specifiche. I bot sono progettati perprevalere sull'avversario, di solito vengono utilizzate differenti tecniche di AI per raggiungeredegli obiettivi intermedi, come per esempio sviluppare certe unità o migliore la produzionedella base. Verrà fatta una panoramica di alcuni bot “base”, che possono essere considerati deiframework, attraverso i quali vengono sviluppati altri bot, soffermandoci in particolare suOpprimobot, quello utilizzato per la soluzione.

4.1 Skynet

Skynet (25) è uno dei migliori bot per StarCraft non associato a nessuna università. Comemolti bot utilizza i Protoss. Le strategie di Skynet segnate come aggressive o difensive. Nonusa nessun simulatore di combattimento, ma la dimensione dell'esercito determina se si dovràattaccare.

Le scelte fatte da Skynet sono dipendenti dal tipo di giocatore contro cui si sta giocando e ilbase alla mappa di gioco. Skynet è in grado di modificare l'ordine di costruzione utilizzandodelle priorità per le risorse, in cui ad esempio a tutti gli avanzamenti è assegnata una certapriorità.

Skynet è molto apprezzato perché fa un buon uso delle unità Protoss. Controlla molto bene siale unità presenti all'inizio del gioco, destinate a portare avanti l'economia della base, sia leunità di combattimento sfruttando al meglio le abilità acquisite con i potenziamenti. Questorende Skynet abbastanza forte per tutta la durata del match. Tuttavia il bot incontra delledifficoltà quando incontra un unità di tipo Dark Templar. Il Dark Templar è avvolto da unaspecie di nebbia che lo rende invisibile, è necessaria un unità di rilevamento per poter esserevisibile. Questo punto debole indica che Skynet ha problemi nell'adattarsi all'avversario.

4.2 AIUR

14

AIUR (*) che sta per Artificial Intelligence Using Randomness, cerca di utilizzare la casualitàper non diventare prevedibile. All'inizio sceglie un mood tra cinque disponibili, cheinfluenzerà la strategia di gioco. Il mood può essere visto come la filosofia di gioco che vieneadotta dal bot, per esempio può essere di tipo rushing o booming. Anche molti aspetti dellastrategia di gioco sono determinati in modo casuale, questo fa si che la strategia non dipendeda ciò che sta facendo l'avversario. Questi aspetti che compongono la strategia possono esserevisti come sotto-strategie che compongono la strategia principale. Ognuno di queste sotto-strategie ha una diversa probabilità di essere selezionata. La probabilità dipende dal successoche può ottenere. Questo comportamento è adottato da molti bot, ma AIUR usa il fattorecasualità molto più degli altri.

4.3 Berkeley Overmind

Overmind(*) è il vincitore del primo torneo ufficiale per StarCraft AI, nato nell'Universitàdella California Berkeley. Overmind utilizza sempre la stessa strategia, che consiste nel creareun esercito di Mutalisk. Un Mutalisk è un unità volante in grado di attaccare sia unità terrestriche unità aeree ed è abbastanza facile da controllare, dato che le unità volanti non prendono inconsiderazione il terreno di gioco.

Tuttavia i Mutalisk non sono disponibili nella parte iniziale del gioco. Questo forza Overminda difendersi con altre unità finché i Mutalisk non diventano disponibili. Il bot prova adifendersi utilizzando gli Zerglings, unità economiche. Overmind perde la maggior parte deimatch nella prima fase, però quando riesce a creare i Mutalisks di solito riesce a prevalere.

Anche se Overmind ha una strategia particolare non partecipa più in tornei. La ragioneprincipale che basta che gli altri bot utilizzano una strategia rushing, questo viene sopraffattoprima di riuscire a creare i Mutalisk.

4.4 UAlbertBot

UalbertBot è stato sviluppato da David Churchill, ricercatore dell'università di Alberta ed èrisultato vincitore nella quarta edizione di AIIDE StarCraft (*). UalbertaBot ha una strutturamodulare che rende facile la modifica della parte di AI, anche per questo UAlbertaBot è usatacome codice di partenza dai programmatore per creare i propri bot. Il comportamento di basedel bot è attaccare il più presto possibile l'avversario e vincere la partita prima che questopossa diventare una minaccia. Questo comportamento è reso possibile perché UAlbertaBotusa un simulatore di combattimento per determinare se una battaglia sarà vinta o persa. Il botattaccherà solo se è sicuro che vincerà la battaglia.

Per quanto riguarda le decisioni strategiche, UAlbertaBot non è molto dinamico. L'agenteesplora l'avversario nella fase iniziale per determinare la sua posizione. Man mano il giocoprocede costruisce sempre più unità e espande la base.

4.5 Opprimobot

Opprimobot (precedentemente conosciuto come BTHAI) è un framework open sourcesviluppato da Johan Hagelbäck, assistente professore di intelligenza artificiale a LinnaeusUniversity in Växjö città svedese.

15

Una delle caratteristiche di OpprimoBot che mostra nella schermata di gioco informazioni sucosa stia facendo il bot. Ci sono quattro pannelli principali (Techs/upgrades, Squads, StrategyPlan and Next to build/In progress) come si vede nello figura x.y.

Il pannello “Strategy Plan” mostra i prossimi quattro comandi tra building e upgrade che ilbot andrà ad eseguire. Il pannello “Next to build/In progress” mostra i building e upgrade chesono in sviluppo. Il pannello “Techs/Upgrades” mostra tutte le tecnologie che sono statericercate e tutte gli upgrades che sono stati fatti. Il pannello “Squad” mostra tutte le squadre(una squadra è un gruppo di unità) che il bot ha a disposizione. Ogni squadre è chiamata con“SQ” e l'id della squadra, inoltre è presente il numero di unità disponibili per quella squadrasu il totale di unità che comporrà la squadra.

L'architettura del bot può essere mappata su tre macro categorie: Agents, Managers eCombatManagers come si vede in Figura x.y. Le classi fondamentali per la fase di attaccosono la Squad e Commander. La classe Commander gestisce :

• trovare posizioni difensive

• lanciare un attacco

• definire l'ordine di costruzione degli edificio

• quale tecnologie e avanzamenti ricercare

• quale unità produrre

La classe Squad ha la responsabilità di coordinare il movimento e l'attacco dell'unità dellastessa squadra.

16

Figurax.y Schermata di gioco di Opprimobot

Le classi Agents definiscono il comportamento delle unità degli edifici. Ci sono tre principaliclassi astratte Agents : UnitAgent per gestire il comportamento delle unità, WorkerAgent pergestire il comportamento dei “worker” (coloro che hanno il compito raccogliere risorse ecostruire edifici) e BuildingAgent che gestiscono il comportamento degli edifici. Per ogni tipodi unità e per alcuni edifici sono definite delle classi Agents specifiche, che definiscono uncomportamento caratteristico. Poi ci sono le classi Managers che hanno come principalecompito di gestire la coda di costruzione, le unità in produzione e le informazione dellamappa.

17

Figura x.y Architettura di Opprimobot

6. L'architettura del Bot

Ci sono normalmente due livelli di Intelligenza Artificiale (AI) nei giochi RTS: la partestrategia la parte tattica.

La parte strategica prende decisioni:

• sulle unità da costruire

• sugli edifici da costruire

• sulle tecnologie da ricercare

• sui potenziamenti da apportare

La parte tattica si occupa nel gestire il comportamento di ogni unità o di un piccolosottoinsieme, per esempio rientra nella tattica il come guidare un attacco. Nella progettazioneci si è concentrati sulla parte strategica lasciando la gestione della tattica al frameworkOpprimobot. Quindi la parte progetta si limita a lanciare un attacco, sarà il framework agestire come devono attaccare le unità.

Il bot è stato pensato come un sistema esperto basato su regole. Nell'architettura ci sono deimoduli che implementano la base di conoscenza, il motore inferenziale e la memoria dilavoro. Il motore inferenziale segue una strategia forward. L'algortimo è stato modificato nelseguente modo:

WHILE <l'avversario non è stato distrutto> doBEGIN <MATCH: determina l'insieme delle strategia dell'avversario><CONFLICT_RESOLUTION: seleziona quella più “vicina” alla strategia che l'avversario sta tenendo><FIRE: intraprende la strategia associata alla strategia dell'avversario selezionata>

END

Inoltre si è cercato di creare dei comandi ad alto livello, che attraverso opportuni modulifossero trasformati in comandi da poter dare impasto al framework Opprimobot.

18

6.1 Base di conoscenza

La base di conoscenza del Bot è costituita dal file XML “Strategies.xml”. La struttura èdefinita dal file Strategies.xsd.

La struttura di Strategies.xml è composta da tre blocchi principali:

• strategies

• strategiesEnemy

19

Figura x.y Architettura Bot

• squads

Il blocco squads contiene i blocchi squad. La squad rappresenta una squadra ed è compostada:

• tipo di unità

• numero di unità per ogni tipo

• avanzamenti e tecnologie che le unità devono avere.

Una squadra può essere composta da diversi tipi di unità, nella figura x.y la squadra 3 saràcomposta da cinque unità di Zergling e sei unità di Hydralisk. Inoltre vengono definiti gliavanzamenti (nella figura Muscular Augments livello 2) e le tecnologie (nella figuraConsume) che tale squadra deve avere.

Queste strutture possono essere viste come dei comandi ad alto livello che saranno utilizzatiper comporre l'azione (strategia) da adottare.

Il blocco strategies contiene i blocchi strategy.

I blocchi strategy contengono le squadre e gli edifici che caratterizzano tale strategia. Gliedifici saranno quelli tipici per la difesa, mentre le squadre possono essere di tipo offensivo odifensivo. Una squadra può far parte di diverse strategie, anche con ruolo differente

20

Figura x.y

Figura x.y

(offensivo o difensivo). Le strategy rappresentano le azione nella regola dei sistemi esperti,cioè cosa bisogna fare se una certa regola è soddisfatta.

Infine abbiamo il blocco strategiesEnemy che contiene le strategyEnemy. Questi blocchidefinisco la condizione nella regola di produzione. Essi contengono al loro interno vere eproprie condizioni ma anche le informazione che il motore inferenziale userà nella strategia dicontrollo.

Le condizioni sono :

• race: a quale “razza” può essere applicata

• type: indica se le strategie che verranno adottate servono per difendersi o per attaccare

• condintions: questo contiene le strategie che devono essere state già adottate perprendere in considerazione il blocco.

Le azione da seguire invece sono contenute dentro strategiesContrast. Queste fannoriferimento alle strategy definite dentro il blocco strategies.

Infine abbiamo il blocco features che contiene le unità e gli edifici che l'avversario dovrebbeavere se sta seguendo questa strategia. Questo blocco viene utilizzato dal motore inferenzialeper determinare quale strategia scegliere tra quelle selezionate.

La base di conoscenza viene caricata nel modulo StrategiesFactory, che avrà il compito diinterfacciarsi con il motore infereziale. StrategiesFactory si occupa di leggere il file xml emappare le informazioni dentro le strutture UpgradeXML, UnitXML, StrategyXML,SquadXML e StrategyEnemyXML. Per poter leggere il file xml è stato inglobato nel progetto ilframework Xerces-C++.

6.2 Motore inferenziale

Il motore inferenziale del bot è implementato dalla classe StrategyManager. Questa ha ilcompito di decidere quale strategia (regola) adottare, tra quelle disponibili.

21

Figura x.y

Nella teoria dei giochi un agente è razionale perché attraverso delle funzioni di utilità è ingrado di fare delle scelte convenienti. Qui sono stati definiti due indici che hanno il ruolo difunzioni di utilità. I due indici vengono calcolati per ogni blocco strategyEnemy nel seguentemodo:

• un indice δ che indica quanto un blocco strategyEnemy è vicino alla strategia chel'avversario sta adottando durante il match. Rappresenta il numero di unità e edificinella quale il giocatore si è imbattuto e che identificano una strategia dell'avversario

δ= ∑x∈ features

imbattuto(x)

• un indice ζ che indica quanto differisce un blocco strategyEnemy dalla strategiadell'avversario. Rappresenta il numero di unità e edifici nella quale il giocatore non siè imbattuto e che identificano una strategia dell'avversario

ζ = ∑x ∈ features

! imbattuto(x)

Le unità e gli edifici che identificano una strategia di un avversario sono contenute nel bloccofeatures.

La funzione imbattuto può essere pensata nel seguente modo: restituisce 1 se l'unità/edificio Xdell'avversario è stata avvista durante il gioco 0 se non è stata vista. Questa vieneimplementata dal modulo InformationEnemy, che tiene traccia di tutte le unità e gli edificidell'avversario incontrati. Alcuni edifici vengono dedotti in base alle unità incontrate. Laclasse InformationEnemy rappresenta la memoria di lavoro nei sistemi esperti.

Il bot separa la parte difensiva dalla parte offensiva. Quindi è come se giocassero due botdifferenti uno che si occupa della difesa l'altro dell'attacco.

Lo sviluppo della strategia non è altro che un insiemi di strategyEnemy, che sono statiselezionati. Da adesso per comodità indicheremo strategyEnemy con SE. Esistono tre tipi diSE per la fase offensiva:

• SE iniziali: sono senza il blocco condition

• SE intermedi: sono delle strategia da adottare prima di attaccare

• SE finali: indicati con l'attributo attack a true, sono strategie che quando vengonoraggiunte il Bot inizia ad attaccare

Per la fase difensiva si hanno invece solo gli SE iniziali e SE intermedi.

La classe StrategyManager implementa un algoritmo che può essere considerato figlio dellastrategia di controllo forward. L'algoritmo è il seguente:

WHILE<avversario non distrutto>seleziona le SE iniziali che soddisfano le condizioni di razzaseleziona la SE con δ più alto, in caso di parità numerica dell'indice viene scelta quella

con ζ minoreIF <SE iniziale non è stata scelta precedentemente>

carica le strategyContrast associate

22

IF <una SE non iniziale non è in fase di caricamento >seleziona le SE che soddisfi le seguenti condizioni:

• non iniziale• non scelta in precedenza • condizioni del blocco condition soddisfatte

sceglie tra le SE selezionate quella con δ maggiore, in caso parità numerica scegliere quella con indice ζ minore

END

Per “caricamento strategia“ si intende che il bot ha intrapreso le azioni necessarie in modo dapoter portare a termine la strategia seleziona.

L'algoritmo precedente viene eseguito sia per creare una strategia difensiva che una offensiva,in modo separato. L'obiettivo è riuscire ad attaccare l'avversario in modo efficiente costruendouna solida difesa.

Attraverso questo procedimento man mano che il gioco va avanti e si hanno nuoveinformazioni sull'avversario, la strategia si va adattando, cercando di costruire una “strategiavestitino” per l'avversario.

Esempio di funzionamento

Step 1:

viene selezionata SE1

Step 2:

viene scelto un SE6, un SE intermedio, conseguenza delle azioni associate a SE1. Viene sceltaanche SE4, un SE iniziale dovuto alle nuove informazioni che sono state scopertesull'avversario. Quindi SE6 e SE4 sono caricati contemporaneamente.

23

.

Step 3:

viene selezionato SE9, un SE intermedio

Step 4:

viene selezionato SE12, un SE finale. Quando il bot avrà finito di caricare questo SE iniziarel'attacco.

24

6.3 Astrazione dei comandi

Le strategie contenute nel blocco strategie sono visti come comandi ad “alto livello”. Perpoter essere eseguite è stato necessario progettare un modulo che scomponesse in comandi piùelementari i cosiddetti comandi ad“alto livello”.

Il modulo StrategyManager comunica, come si vede nella figura x.y, con il modulo MangerQuando StrategyManger sceglie una strategia/azione da intraprendere informa il Manger dicosa ha bisogno.

Il modulo Manager può ricevere i seguenti comandi:

• costruisci l'unità X

• costruisci l'edificio Y, di solito quelli destinati alla fase difensiva

• avanzamenti da raggiungere

• le tecnologie da ricercare.

Quando riceve uno di questi comandi “ad alto livello” li decompone in comandi “elementari”.In pratica se deve costruire una unità di tipo X genera l'albero delle costruzioni, delle unità,degli avanzamenti e delle tecnologie necessarie. L'albero viene generato in maniere ricorsiva.Lo stesso vale per gli edifici, gli avanzamenti e le tecnologie.

Per esempio se viene ricevuto il comando di costruire l'unità Guardian, questo vienescomposto nei seguenti comandi: serve un unità di unità Mutalisk e l'edificio Greater Spire,che a loro volta vengono scomposti rispettivamente serve l'edificio Spire, serve l'edificio Hivee anche l'edificio Spire; la ricorsione continua fino ad arrivare agli elementi di base chepossono essere le larve o l'edifico Hatchery. La figura x.y l'albero delle dipendenze dell'unitàGuardian.

Dopo aver ottenuto l'albero delle dipendenze questo viene potato, eliminando

• ciò che già a disposizione, per esempio devo costruire l'edifico Hive ma questo è giàstato costruito

25

Figura x.y albero delle dipendenze per l'unità Guardian

• ciò che è in coda nello Scheduler, per esempio è richiesta la tecnologia Burrowing equesta è già in attesa per essere ricercata

• ciò che è in progress

Dopo la potatura la lista dei comandi ottenuta viene mandata al modulo Scheduler. La listacontiene comandi che Opprimobot è in grado di portare a termine.

6.4 Ordine comandi

L'ordine di esecuzione dei comandi elementari viene gestito dal modulo Scheduler. Qui si èscelta una strada diversa rispetto agli altri bot presenti per questo gioco. Di solito ad ogniazione viene assegnato un valore supply, che indica la popolazione che deve essere presenteaffinché l'azione sia eseguita. In questo modo l'ordine viene dato attraverso questo valore,cioè l'evoluzione della base è legata dalla popolazione che la costituisce.

L'idea seguita in questa progettazione è di utilizzare delle code con “l'invecchiamento”, cioèla priorità degli elementi va aumentando nel tempo.

La priorità viene calcolata nel seguente modo:

priorità=( frameOccupatiPerAzione∗2)

( frameCorrente− frameDiArrivoNellaCoda)∗FattoreMoltiplicativo

Più è piccolo il valore maggiore è la priorità.

Nel modulo Scheduler sono presenti quattro code :

• una per le unità, gestita dalla struttura StructureUnit

• una per gli edifici, gestita dalla struttura StructureBuild

• una per le tecnologie, gestita dalla StructureTech

• una per gli avanzamenti, gestita dalla StrucutureUpgrade

Lo Scheduler ogni volta estrae un elemento con priorità maggiore da ciascuna coda. Poi tra iquattro elementi estratti seleziona l'elemento con priorità maggiore ed invia il comando adOpprimobot. Dalla coda vengono estratti solo gli elementi cui albero delle dipendenze èsoddisfatto.

Quando viene scelto un elemento, per esempio Drone e non sono presenti sufficienti risorseper costruirlo non viene scelto un altro elemento ma si aspetta che ci siano sufficienti risorse.

26

Figura x.y

Come viene definito l'ordine dei comandi da eseguire da un Bot classico

6.5 Gestione attacco

La gestione dell'attacco viene gestita dal modulo ArmyManager. Come già detto non è stataprogettata la parte di tattica del bot ma solo la parte strategica, quindi questo modulo si limitaa lanciare l'attacco non appena un SE finale è stato raggiunto.

Il modulo riceve dal modulo StrategyManager il riferimento a tutte le squadre che sarannocreate in modo da poter dare l'ordine di attacco. Inoltre quando un unità di una squadra vienedistrutta, questo si occupa di dare l'ordine di ricreare tale unità in modo da ripristinare lasquadra.

6.6 Informazioni avversario

Per capire la strategia che l'avversario sta seguendo bisogna mandare delle unità inavanscoperta. Questo viene gestito dal modulo ExplorationManagement.

Il funzionamento è molto semplice, viene mandata un unità Zergling in esplorazione. Ognivolta che l'unità esploratrice viene distrutta, questo modulo si occupa di dare l'ordine perrimpiazzarla.

6.7 Dettagli Implementativi

Il progetto è stato sviluppato su Visual Studio 2013, utilizzando come linguaggio C++. Lacompilazione del progetto permette di ottenere una DLL, che per poter essere testata vienemandata a TournamentManager.

TournamentManager ha il compito di lanciare il gioco Starcraft è caricare i bot per farigiocare come se fossero giocatori reali. Utilizza una architettura client-server in un rete LAN.Il numero dei client è variabile, nel nostro caso saranno due, uno dove è presente il nostro bote l'altra il bot sfidante. É stato sviluppato da Dave Churchill dell'università di Alberta ed èusato nei tornei AIIDE.

27

Figura x.y Architettura TournamentManager

7. Conclusione

É stata esposta la soluzione che permette all'agente intelligente, bot, di adattarsi alla strategiadell'avversario. Il bot è stato visto come un sistema esperto, questo fa si che sia presente unabase di conoscenza. Il prossimo passo per migliore la soluzione di adattamento è quello diaggiungere sempre più regole alla base di conoscenza. Questo può essere fatto osservandoreplay di match in modo da riuscire ad identificare regole e azioni.

L'altro aspetto da migliorare è implementare la tattica e non limitarsi solo alla parte strategica.Anche se i due aspetti possono essere visti separati, una buona interazione permette di crearestrategie semplici ed efficaci. Quindi i due moduli da migliorare nell'architettura propostasarebbero ExplorationManager e ArmyManager.

28