Vai al contenuto

Laboratorio di Ricerca Operativa

Materiale didattico ideato e sviluppato da Fabio Furini, professore associato al DIAG, Sapienza Università di Roma.

Modelli continui di ottimizzazione per l'Ingegneria Gestionale — la dispensa del corso in versione online, con codice Python/Gurobi, dati e casi di studio riproducibili.

Ogni capitolo parte da un problema gestionale concreto — quanto produrre, dove localizzare un servizio, quale prezzo fissare, quanto rischio accettare — lo trasforma in un modello di ottimizzazione, lo risolve con Gurobi chiamato da Python e, soprattutto, lo interroga: quanto vale un'ora di capacità in più? La soluzione resiste se i dati cambiano del 5%?

Tutti i modelli si possono eseguire subito nel browser: ogni capitolo ha il suo notebook che si apre in Colab, senza installare niente.

La domanda giusta

Alla fine di ogni esercitazione la domanda non è soltanto «qual è l'ottimo?», ma «quale decisione suggeriamo e quanto è robusta?». Tutti i modelli usano solo variabili continue: valgono dualità, prezzi ombra e condizioni KKT.

Le quattro parti del laboratorio

  • Strumenti


    Come si costruisce un modello, come si fa girare, come si leggono soluzione, prezzi ombra e costi ridotti: la teoria e il solver.

    I quattro capitoli

  • Modelli deterministici


    Produzione, supply chain, portafoglio, prezzi, budget, localizzazione, ricarica dei veicoli elettrici, code: tutti i dati sono noti.

    Gli otto problemi

  • Decisioni sotto incertezza


    Si decide prima di sapere: la regola del quantile, il rischio di coda e la dualità che dà il prezzo agli strumenti finanziari.

    I tre problemi

  • Ottimizzazione e machine learning


    La SVM come QP convesso e la regressione robusta come LP: margine, duale, support vector e punti di appoggio — senza librerie di ML.

    I due problemi

Indice completo

Strumenti

  1. Teoria: programmazione lineare e ottimizzazione non lineare — dualità, prezzi ombra, KKT, protocollo di sensitività
  2. Solver, modelli lineari e non lineari — costruire il modello, farlo girare, recuperare la soluzione, interpretare l'output

Modelli deterministici

  1. Produzione e scorte multiperiodali — LP/QP
  2. Supply chain con congestione e CO₂ — LP/NLP
  3. Portafoglio di Markowitz — QP
  4. Pricing e revenue management — NLP
  5. Budget pubblicitario — NLP convesso
  6. Localizzazione continua — NLP convesso
  7. Ricarica di veicoli elettrici — LP/QP
  8. Code e capacità di servizio — NLP convesso

Decisioni sotto incertezza

  1. Il Newsvendor e le sue varianti — LP stocastico
  2. VaR e CVaR — LP a scenari
  3. Arbitraggio e prezzatura — LP e dualità che prezza

Ottimizzazione e machine learning

  1. Support Vector Machine — QP
  2. Regressione robusta e quantile — LP

Il corso

  1. Organizzazione del laboratorio — laboratori, consegne, valutazione, errori da evitare

Notazione e classi di modelli

  • LP (Linear Programming): obiettivo e vincoli lineari;
  • QP (Quadratic Programming): obiettivo quadratico, vincoli lineari;
  • NLP (Nonlinear Programming): obiettivo o vincoli non lineari generali.

Un problema è convesso quando ogni minimo locale è anche globale: per gli LP è sempre vero; per QP e NLP dipende dalle funzioni.

Notazione usata in tutto il corso. Scalari e indici minuscoli (\(x_{it}\), \(\lambda\)); gli oggetti dei modelli (prodotti, canali, titoli, scenari…) sono numerati e gli indici corrono su insiemi enumerati esplicitamente, \(i \in \{1, 2, \dots, n\}\); conteggi interi (\(n \in \mathbb{Z}_{\ge 1}\)), dati razionali (\(\mathbb{Q}\)); vettori minuscoli in grassetto (\(\boldsymbol{x}\)), matrici maiuscole in grassetto (\(\boldsymbol{Q}\)). Variabili duali \(\pi_i\), costi ridotti \(\bar c_j\), scarti \(\bar s_i\): la barra indica i valori di una soluzione ammissibile, la tilde quelli di una soluzione ottima (\(\tilde x_j\), \(\tilde z\)). Nei modelli la dicitura è sempre «soggetto a», le variabili sono introdotte prima della formulazione e i vincoli che le definiscono chiudono il modello.

Scarica in PDF

  • 📘 Dispensa completa — 114 pagine: modelli, esempi svolti, casi di studio, analisi di sensitività
  • 📊 Slide del corso — 83 slide, tutto il materiale della dispensa in forma sintetica

Installazione e licenza

python3 -m pip install gurobipy

Il pacchetto pip include una licenza dimostrativa (fino a 2000 variabili e 2000 vincoli): sufficiente per tutti i modelli di questo laboratorio. All'avvio compare la riga Restricted license - for non-production use only: è normale.

Licenza accademica completa (gratuita): 1. registrarsi su https://portal.gurobi.com con l'email istituzionale (@uniroma1.it); 2. richiedere una Named-User Academic License; 3. eseguire il comando grbgetkey XXXXXXXX-... mostrato dal portale (serve la rete di ateneo o VPN); 4. la licenza viene salvata in ~/gurobi.lic e da quel momento non ci sono limiti di dimensione.

Verifica rapida:

import gurobipy as gp
print(gp.gurobi.version())        # es. (13, 0, 3)

Avvio rapido

python3 -m pip install gurobipy matplotlib pandas scipy   # scipy: solo funzioni statistiche
python3 python/esegui_tutti.py        # rigenera dati, risultati e figure

Oppure senza installare niente: ogni capitolo ha un notebook che si apre in Colab e gira nel browser.

Nel repository trovi tutti gli script Python e i dati in CSV dei casi di studio.


Materiale didattico di Fabio FuriniDIAG, Sapienza Università di Roma.