Skip to content

Projects

Things I've built, in and out of work.

Memory-Efficient Training with Block Coordinate Descent

Ph.D. research on block coordinate descent methods, one with a selective block rule, for training under tight GPU memory: only the active block keeps gradients and optimizer state, so memory drops to 2M + 16M/D bytes (M parameters, D blocks) — up to 95% less optimizer memory than Adam/AdamW. Benchmarked in fine-tuning and post-training (SFT, DPO) of language and vision models such as RoBERTa-Large and ViT-H, and extended to multi-GPU training with PyTorch FSDP. Ongoing.

  • PyTorch
  • FSDP
  • SFT
  • DPO
  • Optimization

Ground States of Disordered Spin Models

Recasts the 3D random-field XY model as a quadratic problem on a product of unit circles, so Riemannian local solvers apply, and drives them with Basin Hopping moves tailored to the physics. Finds lower-energy configurations than parallel tempering, simulated annealing and differential evolution within the same budget. Joint work with the Physics Dept. at Sapienza.

  • Python
  • Riemannian Optimization
  • Global Optimization
  • Statistical Physics

Enhanced Armijo Line Search for Deep Learning

A stochastic line search that reads the step size off the loss instead of a schedule: when an epoch fails to improve, it searches along the direction the epoch travelled, on a random sample of the training set. Beats Adam on validation loss in long regression runs and, with Adam, is the only optimizer tested that trains a 62M-parameter diffusion U-Net to recognisable digits. Code behind my M.Sc. thesis.

  • PyTorch
  • Optimization
  • Line Search
  • Diffusion Models

Repair-Crew Allocation for Rome's Power Grid

With ENEA, Italy's national energy agency: a MILP model in Gurobi, combined with a machine-learning predictor of network criticality, that allocates repair crews on Rome's power-distribution network during large outages. I also supervised a research intern on the project.

  • Gurobi
  • MILP
  • Machine Learning
  • Energy

Clinical NLP for Italian Discharge Letters

With Sant'Andrea Hospital in Rome: a BERT-style model fine-tuned with LoRA that tags Italian discharge letters with labels from the clinic's manual (80% F1). Deployed on the hospital's own servers, so patient data never leaves them.

  • Transformers
  • LoRA
  • NLP
  • Healthcare

Satellite Collision Risk Prediction

Predicts the final collision risk of an orbital conjunction at least two days before closest approach, from Conjunction Data Messages alone. A cascade of 57 SVMs with MLP refiners scores 0.559 on the ESA Collision Avoidance Challenge test set — 2nd of 97 teams and 1st among fully ML-based entries. Team of 3; extended to satellite–debris conjunctions with the Italian Space Operations Command.

  • scikit-learn
  • PyTorch
  • SVM
  • Space

Next-POI Recommendation with Hierarchical GNNs

Extends HMT-GRN (SIGIR '22) with user-clustering embeddings and top-k similar-user aggregation, with GAT and LSTM layers written from scratch. Acc@5 0.336 → 0.410 and MRR 0.249 → 0.308 on Foursquare NYC; Acc@5 0.275 → 0.345 on Gowalla. Co-first author of the technical report.

  • PyTorch
  • Graph Neural Networks
  • GAT
  • LSTM

agent-tools

Python command-line tools built to be driven by people and AI agents alike: one JSON result on stdout, JSON job specs as input, documented exit codes, no prompts outside a terminal. The first package transcribes files, YouTube videos and live audio with faster-whisper or Voxtral, on CPU or GPU.

  • Python
  • uv
  • CLI
  • Speech-to-Text
  • AI Agents

Mathematical Programming for Teaching

The Operations Research lab I teach at Sapienza: ILP and LP models in Gurobi for knapsack, bin packing, cutting stock with column generation, TSP with lazy subtour constraints, sudoku, N-queens and graph coloring — written to be read by students, with animated solutions.

  • Gurobi
  • Python
  • Integer Programming
  • Teaching

Aindo Hackathon 2024 — Winning Solution

Predicted which of five rooms a resident is in at every timestamp from indoor sensors (motion, temperature, humidity, CO₂, gas). Random forests on variance-based features plus an LSTM for the temporal signal. 1st place in a team of 5, €3,000 prize.

  • PyTorch Lightning
  • LSTM
  • Random Forest
  • IoT

Kinodynamic Planning for a 4-Wheel-Steering Robot

Kinematic model and KRRT* motion planner for the Neobotix MPO-700, whose four independently steered wheels must agree on a common center of rotation. Plans in 0.12 s in open space and still solves tightly constrained maps.

  • Python
  • Motion Planning
  • RRT*
  • Robotics

AncientSociety

The Web3 browser game I co-founded and led: NFT buildings, resource management, staking and an in-game marketplace on Polygon. React and Node.js with Solidity smart contracts, built with a team of 6 — 5,000+ players and ~$700k in revenue in its first 8 months.

  • React
  • Node.js
  • Solidity
  • Polygon

Multilingual NLP

Seven NLP tasks, from named entity recognition and language identification across 20+ languages to semantic similarity and visual–linguistic reasoning with CLIP and BLIP, built on BERT, RoBERTa, DistilBERT and ALBERT.

  • PyTorch Lightning
  • Transformers
  • NLP
  • CLIP

Human–Robot Interaction Games

Interactive Tic-Tac-Toe and a Rock-Paper-Scissors variant for Sapienza's robots, combining speech recognition, hand-gesture classification, emotion detection, a minimax Tic-Tac-Toe player and mental models that adapt to the human's behaviour.

  • Python
  • HRI
  • Computer Vision
  • Speech

Classroom Assignment for DADA Schools

Multi-objective MILP that assigns classrooms to 102 teachers and 53 rooms across a weekly timetable, minimizing the rooms each subject sector uses while balancing teaching load. Two models with different objectives, solved with Gurobi.

  • Gurobi
  • MILP
  • Multi-objective Optimization

Continuous Optimization Algorithms

A sequential penalty method with truncated Newton and Armijo line search, with KKT checks, alongside simulated annealing for global search — sharing one library of problems, derivatives and line searches.

  • Python
  • Nonlinear Optimization
  • Line Search

Lightweight YOLO Object Detection

Compact YOLOv1 and YOLOv2 "tiny" variants implemented in PyTorch and benchmarked against YOLOv8 on inference speed versus detection accuracy.

  • PyTorch
  • Computer Vision
  • Object Detection

Multi-Robot LiDAR Simulation

A ROS simulator in C++ that drives several LiDAR-equipped robots at once, with configurable robot and sensor parameters and live RViz visualization.

  • C++
  • ROS
  • LiDAR
  • Simulation

Pick & Delivery Robot

An autonomous LiDAR robot that picks up and delivers packages between rooms of a department building, using the ROS navigation stack, with a web interface that queues concurrent requests from several users.

  • ROS
  • Navigation
  • Web