All Projects

Olfactory Navigation Framework illustration
Python

Olfactory Navigation Framework

In this project, I built a Python framework for the problem of Olfactory Navigation.

This framework is meant to allow a user to define the properties of an agent, and test its performance using simulations within an environment. To define an agent, the user needs to implement a limited set of functions (initialize_state, choose_action, update_state, kill). Then, the environment can be built from a numpy (.npy) or HDF5 (.h5) file. The source needs to be placed within the environment and the margins need to be defined. The environment supports having multiple olfactory layers, and multi-dimensional data. The environment provides some useful functions for the agent to interact with it such as: random_start_position, get_observation, at_source. Finally, the simulation function combines these elements together by hiding the exact position of the agent from it and moving it within the environment based on its chosen action. Once the simulation is done, the results can be saved very conveniently within readable csv files that can further be analyzed with pre-defined plotting functions.

Personal Website illustration
Web

Personal Website

This project is the current website you are viewing. After starting it thanks to a template, I customized it and added dynamic content for the projects thanks to JavaScript.

POMDP PBVI Exploration illustration
Python

POMDP PBVI Exploration

It is within this project I developped the code for my Master's thesis. It explores the concept of Partially-Observale Markov Decision Processes (POMDPs) and how to solve them using Point-Based Value Iteration (PBVI) algorihtms. These implementations were tested with a set of toy problems. Then it was applied to the problem of my thesis, namely: Olfactory Navigation. Some convenient classes were developped to instantiate easily POMPD models and solve it with PBVI solvers with the various flavours of it. Then when running simulations, the results can be plot very conveniently as well.

Multi-Agent Covid Simulation illustration
Java

Multi-Agent Covid Simulation

For this project, I set myself to develop a JADE multiagent system in order to simulate the spread of an illness (in this case COVID) within a population. This is inspired by the video of 3Blue1Brown (https://youtu.be/gxAaO2rsdIs). I want to implement various features to simulate as faithfully as possible the spread of a decease. These feature include the fact of having multiple containers, simulating different countries, from which agents can travel to and from. Or the ability to tune how contagious the disease is using parameters such as the contamination radius and probability. Then, the severeness of the disease using parameter of the average length of sickness. Then, to exploit the possibilities of the JADE platform, I attempted to make it possible to create containers on a different computer on the same network to share the computational load of the simulation between different hosts.

Surgeon Assistant Simulation Unity illustration
C#
Unity

Surgeon Assistant Simulation Unity

In this project, I put to practice about how to make games in Unity. For this, I implemented a 1st person simulator aimed at training in an entertaining fashion the job of a Surgeon's Assistant. For this, the player has to correctly remember what the tool the surgeon asks look like in order to bring it to him in a timely fashion. There are multiple levels implemented that each increase the amount of tools asked and the amount of tools available to choose from.

Machine Translation illustration
Python

Machine Translation

I explore 3 different techniques to perform Machine Translation. I attempt to implement and compare implementations of a Statistical, Rule-Based and Neural Machine Translation. I attempt to implement these techniques from scratch (not using libraries to do the whole thing) to understand how they work on a deeper level. I did this in python and use as dataset of sentence correspondances from movies subtitles EN <-> IT coming from opensubtitles.org .

Optimization of Mandelbrot set computation illustration
C++

Optimization of Mandelbrot set computation

In this project, I attempted optimize the computation of the Mandelbrot set. First a profiling has been performed to find out the hotspot of the computation, then the different parallelization and vectorization techniques learned were applied. These techniques were implemented with OpenMP, MPI, a hybrid of both, and finally CUDA. Within these implementations, different parameterizations were tried to find out the most optimal. Finally, all the runtimes were compared among each other to see if the theory matches to practice and to determine which was the most optimal implementation.

COVID Data Visualization illustration
Web
D3JS

COVID Data Visualization

In this project, we built a website where we built 11 dynamic plots using he D3JS library. These plots were to the visualize different aspects of the COVID-pandemic. It was made as a group project for the Data Visualization class. We tried incorporating the various plotting techniques we learned, from bar charts, to line graphs, or geographical data.

Trento Tree Project Visualization illustration
Web
D3JS

Trento Tree Project Visualization

This project was made for the course of Data Visualization. We got to make a website with a new page for each different assignment (5). Each week, for each assignment, we got to use a different plotting technique. The first was about bar graphs. Then, we explored distribution and correlation plots. Then data on a map, and temporal data. And finally a Sankey Diagram.

Reinforcement Learning for the game Hex illustration
Python

Reinforcement Learning for the game Hex

In this project, I explore building an Agent able to play the board game Hex.

Hex is 2 player where the goal is to link it's assigned two sides of the field. On interesting challenge about this game is that, due to the hexagonal architecture of the grid, there will always be a winner and a looser, there is no ties. It is usually played on a 11 by 11 or 13 by 13 board, which is a state space larger than the one of chess.

I explore the building of the agents we built in class to this board-game. I first build a trivial random play agent that is used to play against other agents. Following this I build a Minimax Agent with a limited search depth. Then, getting into reinforcement learning, I build a TQ-learning agent. And finally I build a deep-Q learning agent.

Speech Emotion Recognition illustration
Python

Speech Emotion Recognition

The topic of this project is emotion recognition from speech signals. To achieve that, a model can be trained using an audio database containing a variety of emotions (either basic or compound) for different speakers, e.g., EMODB (German), EMOVO (Italian), IEMOCAP (English), etc. Low-level descriptors can be computed either manually or using a dedicated tool, such as openSMILE, which provides a complete set of features for each specific audio recognition. Also, feature embedding using simple/variational autoencoders can be used. Training can be achieved using neural networks, either shallow or deep. The final output should be a system able to identify emotions based either on a basic psychological model (basic emotions) or using a bi-dimensional representation (positive/negative valence and high/low activation).

Computer Vision Air Drawing illustration
Python

Computer Vision Air Drawing

In this project, I explored a computer vision library meant to help the annotation of body-parts of some frames and interpolation to further data. This was used to generate a sequence of points of my finger tracing out letters. Then, after identifying the start and end frames of each letters in the video, we attempted to train a Neural Network using the emnist dataset to label the letters I drew in the air.

K Q-Flats  illustration
Python

K Q-Flats

A project made in the context of the Machine Learning class of Computer Science Master's Degree at the Universita di Genova. It explores the clustering algorithm known as k q-flats. This algorithm is a generalization of the k-means algorithm.

Kalman Filter for Object Tracking illustration
Python

Kalman Filter for Object Tracking

In this project, I implemented a Kalman filter to track the position of an object in a video. Namely, I used two different videos of a pool player making a shot and tracking the position of the ball after this impact. Doing so required computer vision and pre-processing to mask-out all the irrelevant elements and in order to find the center of the balls. After the centers of the objects have been found for each frame in the video, the path in integrated using a Kalman filter.

Crazy Putting Golf Simulator illustration
Java

Crazy Putting Golf Simulator

Pentominoes illustration
Java

Pentominoes

Webdesign websites illustration
Web

Webdesign websites