MOP-ND ๐Ÿšด

GR
Gianluca Rea

๐Ÿšด Overview

MOP-ND is a university data analytics and optimization project where I implemented a Multi-commodity Orienteering Problem with Network Design (MOP_ND) model for the "Data Analytics and Data Driven Decision" course at the University of L'Aquila.

The project studies how to design high-quality origin-destination itineraries for different classes of cycle-tourists, inspired by the paper "Designing single origin-destination itineraries for several classes of cycle-tourists".

๐Ÿฆพ Repository

Code and notebooks: github.com/gianlucarea/mop-nd

Why this project matters

Route planning in cycling tourism is a multi-objective problem: distance, attractiveness, and user preferences often pull in different directions. The goal of this project was to model that tradeoff and compute practical itineraries for multiple user groups in a shared network.

In practice, the work focuses on:

  • โ†’Designing routes for multiple tourist classes
  • โ†’Optimizing network design decisions for cycling scenarios
  • โ†’Balancing route quality, travel constraints, and preferences
  • โ†’Maximizing overall satisfaction across itineraries

๐Ÿ› ๏ธ Tech Stack

  • โ†’Python for model implementation and experimentation
  • โ†’Jupyter Notebooks for interactive analysis
  • โ†’Gurobi as the mathematical optimization solver
  • โ†’NumPy for numerical operations
  • โ†’NetworkX for graph and network modeling
  • โ†’Matplotlib for visualizing outputs and comparisons
  • โ†’Itertools for combinatorial utilities

Modeling workflow

The project is organized as an experimentation workflow in notebooks:

  1. โ†’Define the network and candidate routes.
  2. โ†’Encode constraints and objective terms for each tourist class.
  3. โ†’Run optimization with Gurobi.
  4. โ†’Compare candidate solutions and interpret tradeoffs.
  5. โ†’Visualize resulting itineraries and key metrics.

๐Ÿงช Getting Started

Requirements:

  • โ†’Gurobi (optimization solver)
  • โ†’NumPy
  • โ†’NetworkX
  • โ†’Matplotlib
  • โ†’Itertools
  • โ†’Jupyter

The repository is notebook-driven and aimed at reproducible analysis. After installing dependencies (and a valid Gurobi setup), open the notebooks and execute cells in order to reproduce model runs and charts.

๐Ÿ“š Learn More

For additional context on the optimization formulation, refer to the linked paper and the implementation notebooks in the repository.

What I learned

  • โ†’How to translate research-style formulations into executable optimization models
  • โ†’How to reason about tradeoffs between competing objectives in network design
  • โ†’How to structure notebook experiments so results are easier to compare and explain

๐Ÿค Contributing

Contributions are welcome. If you want to improve the formulation, datasets, or notebook clarity, feel free to open a pull request.

  1. โ†’Fork the repository
  2. โ†’Create a feature branch: git checkout -b feature-name
  3. โ†’Commit your changes: git commit -m 'Add new feature'
  4. โ†’Push to the branch: git push origin feature-name
  5. โ†’Open a Pull Request

Please ensure your code follows the existing style and includes appropriate documentation.

๐Ÿ“ง Contact

For questions, feedback, or collaboration opportunities, feel free to reach out:

This project reflects my interest in optimization, applied data science, and decision-support systems for real-world mobility problems.