Extended Summary of "EvoCraft: A New Challenge for Open-Endedness"
1. UNIVERSITÀ DEGLI STUDI DI TRIESTE
DIPARTIMENTO DI INGEGNERIA E ARCHITETTURA
Corso di Laurea in Ingegneria Elettronica e Informatica
Extended Summary of
”EvoCraft: A New Challenge for Open-Endedness”
Relatore:
Ch.mo Prof.
Andrea DE LORENZO
Candidato:
Giacomo VASSALLO
Mat. IN0500761
ANNO ACCADEMICO 2021/2022
3. Introduzione
L’articolo descrive i risultati raggiunti dallo sviluppo di EvoCraft, un framework che ha l’obiettivo di facili-
tare lo sviluppo e lo studio dell’intelligenza artificiale e, in particolare, degli algoritmi open-ended [4].
L’articolo propone alcuni semplici esperimenti per testare le funzionalità del framework e della relativa Ap-
plication Programming Interface (API).
Gli algoritmi open-ended formalizzano il concetto naturale di ”evoluzione”: cosı̀ come l’evoluzione naturale
ha generato una grande varietà di forme di vita, l’obiettivo delle tecniche open-ended è la creazione di
algoritmi che formino strutture complesse partendo da altre molto più semplici.
Delineare questo concetto porterebbe ad un importante passo in avanti verso la creazione della vita artificiale.
Nozioni
2.1 Algoritmi Open-Ended
Un algoritmo open-ended mira a creare autonomamente strutture sempre più complesse, senza porre vincoli
ai risultati da ottenere. Questo approccio permette di generare una grande varietà di strutture partendo da
alcune più semplici [3].
Utilizzare l’open-ended learning comporta un aumento della diversità nei punti intermedi tra la prima
generazione e quella finale, favorendo lo sviluppo autonomo di un’ampia gamma di strutture.
2.2 Minecraft
Minecraft è un famoso gioco basato sulla costruzione di strutture e sull’esplorazione di un mondo generato
casualmente.
Il giocatore può interagire con l’ambiente attraverso la manipolazione di blocchi, ossia cubi di lato 1m, di
vari materiali (es. pietra, sabbia, terra, ecc.). Un blocco può essere piazzato nel mondo di gioco oppure
distrutto. Il giocatore può inoltre interagire con le creature che popolano il mondo come animali e mostri.
Esistono anche materiali fluidi come l’acqua e la lava, i quali tendono a propagarsi verso il basso come se
affetti dalla gravità.
Minecraft presenta una feature (redstone) che permette di creare meccanismi automatizzati che emulano dei
circuiti elettrici veri e propri. Combinando alcuni blocchi, infatti, è possibile creare ad esempio porte logiche
e timer.
Questo ha permesso ai giocatori di creare strutture molto complesse, come robot che si muovono autonoma-
mente, simulatori ed editor testuali (figura 2.1)
Un esempio di struttura basata sulla redstone è la “macchina volante”, ovvero un insieme di blocchi che una
volta azionato si muove autonomamente in linea retta. In figura 2.2 è riportata la macchina volante minima,
ovvero quella realizzabile con il minor numero di blocchi possibile.
2.2.1 Server
Minecraft presenta una modalità multigiocatore, che sfrutta un processo server eseguito su un calcolatore.
Un server di Minecraft è eseguito di default a 20 tick
s . Un tick è un’iterazione del ciclo di gioco e ad ogni
3
4. Figura 2.1: Alcuni esempi di strutture complesse create utilizzando la redstone: robot, editor testuali,
emulatori, reti neurali
Figura 2.2: Macchina volante realizzata con il numero minimo di blocchi possibile
tick vengono controllati molti aspetti del gioco stesso come: punti vita, fame, comportamento delle creature.
Quando il server è sovraccaricato (un tick dura più di 50ms), il tick rate del server cala.
2.3 API
L’API è stata realizzata utilizzando Sponge, ovvero una piattaforma di creazione di mod per Minecraft sotto
forma di plugin per il server su cui il gioco è in esecuzione.
Sebbene gli autori abbiano realizzato un client scritto in Python che implementa l’API, è possibile utilizzare
l’interfaccia anche tramite altri linguaggi. Per rendere l’utilizzo dell’API indipendente dal linguaggio, essa
si basa sulle Remote Procedure Call (RPC) e in particolare sul framework gRPC.
Una RPC consiste nell’esecuzione di una funzione su un calcolatore diverso da quello che elabora il program-
ma, nascondendo particolari sulla comunicazione di rete [5].
Il framework gRPC si basa su due entità [1]:
• Servizi (services), ognuno dei quali espone delle RPC, ovvero delle funzioni che possono essere chiamate
dal programma.
• Messaggi (messages), che definiscono input e output del programma
La prima versione dell’API comprende un solo servizio con 3 RPC (figura 2.3)
4
5. Figura 2.3: Definizione delle RPC del framework. Per semplicità sono omesse le definizioni dei messaggi.
Valutazione delle Prestazioni
3.1 Perché usare Minecraft
Secondo gli autori, Minecraft rappresenta il mezzo migliore per favorire lo studio siccome fornisce un insieme
limitato di elementi base (ovvero i blocchi) per creare le strutture. Inoltre in Minecraft è possibile creare
meccanismi automatizzati (come i circuiti logici) usando la redstone.
3.2 Prestazioni del Server
L’articolo discute l’utilità del framework per evolvere strutture. Per valutarne le prestazioni quando utilizzato
su un server sono stati effettuati 2 test.
3.2.1 Test 1
Il primo test consiste nell’eliminare tutti i blocchi da un volume cubico di lato N e riempirlo nuovamente
per valori crescenti di N. Quando il tick rate scende sotto i 20 tick
s si interrompe il test. Il tick rate cala con
N = 31 (corrispondente a 29,791 blocchi piazzati simultaneamente).
3.2.2 Test 2
Vengono create N macchine volanti minime e viene considerato il numero di tick al secondo dopo 20 secondi.
Queste macchine dinamiche sono più dispendiose rispetto ai blocchi statici generati nell’esempio precedente.
Il test viene fermato quando il tick rate scende sotto i 20 tick
s ; ciò accade quando si generano circa 1200
macchine.
3.3 Approcci Evolutivi
Per testare le funzionalità del framework vengono proposti due diversi approcci di evoluzione: quella
interattiva e quella automatizzata.
3.3.1 Evoluzione Interattiva
La struttura generata automaticamente viene valutata da un umano che ha il controllo (parziale o totale)
sui risultati dell’evoluzione.
Questa tecnica è particolarmente efficace per i problemi in cui è difficile definire esplicitamente una metrica
5
6. Figura 3.1: Ogni riga rappresenta un diverso esperimento, mentre le colonne mostrano il risultato rispetti-
vamente alla generazione 0, 10 e 30
o quando i criteri di valutazione sono soggettivi.
I risultati cosı̀ ottenuti però possono essere poco consistenti, a causa del giudizio non sempre coerente del-
l’operatore umano.
La strategia utilizzata è quella di evolvere entità e di permettere all’umano di scegliere la sua preferita per
ogni generazione. Al risultato scelto viene fornito un indice di fitness pari a 1, a tutti gli altri pari a 0.
Dopodiché viene presentata una nuova generazione all’utente.
Nei primi 3 esempi si è chiesto all’operatore di scegliere la struttura a suo giudizio più interessante (criterio
volutamente vago e impreciso) mentre l’obiettivo dell’ultimo era la creazione di una cascata (figura 3.1).
Questo approccio rende possibile controllare l’evoluzione di alcuni tratti fenotipici rispetto ad altri, favorendo
quelle strutture che presentano determinate caratteristiche.
3.3.2 Evoluzione Automatizzata
Nell’esperimento si tenta di creare una struttura che deve raggiungere un blocco sospeso in aria.
Viene mantenuta una popolazione di 20 strutture, ognuna con il relativo target.
La metrica (fitness) utilizzata per scegliere le strutture migliori è la distanza tra il blocco più vicino al tra-
guardo e il traguardo stesso. Il blocco iniziale della torre è generato attaccato al terreno, mentre il bersaglio
è spostato 10 blocchi a nord, 10 blocchi a ovest e 10 blocchi in alto rispetto alla base.
Una volta calcolato il fitness si mantengono le due strutture migliori e si uniscono nella generazione successi-
va, creando una struttura figlia. Si taglia una delle due in un punto casuale e si sostituisce la parte superiore
6
7. Figura 3.2: Evoluzione delle torri (generazioni 1, 6 e 13) e grafico della distanza minima al crescere delle
generazioni
di questa con quella dell’altra struttura. La costruzione migliore è copiata nella generazione successiva.
La prima generazione è formata da torri create casualmente partendo dalla base.
Nell’esempio fornito dall’articolo, l’obiettivo è raggiunto dopo 10 generazioni, sebbene il risultato non sia
vicino all’ottimo (figura 3.2).
Per dimostrare l’opportunità di evolvere anche macchine dinamiche, nell’articolo è anche riportato un espe-
rimento di evoluzione di macchine mobili. L’indice di fitness è calcolato come il cambiamento del centro di
massa della struttura evoluta dopo 10 secondi.
L’algoritmo ha creato macchine che sono capaci di muovere leggermente il proprio centro di massa, sebbene
non siano macchine che si muovono costantemente in una direzione. La macchina volante minima muove il
proprio centro di massa di 17 blocchi in 10 secondi, mentre la struttura migliore generata dall’algoritmo lo
muove di soli 0.2 blocchi, dopodiché si ferma.
Conclusioni
Come dimostrato dagli esperimenti esposti precedentemente, il framework permette di piazzare e tracciare
programmaticamente un numero ragionevole di blocchi in un server di Minecraft.
Si è dimostrato che è possibile anche utilizzare il framework per evolvere circuiti di redstone, dando vita a
strutture dinamiche.
A questo proposito cito un altro progetto, non riportato nell’articolo, da parte di Nicholas Guttenberg [2],
premiato al GECCO 2021 (Genetic and Evolutionary Computation Conference), competizione organizzata
dagli stessi autori dell’articolo.
Il progetto riguarda la creazione di un algoritmo che utilizzi i circuiti di redstone per implementare funzioni
logiche all’interno di Minecraft. Il sistema è in grado di evolvere porte logiche e di utilizzare circuiti prece-
dentemente scoperti combinati opportunamente per creare nuove funzioni logiche.
Questo dimostra che è possibile utilizzare il framework per evolvere circuiti logici e dinamici.
L’evoluzione basata sull’indice di fitness si è dimostrata fallimentare nell’esperimento con la macchina vo-
lante. Un importante sviluppo potrebbe essere tentare approcci differenti, realizzando un maggior numero
di strutture intermedie.
L’obiettivo principale di questi esperimenti dev’essere la ricerca degli elementi che mancano ai metodi attuali
per garantire lo sviluppo autonomo di strutture complesse.
7
8. Riferimenti
[1] gRPC Authors. Introduction to gRPC. 2021. url: https://grpc.io/docs/what-is-grpc/introduction/
(visitato il 14/06/2022).
[2] Nicholas Guttenberg. Automated design of novel redstone circuits - Evocraft. Youtube. 2021. url: https:
//youtu.be/JJ1-jPGWoqU.
[3] Joel Lehman Kenneth O. Stanley e Lisa Soros. Open-endedness: The last grand challenge you’ve never
heard of. 2017. url: https : / / www . oreilly . com / radar / open - endedness - the - last - grand -
challenge-youve-never-heard-of/ (visitato il 14/06/2022).
[4] Djordje Grbic e Rasmus Berg Palm e Elias Najarro e Claire Glanois e Sebastian Risi. ≪EvoCraft: A
New Challenge for Open-Endedness≫. In: arXiv (2012). arXiv: 2012.04751 [cs.AI].
[5] Wikipedia. Chiamata di procedura remota. 2022. url: https://it.wikipedia.org/wiki/Chiamata_
di_procedura_remota (visitato il 14/06/2022).
8