dipartimento di ingegneria corso di laurea magistrale
TRANSCRIPT
DIPARTIMENTO DI INGEGNERIA
CORSO DI LAUREA MAGISTRALE
INFRASTRUTTURE VIARIE E TRASPORTI
A.A. 2014-2015
RELAZIONE DI FINE TIROCINIO
TUTOR UNIVERSITARIO: Prof. Marco Petrelli
STUDENTE: Antongiulio Piscitelli
Introduzione
Con la presente si relaziona in merito all’esperienza di tirocinio svolta all’interno
dell’università nei mesi di ottobre 2015 e gennaio 2016. Scopo di tale tirocinio è
stato l’acquisizione e il consolidamento di conoscenze base per l’utilizzo del
software MATLAB in vista del lavoro di tesi svolto in parte presso l’università KU
Leuven in Belgio. Per lo studio del software si è partiti dalle funzioni base e gli
operatori logici che governano questo ambiente, in seguito è stata approfondito
la parte della scrittura degli algoritmi in relazione all’argomento della tesi ossia
la compilazione di un modello che permetta la simulazione di un sistema di
trasporto pubblico su gomma in un’area ad alta densità abitativa.
MATLAB
Matlab è un software utilizzato per diverse applicazioni che vanno dal calcolo
numerico fino alla costruzione di modelli complessi e alla loro rappresentazione
grafica. Tale programma si basa sulla successione di semplici funzioni
algebriche ed operazioni logiche che assemblate insieme permettono la
costruzioni di architetture più articolate.
Le funzioni più semplici sono gli operatori fra scalari (somma, sottrazione,
moltiplicazione, divisione e potenza); ogni operazione effettuata può essere
registrata nel database con un nome e da qui essere richiamata e modificata a
seconda della necessità. Lo scopo principale per cui è stato creato questo
programma è facilitare i calcoli matriciali (il nome MATLAB è un’abbreviazione
di MATrix LABoratory): permette infatti di svolgere tutte le operazioni fra matrici
(e vettori), combinarne diverse in un algoritmo e registrare i risultati.
Lo stesso programma mette a disposizione una enorme quantità di funzioni
complesse già implementate e richiamabili mediante nomi convenzionali: i
cosiddetti file function. Allo stesso modo è possibile reperire in rete funzioni
elaborate dagli stessi utenti del programma e utilizzabili gratuitamente.
Come esempio viene riportata una function Dijkstra, utilizzata spesso nei
modelli descritti nei prossimi paragrafi:
I file di questo tipo sono identificati dalla seguente sintassi:
- Il comando function richiama la tipologia del file
- Le variabili tra parentesi quadre rappresentano l’output dell’algoritmo
- Il nome dopo il segno di uguaglianza è il nome da utilizzare per
richiamare la funzione e deve essere tassativamente lo stesso nome con
cui si salva il file nella memoria del computer
- Le variabili tra parentesi rappresentano gli input dell’algoritmo.
Nel caso della funzione Dijkstra le variabili di input sono:
- AorV: matrice rete i cui elementi sono diversi da 0 se rappresentano un
arco
- xyCorE: matrice dei costi dimensionalmente equivalente alla matrice rete
- SID: scalare, nodo partenza
- FID: scalare, nodo destinazione
Mentre gli output forniti sono:
- Costs: scalare, costo del percorso più breve
- Paths: vettore, sequenza dei nodi per giungere a destinazione (FID)
partendo dall’origine (SID).
L’utilizzo di una function non permette il salvataggio delle variabili utilizzate
all’interno della stessa ma fornisce esclusivamente le variabili di output.
L’altra tipologia di file è detta script. In questo caso non sono necessarie
particolari forme sintattiche e inoltre le variabili utilizzate durante il processo
vengono salvate nel workspace, permettendo all’utente di richiamarle o
esplorarle in uno spazio separato. I file script sono composti da operazioni e
operatori logici in sequenza che a seguito del comando run vengono eseguiti
dal prompt dei comandi.
Sia i file script che i file function devono essere salvati e aperti esclusivamente
da MATLAB e sono identificati dall’estensione .m.
La versione del sofware Matlab utilizzata è la 2012b a 32bit in ambiente
Windows.
Applicazione per il lavoro di tesi
Come già accennato lo studio del software è stato necessario in considerazione
del suo utilizzo per la modellizzazione di sistemi di trasporto pubblico urbano e
in particolari di un sistema ad itinerari fissi ed un sistema a chiamata, entrambi
elaborati sulla medesima rete urbana.
Il punto di partenza è stato proprio la costruzione della rete di trasporto e la sua
rappresentazione in ambiente Matlab. La rete elaborata per la costruzione dei
modelli è composta da 24 nodi (figura 1), ognuno dei quali è una possibile
origine e/o destinazione degli spostamenti; gli archi orientati che collegano i vari
nodi rappresentano le infrastrutture viarie.
Figura 1 Rappresentazione grafica della rete
La rete viene descritta analiticamente da una matrice n x n, con n pari al
numero di nodi, nel quale ogni elemento aij rappresenta la distanza tra il nodo i
e il nodo j in chilometri (figura 2).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 0.5 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 0.0 0.5 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
4 0.0 0.0 0.3 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5 0.0 0.0 0.0 0.3 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
6 0.0 0.0 0.0 0.0 0.3 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
7 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
8 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
10 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
11 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0
12 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.3 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0
13 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
14 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0
15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0
16 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.5 0.0 0.0 0.0 0.5 0.0 0.0 0.0
17 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.5 0.0 0.0 0.0 0.5 0.0 0.0
18 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.5 0.0 0.0 0.0 0.5 0.0
19 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5
20 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0
21 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.5 0.0 0.5 0.0 0.0
22 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.5 0.0 0.5 0.0
23 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.5 0.0 0.5
24 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.5 0.0
Figura 2 Matrice che rappresenta la rete
Per introdurre questa matrice nell’algoritmo si utilizza il comando load che
permette di caricare le variabili in ambiente MATLAB a partire da semplici file in
formato testo. Si è utilizzata la stessa funzione anche per caricare le matrici
relative alla domanda di trasporto e le variabili del servizio, quali frequenza delle
linee, capacità dei mezzi e velocità di percorrenza, precedentemente salvate in
un file dati.
Modello per il sistema ad itinerari fissi
Il primo modello elaborato è quello per la rappresentazione di un sistema di
trasporto pubblico su gomma ad itinerari fissi ed invariabili. Oltre a lavorare
sugli input descritti è stato dunque necessario definire le linee di autobus che
operano nell’area. Seguendo la stessa metodologia applicata per la costruzione
della rete, sono stati aggiunti nuovi nodi e archi che però in questo caso
rappresentano l’infrastruttura stradale utilizzata dai mezzi pubblici. Ulteriori
collegamenti vengono creati fra i nodi della rete e i nodi fermata per permettere
agli utenti di salire e scendere dai mezzi. La rete completa per questo sistema
si mostra come in figura 3.
Figura 3 Rete completa di linee di trasporto pubblico
A rete completa è rappresentata analiticamente dalla matrice seguente:
Figura 4 Matrice rete completa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
1 0 0.5 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0.5 0 0.5 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0.5 0 0.25 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -2 0 0 0 0 0 0 0 0
5 0 0 0 0.25 0 0.25 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8 0.5 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0
9 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10 0 0.5 0 0 0 0 0 0 0.25 0 0.5 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11 0 0 0.5 0 0 0 0 0 0 0.5 0 0.5 0 0 0 0 0.5 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 0 0 0 0 0.5 0 0 0 0 0 0.5 0 0.25 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
13 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
14 0 0 0 0 0 0 0.5 0 0 0 0 0 0.25 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0 0.5 0.5 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 -2 0
17 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0.5 0 0 0 0.5 0 0 0 0 0 -1 0 0 0 -1 0 0 0 -2 0 0 0 0 0 -2
18 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0.75 0 0.5 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0.5 0 0.5 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 0 0 0 0
21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0
22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0.5 0 0 0 0.5 0 0.5 0 0 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0
24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0.5 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0
30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0
33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.25 0 0 0 0 0 0 0 0
34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0
38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5
43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
Ogni elemento della matrice è così caratterizzato:
- 0 se i nodi i e j non sono collegati o se sono lo stesso nodo;
- Distanza in chilometri fra i e j, se i nodi in questione sono collegati; in
particolare sono evidenziati in rosso gli archi di discesa, in viola gli archi
utilizzati dai mezzi della seconda linea e in arancione i mezzi utilizzati
dagli autobus della prima linea
- Numero della linea a cui permettono l’accesso per gli archi di salita
(evidenziati in verde);
- 0.75 km come penalità di transfer (arco evidenziato in blu). Il modello
riconosce questo link come pedonale e quindi impone una penalità pari a
10 minuti;
Una volta definiti gli input si passa alla scrittura del modello in MATLAB,
suddividendolo in due fasi: la fase di pianificazione dello spostamento e la fase
di simulazione.
Nella fase di pianificazione vengono costruiti i database su cui si opererà
durante la simulazione:
- Lista degli eventi (event_list): ogni
elemento della lista degli eventi
presenta un dato temporale e un codice
per identificare l’evento in questione
(figura 5); questo codice può essere un
numero positivo per eventi legati ai
gruppi di utenti, un numero negativo
per eventi legati agli autobus e 0 per
eventi legati alla generazione di nuova
domanda;
Figura 5 Lista eventi
- Database dei gruppi di utenti (group_register): un database con tante
righe quanti sono i gruppi di utenti che hanno pianificato l’utilizzo delle
linee di autobus durante la fase preliminare. Per ogni gruppo di utenti
viene registrato il percorso da effettuare e a quale nodo dello stesso è
giunto, aggiornando la posizione ad ogni nuovo evento che riguarda il
gruppo (figura 6).
Figura 6 database dei gruppi di utenti
- Database degli autobus (bus_register): un database con tante righe
quanti sono gli autobus necessari per espletare il servizio. In questo
database vengono registrati il grado di occupazione, la posizione attuale,
la linea di appartenenza e, per ogni gruppo presente sull’autobus, codice
e fermata di discesa (figura 7). Questo database viene aggiornato ad
ogni evento che interessa i veicoli.
Figura 7 Database degli autobus
La fase della simulazione si basa sul database event_list: il modello estrae il
primo evento temporale, lo processa in relazione alla sua tipologia e se
necessario crea un ulteriore evento legato allo stesso codice. La simulazione
termina quando tutti gli utenti sono giunti a destinazione (ciclo while.)
2.1. Modello per il sistema a chiamata
Ipotesi fondamentale da cui si è partiti per la definizione del sistema a chiamata
è la conoscenza a priori dell’intera domanda giornaliera. Questa ipotesi viene
spesso introdotta per studi di questo tipo ed è stata utilizzata anche in diverse
applicazioni reali di questi sistemi: operativamente si ipotizza che le richieste di
trasporto giungano nel sistema entro il termine della giornata precedente al
servizio, in modo da ottimizzare lo stesso già prima del suo inizio. La domanda
di trasporto, la sua distribuzione e la rete sono le stesse dello scenario
precedente in modo da rendere possibile il confronto tra i due sistemi.
Il problema principale riscontrato è stato scrivere un algoritmo che permettesse
di costruire, utente dopo utente, il percorso più efficiente per servire tutta la
domanda di trasporto. Si è optato per un metodo di inserzione euristica che
consiste nel cercare la posizione migliore in cui inserire un utente in un
percorso dell’autobus provando tutte le possibili configurazioni ed estraendo
quella di costo minimo. Per comodità si è diviso l’algoritmo in più sub-algoritmi a
seconda se i nodi partenza e arrivo di un utente fossero già presenti nel
percorso dell’autobus.
Di seguito una breve descrizione dei sub-algoritmi utilizzati:
Sub-algoritmo 1.1: i nodi origine e destinazione sono entrambi presenti nel
percorso
Dato che i nodi sono già presenti nel percorso analizzato si programma la salita
e la discesa del gruppo di utenti negli stessi nodi e si modifica il numero di
passeggeri a bordo per quella tratta. In seguito si verificano i vincoli di capacità
del mezzo e di tempo massimo per lo spostamento di ogni gruppo presente
sullo stesso veicolo.
Sub-algoritmo 1.2: solo il nodo origine è già incluso nel percorso
Si programma la salita del gruppo nel nodo origine che è già presente e si
inserisce il nodo destinazione in tutte le posizioni possibili fra la posizione del
nodo origine e l’ultimo nodo presente nel percorso. La configurazione di minor
costo che rispetta i vincoli sarà registrata come possibile soluzione.
Sub-algoritmo 1.3: solo il nodo destinazione è già incluso nel percorso
In maniera simile all’algoritmo precedente viene pianificata la discesa del
gruppo nel nodo destinazione e viene provato l’inserimento del nodo origine in
tutte le posizioni possibili. Anche in questo caso la configurazione di minor
costo che rispetta i vincoli viene presa in considerazione come possibile
soluzione.
Sub-algoritmo 1.4: né il nodo origine né il nodo destinazione fanno parte del
percorso analizzato
In questo caso aumentano le possibilità di inserimento in quanto, nel lasso di
tempo che va dal tempo di generazione del gruppo al tempo massimo finale, è
possibile inserire i nodi in tutte le posizioni. In modo simile al sub algoritmo 1.2
si fissa il nodo origine e si prova ad inserire il nodo destinazione in tutte le
posizioni successive; una volta terminato il processo e registrate le possibili
soluzioni, si fissa nuovamente il nodo origine e si verificano le altre possibilità,
fino ad esaurimento delle combinazioni.
Sub-algoritmo 2: inizializzazione nuovo autobus
Se nessuno dei sub-algoritmi di inserzione ha fornito una soluzione che rispetti i
vincoli allora l’algoritmo inizializza un nuovo autobus, fino a raggiungere il
numero di autobus disponibili.
Anche in questo caso la simulazione termina quando tutti gli utenti sono giunti a
destinazione.
Conclusioni
Le conoscenze basi sull’ambiente MATLAB acquisite durante il tirocinio si sono
rivelate un ottimo punto di partenza per affrontare la prima parte del lavoro di
tesi. Il software grazie alla sua interfaccia risulta intuitivo e semplice da
utilizzare e allo stesso tempo incredibilmente potente e adatto alla risoluzione
delle più diverse tipologie di problemi. Nonostante ciò, in un periodo
complessivo di quasi due mesi dedicato al software, credo che il livello di
conoscenza raggiunto non sia ancora tale da permettermi di sfruttare a pieno le
potenzialità di MATLAB, specialmente per quanto riguarda le funzionalità legate
alla rappresentazione grafica.