Gli autobus che nessuno conta
Roma pubblica l'orario dei bus notturni, ma non dice quanti mezzi servano per farlo girare. Ne servono 165 — e ventuno si risparmiano solo lasciando che un autobus cambi linea.
- Metodo
- Minimo ricoprimento con cammini di un grafo aciclico (teorema di Dilworth)
- Strumenti
- Python, SciPy, HiGHS, OSRM
- Fonte dati
- Roma Servizi per la Mobilità — orario in formato GTFS · OpenStreetMap — rete stradale (ODbL), tempi via OSRM
- Risultato
- 165 — gli autobus che servono per le 682 corse della notte
Di un autobus si sa quasi tutto. A che ora parte, dove passa, quanto ci mette: Roma pubblica il suo orario in formato aperto, quello che alimenta le app di navigazione, e da lì si legge ogni singola corsa della città. Quello che non si sa è una cosa molto più semplice, e molto più costosa: quanti autobus servono per farle, tutte.
Nel file c’è persino il campo apposta. Si chiama block_id e serve a dire
«queste corse le fa lo stesso mezzo, in quest’ordine». È vuoto. Non per
qualche corsa: per tutte e 179.208.
Così l’unico modo per sapere quanti mezzi servono è rifare il conto da capo. Ed è un conto che si può fare esattamente, senza approssimazioni — cosa che, in questa rivista, capita raramente.
Nella notte fra sabato e domenica la rete notturna di Roma fa 682 corse su 32 linee. Quanti autobus servono, al minimo, per farle tutte?
Prova a dire un numero
165 autobus
Nel momento di punta ce ne sono 139 in giro con i passeggeri a bordo. Gli altri ventisei esistono solo perché un mezzo che finisce a Laurentina non fa in tempo ad essere a Battistini.
01La sfida
Un autobus può fare la corsa B dopo la corsa A a una condizione sola: che gli basti il tempo per andare da dove finisce A a dove comincia B. Niente di più.
Scritta così sembra banale, e in un certo senso lo è. Ma se si tira una freccia fra ogni coppia di corse compatibili si ottiene una rete, e in quella rete un autobus è esattamente un cammino: entra da qualche parte, salta di corsa in corsa, esce. Coprire tutte le corse con il minor numero di autobus vuol dire coprire tutta la rete con il minor numero di cammini.
La notte scelta è quella fra sabato 25 e domenica 26 luglio 2026: 682 corse,
32 linee — i bus numerati più le linee nMA, nMB, nMC che sostituiscono la
metropolitana quando chiude — e 37 capolinea.
Il confronto è con la regola che verrebbe naturale: ogni autobus resta sulla sua linea, fa avanti e indietro, e non si mescola con le altre.
02Gli ingredienti
- L’orario ufficiale di Roma in formato GTFS, quello che il Comune pubblica come dato aperto. Da ogni corsa servono solo quattro cose: quando parte, da dove, quando arriva, dove.
- I tempi di trasferimento a vuoto fra i 37 capolinea, presi sulla rete stradale vera con OSRM. A notte fonda le strade sono libere, quindi i tempi di percorrenza liberi sono la descrizione giusta: il capolinea mediano dista 21,4 minuti dagli altri, il più lontano quasi cinquanta.
- Una scoperta nei dati che ha cambiato il conto. Nel gergo di questi file, una «giornata di servizio» che comincia di sabato contiene due notti diverse: le ore piccole del sabato mattina, che in realtà sono la notte del venerdì, e quelle della domenica mattina, che sono la notte del sabato. In mezzo ci sono sedici ore in cui non passa niente. Sono due problemi separati, e trattarli come uno solo sarebbe stato un errore.
03Il verdetto
Ventuno autobus, e quello che costano
Stesse 682 corse, stesso orario: cambia solo se un mezzo può passare da una linea all'altra
Vedi i dati in tabella
| Ogni mezzo sulla sua linea | Mezzi liberi di cambiare linea | |
|---|---|---|
| Autobus necessari | 186 | 165 |
| Chilometri a vuoto | 123 | 233 |
Il risparmio di ventuno mezzi si paga con 110 chilometri in più percorsi vuoti.
Elaborazione sull'orario GTFS di Roma Servizi per la Mobilità
Lasciare che un autobus finisca su una linea e riparta su un’altra — l’interlinea, in gergo — vale ventuno mezzi, l’undici per cento della flotta. Non è gratis: quei ventuno si comprano con 110 chilometri in più percorsi a vuoto, perché un mezzo che cambia linea di solito deve attraversare la città per farlo.
È uno scambio che conviene senza discussione. Centodieci chilometri di gasolio costano una frazione minima di quello che costa un autobus in più — comprarlo, tenerlo in officina, e soprattutto trovare qualcuno che lo guidi.
Ma il numero davvero interessante è un altro, ed è quello di cui non parla nessuno.
Quanto costa una pausa
Minuti che l'autobus deve stare fermo al capolinea prima di ripartire. Nessun passeggero se ne accorge. Ogni posizione è un modello risolto all'ottimo.
l'ipotesi usata in questo caso
Tutti gli scenari in tabella
| Sosta al capolinea | Autobus necessari | |
|---|---|---|
| 0 minuti | 145 | irrealistico: nessun margine di recupero |
| 3 minuti | 148 | il tempo di girare il mezzo |
| 5 minuti | 165 | l'ipotesi usata in questo caso |
| 10 minuti | 178 | una pausa vera per chi guida |
| 15 minuti | 191 | |
| 20 minuti | 199 | cinquantaquattro mezzi più che a zero |
Sei modelli risolti all'ottimo sulle stesse 682 corse
Fra zero e venti minuti di sosta al capolinea la flotta passa da 145 a 199 autobus: cinquantaquattro mezzi, il trentasette per cento in più. È il parametro più caro dell’intero piano, e non è una scelta di servizio — nessun passeggero si accorge di quanto sta fermo il bus al capolinea. È margine di recupero per i ritardi, ed è la pausa di chi guida.
Chi discute di quanto costa il servizio notturno senza dire quanti minuti di sosta ha ipotizzato, in realtà non ha detto niente.
Il modello, per chi vuole la matematica
Siano ai e di l’arrivo e la partenza della corsa i, τ(·,·) il tempo di trasferimento fra capolinea e L la sosta minima. Un mezzo può fare j dopo i se e solo se
ai + τ(finei, inizioj) + L ≤ dj
Siccome questa condizione implica di < dj, il grafo degli archi ammissibili è aciclico, e il turno di un autobus è un cammino. Il minimo numero di cammini che copre tutti i nodi vale, per il teorema di Dilworth,
flotta minima = numero di corse − massimo abbinamento
dove l’abbinamento è calcolato sul grafo bipartito che mette da un lato «il successore della corsa i» e dall’altro «il predecessore della corsa j».
Ed è qui che il caso si stacca da tutti gli altri di questa rivista. La matrice dei vincoli di un abbinamento bipartito è totalmente unimodulare: i vertici del rilassamento continuo sono già interi, quindi non serve ramificare e il problema si risolve in tempo polinomiale. Non è un’affermazione da prendere per buona — nel codice il rilassamento viene risolto davvero, sulla linea più carica, e si controlla quante variabili escono frazionarie. Zero.
Gli obiettivi sono due, in ordine: prima la flotta, poi — a parità di flotta — i chilometri a vuoto. Si ottengono da un unico problema di assegnamento prezzando l’arco inesistente a un valore così alto da rendere sempre preferibile un collegamento in più.
Vale la pena dire perché questa fortuna è rara. Basta aggiungere un vincolo realistico qualsiasi — capienza dei depositi, tipi di mezzo diversi, turni di chi guida — e la struttura si rompe: il problema torna NP-difficile come tutti gli altri.
04Dove il gioco finisce
Il modello programma i mezzi, non le persone. Non ci sono turni, pause, cambi di guida, né uscite e rientri dal deposito: ognuna di queste cose può solo aggiungere autobus, mai toglierne, quindi 165 è un pavimento, non una stima di quello che l’azienda usa davvero. Gli autobus sono trattati come intercambiabili, mentre alcune linee hanno vincoli di mezzo. Ogni corsa è supposta puntuale, e l’unico margine per i ritardi è la sosta al capolinea. I tempi a vuoto sono stime di OSRM sulla rete OpenStreetMap, non i tempi dell’azienda. I chilometri di uscita e rientro dal deposito non sono contati, il che sottostima il vuoto totale — ma non la flotta, perché avvengono fuori dall’orario di servizio. E si tratta di una notte sola di una rete che è piccola apposta: la rete diurna, con linee più lunghe e più frequenti, non si ricava da questa per proporzione.
Quello che resta in piedi sono le due cose strutturali. Un autobus libero di cambiare linea vale circa un nono della flotta notturna. E la sosta al capolinea è il numero più caro fra quelli che nessuno guarda.