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)

  • Titolo seminario: Simulazione Basata su Agenti in Julia
  • Contenuto:  
    In questo seminario verrà presentata la libreria ABM.jl scritta in Julia, la quale offre strumenti utili per l'implementazione di simulazioni basate su agenti. Inizialmente ci saranno cenni sulla disciplina della simulazione basata su agenti e sul linguaggio di programmazione Julia: a cosa servono; perché studiarli;quali sono i vantaggi, etc. Si proseguirà con l'esposizione della struttura e del codice del progetto ABM.jl, soffermandoci sui moduli chiave di questo. A seguire la presentazione verterà sul mio contributo al progetto: le simulazioni Ant Foraging e Boids da me sviluppate. In questa sezione parlerò della fase di sviluppo, mostrando parti significative del codice e di come sono stati strutturati i moduli, per poi passare allo studio delle prestazioni e al confronto di queste con i risultati dati da lavori analoghi. Per concludere verranno fatte eseguire le simulazioni a scopo dimostrativo e si discuterà su cosa ha funzionato e cosa no in questo lavoro e su come migliorarlo in futuro.
  • Presentazione: La presentazione discussa in questo seminario è disponibile qui di seguito:

Secondo seminario (18 Ottobre 2019)

  • Titolo seminario: Presentazioni dei neolaureandi di Ottobre
  • Contenuto:
    Presentazione definitiva del mio lavoro di tirocinio e tesi svolto all'interno dell'ISISLab.
    Il "tweet" della tesi è il seguente: "Benchmarking su ABM.jl, un tool per lo sviluppo di simulazioni basate su agenti in Julia"
  • Presentazione: La presentazione discussa in questo seminario è disponibile qui di seguito:

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: