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.
-
Modelli deterministici
Produzione, supply chain, portafoglio, prezzi, budget, localizzazione, ricarica dei veicoli elettrici, code: tutti i dati sono noti.
-
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.
-
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.
Indice completo
- Teoria: programmazione lineare e ottimizzazione non lineare — dualità, prezzi ombra, KKT, protocollo di sensitività
- Solver, modelli lineari e non lineari — costruire il modello, farlo girare, recuperare la soluzione, interpretare l'output
- Produzione e scorte multiperiodali — LP/QP
- Supply chain con congestione e CO₂ — LP/NLP
- Portafoglio di Markowitz — QP
- Pricing e revenue management — NLP
- Budget pubblicitario — NLP convesso
- Localizzazione continua — NLP convesso
- Ricarica di veicoli elettrici — LP/QP
- Code e capacità di servizio — NLP convesso
- Il Newsvendor e le sue varianti — LP stocastico
- VaR e CVaR — LP a scenari
- Arbitraggio e prezzatura — LP e dualità che prezza
Ottimizzazione e machine learning
Il corso
- 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 Furini — DIAG, Sapienza Università di Roma.