Nicola Amoriello

Contatti

email istituzionale: n.amoriello@studenti.unisa.it
email privata: amoriello.nicola97@gmail.com

GitHub: https://github.com/amrlnic

Introduzione

Sono stato uno studente iscritto al corso di laurea triennale in informatica. Da Marzo 2019 entro a far parte dell'ISISLab per svolgere la mia attività di tirocinio. L'obiettivo di questo è stato sviluppare delle simulazioni per l'engine di simulazioni basate su agenti ABM.jl, scritto completamente nel linguaggio di programmazione Julia.

Lavoro di tirocinio

Progressi

Svolto nell'arco di tempo tra Marzo 2019 e l'Ottobre dello stesso anno, il mio lavoro di tirocinio è stato quello di sviluppare due differenti simulazioni per l'engine ABM.jl, un tool per la creazione di agent based simulation scritto nel linguaggio di programmazione Julia.

Le simulazioni prese in questione sono: AntForaging.jl e Boids.jl.

Il lavoro è iniziato con lo studio del linguaggio di programmazione Julia, per il quale sono state dedicate due settimane di corso tenute dal professore Przemysaw Szufel della Warsaw School of Economics (WSE – SGH), Poland.

In seguito è stato approfondito il tema delle simulazioni basate su agenti e sono stati presi come oggetto di studio i tool già presenti sul mercato e che presentavano al loro interno gli stessi modelli di simulazioni presi da noi in esame. I tool in questiono sono MASON e NetLogo.

E' stato poi effettuato un lavoro di definizione della struttura e d'implementazione per entrambi i moduli di simulazione, il quale è stato intervallato da sessioni di debugging per poter risolvere i problemi che si presentavano durante il corso dello sviluppo.

Il lavoro si è concluso con l'implementazione di un'interfaccia grafica con la libreria PyPlot e con un lavoro di benchmarking per mostare i risultati prestazionali del programma realizzato, messi anche a confronto con i diretti competitor già citati in precedenza.

Software e librerie

Seminari

Primo seminario (13 Settembre 2019)

Secondo seminario (18 Ottobre 2019)

bibliografia

Lavoro di Tesi

Abstract

In questo lavoro è stata trattata la tematica della simulazione basata su agenti. Questa, anche conosciuta come ABM (Agent Based Simulation), è una classe di modelli computazionali finalizzati alla simulazione al computer di azioni e interazioni di agenti autonomi al fine di valutare i loro effetti sul sistema nel suo complesso.

Una Agent-Based Simulation è caratterizzata da tre componenti fondamentali:

i) agenti, entità autonome e con proprie caratteristiche e comportamenti;

ii) ambiente, detto anche campo o field, nel quale gli agenti interagiscono tra loro;

iii) un insieme di regole che definisce le azioni e le reazioni che si manifestano durante il corso della simulazione.

Le applicazioni di ABM sono molteplici e particolarmente utili: solitamente sono utilizzate per studiare fenomeni troppo complessi per essere riprodotti fedelmente e/o dispendiosi in termini di costo e impegno. Ad esempio, lo studio dei comportamenti di una popolazione delimitata in una certa area (città, regione, nazione,…); la simulazione di reazioni tra molecole in una soluzione chimica o anche la gestione di sistemi distribuiti che possono essere rappresentati come nodi che richiedono e offrono servizi tra loro.

E' in questo contesto che nasce ABM.jl, un engine open source che mette a disposizione gli strumenti fondamentali per poter implementare una simulazione agent based. Tale tool è stato completamente sviluppato in Julia, un nuovo promettente linguaggio di programmazione, nato dalla mente di alcuni programmatori e studiosi del MIT di Boston, che promette prestazioni molto elevate (comparabili quasi a quelle del C) e al contempo codice snello e veloce da implementare.

In particolare, primo obiettivo del mio lavoro di tesi, è stato implementare due simulazioni ben note per valutare le performance di ABM.jl: AntsForaging e Boids.

La prima si occupa di rappresentare il comportamento di una colonia di formiche occupata nella ricerca di cibo; la seconda mostra il comportamento di un gruppo di volatili in una sezione di cielo, i quali seguono traiettorie di volo differenti in base alla presenza di simili nelle vicinanze.
L'implementazione è stata effettuata sfruttando le peculiarità del linguaggio Julia e adottando un paradigma object-oriented. Di ogni modulo di simulazione ne è stata progettata l'architettura secondo i principi di leggibilità e manutenibilità del codice. Ogni simulazione è, infatti, strutturata in due componenti principali, ognuna delle quali si occupa di modellare: i) la logica dell'agente e ii) la definizione dell'ambiente. Una terza componente, interna alla simulazione, si occuperà, invece, della fase di benchmark della simulazione stessa.
Secondo obiettivo del mio lavoro, è stato il design e l'implementazione di una interfaccia grafica che permettesse la visualizzazione, in tempo reale, dello stato della simulazione.
Test di benchmark sono stati effettuati considerando i principali competitor in ambito di simulation engine, tra cui MASON, NetLogo e RustAB. Nonostante tali test abbiano evidenziato come ABM.jl sia uno strumento che in termini di prestazioni ha un ampio margine di miglioramento, questa libreria rappresenta un'importante opportunità per i ricercatori che usano abitualmente Julia come linguaggio di programmazione, in quanto questi potranno avere la possibilità di lavorare su simulazioni basate ad agenti senza dover necessariamente imparare un diverso linguaggio.

Indice

  1. Introduzione
    1. Contesto applicativo
      1. ABM
      2. Julia
    2. Motivazioni ed Obiettivi
    3. Struttura della tesi
  2. ABM.jl
    1. Architettura
    2. GUI
  3. Simulazione Boids
    1. La logica
    2. L'architettura
    3. L'implementazione
      1. L'agente
      2. Script per il run
      3. Esecuzione grafica
    4. Prestazioni
      1. Benchmark
      2. Risultati
  4. Simulazione Ant Foraging
    1. La logica
    2. L'architettura
    3. L'implementazione
      1. L'agente
      2. Script per il run
      3. Esecuzione grafica
    4. Prestazioni
      1. Benchmark
      2. Risultati
  5. Conclusioni

Bibliografia

  1. Modello basato sull'agente. https://it.wikipedia.org/wiki/Modello_basato_sull'agente
  2. Tesi di Enrico Sisti, Un approccio Agent Based Model per la decisione nelle scelte strategiche, 2014.
  3. Julia (linguaggio di programmazione). https://it.wikipedia.org/wiki/Julia_(linguaggio_di_programmazione
  4. Compilatore just-in-time. https://it.wikipedia.org/wiki/Compilatore_just-in-time
  5. Julialang. https://julialang.org/
  6. Repository GitHub spagnuolocarmine/ABM.jl https://github.com/spagnuolocarmine/ABM.jl
  7. Boids. https://en.wikipedia.org/wiki/Boids
  8. Algoritmo delle colonie di formiche. https://it.wikipedia.org/wiki/Algoritmo_delle_colonie_di_formiche#Origine
  9. Universally unique identifier. https://it.wikipedia.org/wiki/Universally_unique_identifier
  10. Abstract Types in Julia. https://docs.julialang.org/en/v1/manual/types/index.html#Abstract-Types-1
  11. Matplotlib. https://matplotlib.org
  12. PyCall.jl. https://github.com/JuliaPy/PyCall.jl
  13. Funzione gui(). https://docs.juliaplots.org/latest/basics/
  14. Funzione scatter(). http://www.ece.northwestern.edu/local-apps/matlabhelp/techdoc/ref/scatter.html
  15. Animazioni in Julia. https://docs.juliaplots.org/latest/animations/
  16. MASON. https://en.wikipedia.org/wiki/MASON_(Java)
  17. Netlogo. https://it.wikipedia.org/wiki/NetLogo
  18. Tesi di Daniele De Vinco, Modello di simulazione basato su agenti con Rust, 2019.

Tesi

La tesi è consultabile qui di seguito: