• Non ci sono risultati.

Trip planning methods for electric vehicles

N/A
N/A
Protected

Academic year: 2021

Condividi "Trip planning methods for electric vehicles"

Copied!
72
0
0

Testo completo

(1)

Corso di Laurea Magistrale in Data Science and Business Informatics

TESI DI LAUREA

TRIP PLANNING METHODS FOR ELECTRIC VEHICLES

RELATORE

Prof. Mirco NANNI

CANDIDATO

Francesco RALLIS

(2)

Indice

1 INTRODUZIONE 1

1.1 La necessit`a . . . 1

1.2 Il problema . . . 2

1.3 L’obiettivo della tesi . . . 2

2 BACKGROUND 4 2.1 Grafo . . . 4 2.2 Cammini minimi . . . 5 2.2.1 Rilassamento . . . 6 2.2.2 Dijkstra . . . 6 2.2.3 Bellman-Ford . . . 7

2.3 Caratteristiche del veicolo elettrico . . . 8

2.4 Consumi nei veicoli elettrici . . . 9

2.4.1 Regenerative Braking System . . . 10

3 PREPROCESSING 12 3.1 Open Street Map . . . 12

3.1.1 Velocit`a sugli archi . . . 13

3.1.2 Pendenza archi . . . 16

3.1.3 Tempo di percorrenza . . . 23

3.1.4 Calcolo consumo . . . 23

3.2 Open Charge Map . . . 26

(3)

4 DIJKSTRA PER VEICOLI ELETTRICI 29

4.1 Pseudocodice . . . 30

4.1.1 Vincolo di batteria . . . 31

4.1.2 Ricarica . . . 31

4.1.3 Anxiety value . . . 32

4.2 Confronto con Bellman-Ford per veicoli elettrici . . . 33

5 SOTTOGRAFO DELLE TORRETTE 38 5.1 Creazione del sottografo . . . 40

5.2 Utilizzo del sottografo . . . 41

6 APPROCCI EURISTICI 46 6.1 Euristica 1 . . . 46

6.2 Euristica 2 . . . 48

6.3 Euristica 3 . . . 48

6.4 Scelta del range . . . 51

7 ESPERIMENTI 53 8 CONCLUSIONI 64 8.1 Lavori futuri . . . 65

(4)

Elenco delle figure

2.1 Rilassamento arco . . . 6

2.2 E-pedal . . . 11

3.1 Distribuzione della velocit`a massima tra i valori non nulli (10%) . . . 13

3.2 Velocit`a massima Toscana utilizzando l’attributo . . . 15

3.3 Velocit`a massima porzione della Toscana utilizzando l’attributo . . . 16

3.4 Velocit`a massima Toscana utilizzando l’attributo . . . 17

3.5 Velocit`a massima porzione della Toscana utilizzando l’attributo . . . 18

3.6 Pendenza arco . . . 18

3.7 Distribuzione pendenze% . . . 19

3.8 Altitudine nodi Toscana . . . 20

3.9 Altitudine nodi porzione della Toscana . . . 21

3.10 Pendenza archi Toscana . . . 22

3.11 Pendenza archi porzione della Toscana . . . 23

3.12 Torrette ricarica Toscana . . . 28

4.1 Dijkstra per veicoli elettrici . . . 35

4.2 Bellman-Ford per veicoli elettrici . . . 36

4.3 Dijkstra per veicoli elettrici . . . 37

5.1 Sottografo delle torrette . . . 39

5.2 Distribuzione differenze tempi di percorrenza tra Dijkstra e Dijkstra per EV . . 44 5.3 Distribuzione differenze tempi di percorrenza tra Dijkstra e Bellman Ford per EV 45

(5)

7.1 Frequenza di ricarica . . . 54

7.2 Scatter plot consumo batteria su tempo di percorrenza . . . 55

7.3 Scatter plot consumo batteria su lunghezza arco . . . 56

7.4 Percorso con deviazione per ricarica . . . 57

7.5 Tempi di esecuzione e percorrenza per 100 tragitti . . . 58

7.6 Tempi di esecuzione e percorrenza per 100 tragitti solo euristiche . . . 58

7.7 Tempi di esecuzione e percorrenza per 100 tragitti solo euristiche Knn . . . 59

7.8 Scatter plot travel time euristicha 2Knn su travel time euristica 3Knn su 1.000 simulazioni . . . 60

7.9 Scatter plot runtime euristicha 2Knn su runtime euristica 3Knn su 1.000 simu-lazioni . . . 60

7.10 Scatter plot travel time euristicha 2Knn su travel time euristica 3Knn su 5.000 simulazioni . . . 61

7.11 Scatter plot runtime euristicha 2Knn su runtime euristica 3Knn su 5.000 simu-lazioni . . . 61

7.12 Scatter plot runtime euristica 2Knn su runtime euristica 3Knn su 5.000 simula-zioni valori medi calcolati su 5 run . . . 63

7.13 Scatter plot traveltime LONG-SEARCH su traveltime euristica 3Knn su 100 simulazioni . . . 63

(6)

Abstract

In questo lavoro si `e andati ad analizzare un argomento estremamente attuale, i veicoli elet-trici, soffermandosi per`o sull’impatto che potrebbe avere per un automobilista il passaggio a un mezzo alimentato a energia pulita. Ci si `e concentrati su una delle molteplici complicazioni che ci si trova costretti ad affrontare ogni qual volta si decida di intraprendere un percorso inno-vativo. Si `e quindi sollevato il problema della disponibilit`a immediata di energia e si `e cercato di trovare un metodo di pianificazione dei viaggi che potesse allo stesso tempo rendere meno invalidante questo problema senza dover per`o impiegare tempi eccessivamente lunghi per la pianificazione. `E stato sin da subito evidente che il problema non aveva un’unica soluzione e che le soluzioni ottime sarebbero state troppo dispendiose da calcolare. Si `e quindi cercata una soluzione pi`u pratica al problema. In primo luogo `e stata scartata l’ipotesi delle molteplici soluzioni, portando il problema dall’essere a due variabili ad un problema ad un’unica variabile, successivamente si `e andati a cercare un algoritmo che approssimasse al meglio una situazione reale. Trovato l’algoritmo che descrivesse al meglio il percorso da scegliere e l’autonomia residua del veicolo, si `e affrontato il problema delle ricariche e quindi delle deviazioni dal per-corso migliore per ricaricare il veicolo.

(7)

INTRODUZIONE

Il mercato dei veicoli elettrici `e in forte espansione, secondo l’International Energy Agency la flotta di veicoli elettrici nel 2018 ha superato i 5.1 milioni di unit`a e con un aumento di 2 milioni di veicoli rispetto all’anno precedente. Nel solo 2018 il mercato dei veicoli elettrici ha raddop-piato le vendite [IEA19] . Le ragioni di questo aumento delle vendite, spesso disomogeneo, sono da ricercarsi inizialmente in un netto e costante rafforzamento della consapevolezza che il pianeta su cui abitiamo necessita di una maggiore attenzione alla sua preservazione, suppor-tato da incentivi governativi quali l’intensificazione dell’infrastruttura elettrica di ricarica. In secondo luogo nelle nuove tecnologie che permettendo una maggiore durata delle batterie e un minor consumo da parte dei veicoli rendono un eventuale passaggio ad un veicolo % elettrico molto meno traumatico rispetto a quanto potesse essere qualche anno fa.

1.1

La necessit`a

Nonostante questo aumento delle vendite molti consumatori sono ancora scettici nei confronti del passaggio all’elettrico. Questa avversione `e da ricercarsi nella convinzione comune che il passaggio a un veicolo % elettrico possa avere un forte impatto sulla propria vita quoti-diana. Una delle pi`u grandi differenze tra un veicolo alimentato a combustibile e un veicolo a batteria sta nella disponibilit`a immediata di energia necessaria alla sua alimentazione. Il

(8)

tem-CAPITOLO 1. INTRODUZIONE

mentre una sosta per ricaricare la batteria di un veicolo elettrico, in base alle capacit`a della torretta di ricarica, `e solitamente superiore all’ora. Tra gli scenari di immaginario pi`u comuni di chi `e restio al passaggio a questo genere di veicoli c’`e quello in cui ci si trova di fronte a una situazione di impellente necessit`a e la macchina non `e provvista di batteria carica e si `e di conseguenza costretti a trovare una soluzione alternativa, con tutti i disagi che ci`o comporta. Si rende quindi necessario uno studio su come e quanto cambi la vita di un individuo con il passaggio a un veicolo % elettrico.

Per poter effettuare un tale studio vi `e le necessit`a di simulare situazioni di vita quotidiana di un individuo-tipo alla guida di un veicolo elettrico, per confrontarlo poi con lo stesso alla guida di uno a combustione.

1.2

Il problema

I dati sulla mobilit`a a nostra disposizione ci consentono di analizzare agevolmente gli sposta-menti di un individuo alla guida di un veicolo alimentato a combustibile ma manca un metodo altrettanto accurato che simulasse lo stesso percorso intrapreso per`o con un veicolo elettrico. In questa situazione i comuni software per la pianificazione di viaggi in auto non sono utili in quanto non tengono in considerazione dei fattori fondamentali che differenziano le due catego-rie di veicoli, nello specifico non considerano l’autonomia limitata del veicolo, non considerano la variabilit`a dei consumi in base alla pendenza della strada che, in alcuni casi, porta il veicolo a ricaricare durante la marcia e non considerano l’eventualit`a in cui si renda necessaria una ricarica durante il tragitto, a fronte dell’impossibilit`a per il veicolo di raggiungere il punto di destinazione. Si `e quindi reso necessario uno strumento in grado di pianificare un viaggio per un veicolo elettrico tenendo in considerazione tutte queste variabili e questi possibili scenari che non si verificano quando si pianifica un viaggio per un veicolo alimentato a combustibile.

1.3

L’obiettivo della tesi

L’obiettivo della tesi `e quindi quello di creare un nuovo algoritmo, basato su algoritmi noti, in grado di pianificare i viaggi per veicoli elettrici. Partendo dalla necessit`a di pianificare il

(9)

viaggio, nel capitolo 2 sono stati considerati il problema dei percorsi minimi, valutando l’ap-plicabilit`a al problema di due algoritmi, Dijkstra e Bellman-Ford; le caratteristiche del veicolo, valutando quale veicolo scegliere come prototipo per lo studio dei consumi e il problema dei consumi nei veicoli elettrici, attraverso una funzione di consumo della batteria basata sulle ca-ratteristiche del veicolo. Nel capitolo 3 si `e curata l’implementazione di un grafo rappresentante l’infrastruttura stradale arricchito dalla presenza di torrette di ricarica. Nel capitolo 4 `e stata ideata e implementata una versione modificata dell’algoritmo di Dijkstra la quale fornisce un percorso minimo tenendo in considerazione le variabili carica residua, pendenza della strada e quindi consumo del veicolo. Nel capitolo 5 `e stato introdotto il concetto di sottografo delle torrette, ovvero un grafo quasi completamente connesso dove i nodi rappresentano le torrette di ricarica e gli archi i percorsi ottimi. Si `e inoltre illustrata la prima versione dell’algoritmo di Dijkstra per veicoli elettrici che oltre alle variabili precedenti prende in considerazione anche le soste per ricaricare il veicolo, trovando cos`ı il percorso pi`u veloce anche quando c’`e la neces-sit`a di sostare per ricaricare la batteria del veicolo. Nel capitolo 6 sono state proposte alcune euristiche per accelerare il processo di selezione del percorso migliore nel caso in cui il veicolo debba effettuare almeno una sosta per ricaricare la batteria, individuando la parte dell’algorit-mo con complessit`a maggiore e dell’algorit-modificandone il funzionamento in dell’algorit-modo da ottenere risultati con elevati livelli di precisione in tempi pi`u brevi. Nel capitolo 7 sono stati effettuati diversi esperimenti per valutare l’efficacia e l’efficienza delle euristiche proposte, confrontando tra di loro le velocit`a di esecuzione e i tempi di percorrenza per ogni euristica proposta.

(10)

Capitolo 2

BACKGROUND

In questo capitolo verranno illustrati gli algoritmi per il calcolo dei percorsi minimi, in partico-lare l’algoritmo di Dijkstra e l’algoritmo di Bellman-Ford, ai quali ci si `e ispirati per la creazione dell’algoritmo per veicoli elettrici. Si evidenzieranno inoltre le caratteristiche del veicolo elet-trico preso in considerazione come prototipo per lo studio. Infine si illustrer`a la funzione di consumo utilizzata per calcolare i consumi dei veicoli elettrici in relazione alla pendenza della strada, alla velocit`a di percorrenza e alla distanza percorsa.

2.1

Grafo

Il primo passo per rendere in termini matematici un problema pratico come quello della pianifi-cazione del percorso per un veicolo elettrico, `e stato quello di definire le strutture matematiche che avrebbero rappresentato gli elementi fondamentali del problema. Si `e quindi utilizzato un grafo per rappresentare la rete stradale.

Un grafo, in matematica, `e la configurazione formata da un insieme di punti ( vertici o nodi ) e un insieme di linee ( archi ) che uniscono coppie di nodi.[CLRS09]

Nel caso in questione, i nodi rappresentano i punti di intersezione tra le strade e gli archi rappresentano le strade della rete viaria.

(11)

Il grafo `e la struttura migliore per rappresentare una rete stradale in quanto consente di im-magazzinare delle informazioni aggiuntive per ogni nodo e per ogni arco. I nodi possono, per esempio, mantenere: i valori delle coordinate geografiche del punto, informazioni relative al-la funzione di quel nodo (supermercato, stazione di servizio, farmacia, bar, etc.), indirizzo del punto e altre informazioni utili. Anche gli archi possono essere etichettati con informazioni utili come ad esempio: il nome della via che l’arco rappresenta, la geometria della strada, il peso dell’arco, la pendenza della strada, il tipo di strada e molte altre. Inoltre i nodi del grafo di solito immagazzinano anche la lista di adiacenza, uno strumento molto utile quando si tratta di ottenere informazioni per cui sia ad esempio necessaria una visita del grafo o quando si `e interessati a conoscere i vicini di un certo nodo.

2.2

Cammini minimi

L’idea alla base della risoluzione del problema di pianificazione dei percorsi per veicoli elettrici era quella di trovare il tragitto pi`u veloce. Quando si tratta di trovare il tragitto pi`u veloce tra due punti su un grafo si sta parlando del problema dei cammini minimi.

”In un problema di cammini minimi viene fornito un grafo orientato e pesato G= (V, E), con una funzione peso w∶ E → R che associa ad ogni arco un peso a valore nei reali. Il peso di un cammino p= ⟨v, v, ..., vk⟩ `e la somma dei pesi

degli archi che lo costituiscono:

w(p) = ∑ki=w(vi−, vi)

Il peso di cammino minimo da u a v `e definito come:

δ(u, v) =⎧⎪⎪⎪⎪ ⎨⎪⎪⎪ ⎪⎩

min{w(p)∶ u ; v} se esiste un cammino da u a v

∞ altrimenti

(12)

cam-CAPITOLO 2. BACKGROUND

I due algoritmi su cui si `e basato lo studio per la risoluzione del problema in questione sono stati l’algoritmo di Dijkstra e l’algoritmo di Bellman-Ford.

2.2.1

Rilassamento

Gli algoritmi che presenteremo in questo capitolo usano la tecnica del rilassamento. Per ogni vertice v∈ V si mantiene un attributo d [v] che `e un limite superiore al peso di un cammino minimo dalla sorgente s a v. Chiameremo d[v] una stima di cammino minimo. Rilassare un arco (u, v) significa verificare se passando per l’arco (u, v) si ottiene un valore pi`u basso di d[v]. Inizialmente tutti i nodi vengono inizializzati ad un valore infinito. Per ogni vertice v∈ V , d [v] ←Ð ∞[CLRS09].

if d[v] < d [u] + w(u, v) then d[v] = d [u] + w(u, v); π[v] = u;

end

Algorithm 1:RELAX(u,v,w)

Se la distanza per raggiungere v `e maggiore della somma tra, la distanza per raggiungere u e la distanza tra u e v. Allora l’arco verr`a rilassato e v prender`a come distanza la somma tra la distanza per raggiungere u e la distanza tra u e v. Verr`a assegnato u come predecessore di v.

Figura 2.1: Rilassamento arco

2.2.2

Dijkstra

L’algoritmo di Dijkstra risolve il problema dei cammini minimi con sorgente singola su un gra-fo orientato e pesato G= (V, E) nel caso in cui tutti i pesi degli archi siano non negativi. Dato

(13)

un grafo orientato e pesato G= (V, E) con sorgente s e funzione peso w ∶ E → R+. L’algoritmo

crea e aggiorna un insieme S contenente tutti i nodi resi definitivi, ovvero il cui percorso mini-mo dalla sorgente `e stato gi`a definito. L’algoritmini-mo seleziona il nodo con la stima del cammino minimo pi`u bassa, lo inserisce nell’insieme S e rilassa tutti gli archi uscenti da quel nodo. Viene implementato con una coda di priorit`a che mantiene in cima il nodo con la stima pi`u bassa. L’algoritmo di Dijkstra sfrutta il principio per cui ogni volta che visito un nodo il cammino che mi ha portato su quel nodo `e il cammino minimo per raggiungerlo. Quindi anche se non ho percorso tutti gli archi entranti in quel nodo, so gi`a che non mi porter`a vantaggio esplo-rarli e potr`o assegnare quel nodo all’insieme dei nodi definitivi e non lo visiter`o pi`u. Questo principio sar`a utile per comprendere il motivo per cui si `e deciso di valutare anche l’algoritmo Bellman-Fordnonostante non ci fossero pesi negativi sugli archi.

INITIALIZE-SINGLE-SOURCE(G, s) ; S= ∅; Q= V [G]; while Q≠ ∅ do u= EXTRACT-MIN (Q); S= S ∪ {u};

for each vertex v∈ Adj [u] do RELAX(u, v, w);

end end

Algorithm 2:DIJKSTRA(G,w,s)

2.2.3

Bellman-Ford

L’algoritmo di Bellman-Ford risolve il problema dei cammini minimi con sorgente singola su un grafo orientato e pesato G= (V, E) nel caso pi`u generale in cui i pesi degli archi possano essere negativi. Dato un grafo orientato e pesato G= (V, E) con sorgente s e funzione peso w∶ E → R. L’algoritmo verifica se esiste o meno un ciclo di peso negativo. Restituisce falso se incontra un ciclo negativo. Altrimenti restituisce vero e calcola i cammini minimi tra la

(14)

CAPITOLO 2. BACKGROUND sorgente e gli altri nodi.

INITIALIZE-SINGLE-SOURCE(G, s) ; for i=  to ∣V [G] ∣ −  do

for each edge(u, v) ∈ E [G] do RELAX(u, v, w);

end end

for each edge(u, v) ∈ E [G] do if d[v] < d [u] + w (u, v) then

return FALSE; end

end

return TRUE

Algorithm 3:BELLMAN-FORD(G,w,s)

Anche l’algoritmo di Bellman-Ford cos`ı come quello di Dijkstra utilizza la funzione di rilas-samento, solo che a differenza di Dijkstra rende definitivo un nodo dopo averlo esplorato ma mantiene la possibilit`a di rilassare nuovamente nel caso in cui questo venga raggiunto nuova-mente con un percorso meno costoso. Questo lo rende idoneo al calcolo di percorsi minimi su grafi con pesi negativi sugli archi.

2.3

Caratteristiche del veicolo elettrico

Una delle prime scelte di fronte a cui ci si `e trovati `e stata la selezione del veicolo da utilizzare come prototipo per la sperimentazione. Tra i vari veicoli elettrici presenti sul mercato si `e preferita la Nissan LEAF, per diverse ragioni.

In Norvegia Nissan LEAF `e l’auto pi`u venduta in assoluto nel 2018.

Con un acquisto ogni 10 minuti, la nuova Nissan LEAF `e il veicolo % elettrico pi`u venduto in Europa nel 2018.

In Italia, la nuova Nissan LEAF `e l’auto % elettrica pi`u venduta sia nel mese di settembre con unit`a che nel periodo gennaio-settembre  con . unit`a, pari a una quota di mercato

(15)

del %.[Nis17]1

Principalmente si `e scelta la Nissan LEAF poich`e risultata essere la macchina pi`u diffusa in Europa e in Italia. Un’altra ragione per cui la scelta `e ricaduta su questo veicolo `e stata la categoria in cui si colloca, una berlina  volumi, ovvero un veicolo adatto sia alla citt`a che a viaggi medio-lunghi, una categoria di veicoli molto versatile e adatta a molteplici situazioni. Infine il lavoro di Inghirami a cui ci si `e ispirati per la realizzazione del modello di consumo per il veicolo elettrico, `e stato anch’esso effettuato prendendo come veicolo di riferimento una Nissan LEAF.

Il modello utilizzato in questa sperimentazione `e la versione 

Modello Leaf kW h Potenza kW(CV ) Coppia massima N m Batteria kW h Autonomia km 0–100 km/h , s Velocit`a max(Km/h)  Ricarica standard .kW , h Ricarica domestica h

2.4

Consumi nei veicoli elettrici

Nei veicoli alimentati a combustibile, quando si parla di consumi, c’`e spesso una certa diffe-renza tra i valori di consumo dichiarati da parte delle aziende produttrici e i valori reali di consumo rilevati dagli utilizzatori. Questa discrepanza aumenta quando si parla di veicoli elet-trici, questo accade perch´e i consumi nei veicoli elettrici sono ancora pi`u difficili da calcolare rispetto a quelli dei veicoli alimentati a combustibile. La capacit`a delle batterie `e soggetta alle

(16)

CAPITOLO 2. BACKGROUND

condizioni climatiche esterne, in particolare a variazioni di temperatura e umidit`a. Come si pu`o notare dalla tabella lo stesso veicolo su percorsi diversi e in condizione climatiche diverse pu`o guadagnare anche il % di autonomia.

Real Range between − km

City - Cold Weather km City - Mild Weather km Highway - Cold Weather km Highway - Mild Weather km Combined - Cold Weather km Combined - Mild Weather km

2 3

Come se non bastasse l’autonomia di un veicolo elettrico `e anche influenzata da quanto il veicolo `e in grado di ricaricare durante la marcia. I veicoli elettrici, cos`ı come quelli ibridi, utilizzano un sistema di frenata rigenerativo.

2.4.1

Regenerative Braking System

Il Regenerative Braking System o Sistema Rigenerativo di Frenata `e un meccanismo di recupero dell’energia che rallenta il veicolo e ne trasforma l’energia cinetica in una forma di energia che pu`o essere accumulata e conservata per un utilizzo futuro, aumentando l’autonomia del vei-colo fino al %. Solitamente i veicoli elettrici sono equipaggiati con un sistema rigenerativo di frenata idraulico che permette di avere la stessa sensazione di frenata che si avrebbe con un veicolo non elettrico [Cha14]. La casa automobilistica Nissan ha invece sviluppato un sistema di frenata assistita, chiamato e-Pedal, il quale consiste in un dispositivo che inizia a lavorare nel momento in cui il pilota alza il piede dal pedale dell’acceleratore, facendo decelerare il veicolo gradualmente e proporzionalmente alla pressione esercitata sul pedale. In questo modo viene ridotto al minimo l’utilizzo del pedale del freno e viene cos`ı incrementata la quantit`a di energia cinetica recuperabile per mezzo della frenata. L’e-Pedal, sfrutta il principio del Sistema Rige-nerativo di Frenata per cui un motore elettrico che inverte il suo funzionamento si trasforma in un generatore. Un elemento importante considerando che a bordo dei veicoli elettrici tutti

2Indication of real-world range in several situations. Cold weather: ’worst-case’ based on -10°C and use of

heating. Mild weather: ’best-case’ based on 23°C and no use of A/C. The actual range will depend on speed, style of driving, climate and route conditions.

(17)

Figura 2.2: E-pedal

questi meccanismi, come il servofreno, di solito azionati dal motore a scoppio, sono sostituiti con dispositivi elettrici che necessitano di energia per essere alimentati.[Nis17]4

(18)

Capitolo 3

PREPROCESSING

In questo capitolo verranno illustrati i passi compiuti nella parte di preprocessing, verranno quindi mostrate le librerie utilizzate e, inoltre, verranno argomentate le scelte operate nella co-struzione del grafo e in che modo sono stati creati i nodi torretta. Essendo necessaria un strut-tura a grafo si `e optato per Open Street Map e se ne `e utilizzata la libreria OSMnx[Boe17] si `e inoltre utilizzata la libreria NetworkX[HSSC08] che comprende una serie di tool per operare su grafi. Per recuperare la posizione delle torrette di ricarica sono state utilizzate le coordinate fornite dalla piattaforma Open Charge Map.

3.1

Open Street Map

Open Street Map `e una piattaforma che fornisce dati geografici sulle mappe di tutto il mondo. ”OpenStreetMap `e costruito da una comunit`a di mappatori che contribuiscono e mantengono i dati sulle strade, sentieri, caff`e, stazioni ferroviarie e molto altro ancora, in tutto il mondo.”1

Tramite una chiamata della funzione ox.graph from place(city, network type=networkType) si ottiene la mappa della regione di interesse sotto forma di grafo. Nel caso in questione si `e presa in considerazione la regione Toscana come base per la sperimentazione in quanto si era in possesso di dati reali di mobilit`a sui quali poter valutare l’algoritmo.

(19)

Una volta ottenuto il grafo della regione di interesse, deve essere modificato in modo da soddisfare i requisiti necessari alla risoluzione del problema. Nel caso in questione si `e dovuto prendere in considerazione il fatto che un veicolo elettrico ha una autonomia limitata, non ha la possibilit`a di fare rifornimento dove e quando vuole ma, soprattutto, che i consumi di un veicolo elettrico dipendono, oltre che dalla velocit`a di marcia e dalla distanza percorsa anche dalla pendenza della strada. Si sono quindi dovute calcolare le velocit`a massime di percorrenza sugli archi, le altitudini dei nodi e, da queste, successivamente, le pendenze dei rispettivi archi. Si `e poi calcolato il tempo di percorrenza dell’arco da parte del veicolo e infine si `e potuto calcolare il consumo del veicolo sull’arco. Tutte queste informazioni aggiuntive sono state inserite nei nodi e negli archi del grafo di modo da ottenere una struttura contenente le informazioni necessarie al funzionamento dell’algoritmo per veicoli elettrici di cui verr`a discusso in seguito.

3.1.1

Velocit`a sugli archi

(20)

CAPITOLO 3. PREPROCESSING

Per quanto riguarda la velocit`a sugli archi, i dati forniti da Open Street Map sono scarsi, poco accurati e spesso mancanti, utilizzando l’attributo MaxSpeed, ovvero l’attributo che dovrebbe fornire informazioni sulla velocit`a massima dell’arco, solo il 10% degli archi ha un valore di velocit`a massima. Possiamo notare dal grafico [ 3.1 nella pagina precedente] che la velocit`a pi`u frequente `e quella di km/h, trovandoci in Italia il dato risulta coerente con l’infrastruttura viaria italiana. Per ovviare alla mancanza di dati si `e dovuto quindi ricorrere ad un espediente per la loro stima. Si `e scelto l’attributo Highway in quanto presente su ogni arco. Questo attributo rappresenta il tipo di strada e prende i seguenti valori:

[’alley’, ’crossing’, ’disused’, ’emergency bay’, ’living street’, ’motorway’, ’motorway link’, ’no’, ’primary’, ’primary link’, ’razed’, ’residential’, ’rest area’, ’road’, ’secondary’, ’secondary link’, ’tertiary’, ’tertiary link’, ’trunk’, ’trunk link’, ’unclassified’, ’yes’]. Partendo da questi valori `e stato creato un dizionario avente come chiave il tipo di strada e come valore il rispettivo limite di velocit`a. I limiti di velocit`a sono stati scelti in base ad una tabella di conversione presente sul sito della Polizia di Stato.

{’alley’: 50, ’crossing’: 50, ’disused’: 50, ’emergency bay’: 50, ’living street’: 50, ’motorway’: 130, ’motorway link’: 130, ’no’: 50, ’primary’: 110, ’primary link’: 110, ’razed’: 50, ’residential’: 50, ’rest area’: 50, ’road’: 50, ’secondary’: 90, ’secondary link’: 90, ’tertiary’: 70,

’tertiary link’: 70, ’trunk’: 110, ’trunk link’: 110, ’unclassified’: 50, ’yes’: 50}

`E stato poi effettuato un plot della Toscana con le strade colorate in base alla velocit`a massima di percorrenza [Figura 3.2 nella pagina successiva] per vedere se i risultati fossero coerenti con l’infrastruttura della rete viaria Toscana. Lo si `e inoltre confrontato con il plot effettuato precedentemente, utilizzando l’attributo MaxSpeed [Figura 3.4 a pagina 17].

I valori di velocit`a sono distribuiti in base ad una scala cromatica che va dalrossoper le ve-locit`a pi`u basse alverdeper le velocit`a pi`u alte. Si pu`o inoltre notare che il colore predominante `e ilgiallo, plausibilmente il colore che rappresenta la velocit`a di 50 km/h. Il che risulta coeren-te con la distribuzione iniziale di velocit`a massime. Si pu`o notare come l’utilizzo dell’attributo Highwayabbia incrementato la quantit`a di valori di velocit`a massima e come la distribuzione dei valori di velocit`a sia coerente con l’infrastruttura viaria italiana.

(21)

Figura 3.2: Velocit`a massima Toscana utilizzando l’attributo MaxSpeed

(22)

CAPITOLO 3. PREPROCESSING

Figura 3.3: Velocit`a massima porzione della Toscana utilizzando l’attributo MaxSpeed

3.1.2

Pendenza archi

Come detto in precedenza, ogni nodo rappresenta una intersezione tra due o pi`u archi e per calcolare il consumo del veicolo sull’arco `e necessaria tra le altre la pendenza dell’arco stesso. Per calcolare la pendenza dell’arco si `e partiti dall’altitudine dei nodi. Si `e utilizzata la libreria srtm2, per ottenerne l’elevazione [Figura 3.9 a pagina 21]. Da questa si `e calcolato il dislivello [Figura 3.10 a pagina 22]. Nel calcolo del dislivello si `e notato che alcuni non erano graduali ma si presentavano con salti di svariati metri. Questo succede in quanto i dati di altitudine sono calcolati sul terreno e non considerano quindi infrastrutture quali gallerie, ponti e cavalcavia. Per ovviare a questo problema si `e deciso di considerare  la pendenza su quei tratti. Un altro problema che si `e dovuto affrontare `e stato quello della mancanza dei valori di altitudine per alcuni nodi. In questo caso, si `e deciso di assegnare, come valore di altitudine ai nodi che ne erano sprovvisti, la media dei valori dei nodi vicini. Una volta in possesso di valori coerenti di elevazione dei nodi, si `e calcolata la distanza euclidea tra i nodi utilizzando la formula

Distanza=√LungStrada− Dislivello

2Lo Shuttle Radar Topography Mission `e un’impresa internazionale che `e riuscita ad ottenere un Modello

(23)

Figura 3.4: Velocit`a massima Toscana utilizzando l’attributo Highway

(24)

CAPITOLO 3. PREPROCESSING

Figura 3.5: Velocit`a massima porzione della Toscana utilizzando l’attributo Highway

Figura 3.6: Pendenza arco

Successivamente si calcolata la percentuale e l’angolo di pendenza dell’arco P endenza= DislivelloDistanza

∡Pendenza = arctan(Pendenza)

Infine per verificare la coerenza dei dati ottenuti si `e andati a vedere la distribuzione delle pen-denze e si `e notato che l’andamento delle penpen-denze `e per lo pi`u simmetrico, il che `e spiegabile dal fatto che la maggior parte delle strade sono a doppio senso e quindi sono in salita e in di-scesa con la stessa pendenza. La distribuzione delle pendenze ha le code per valori minori del −% e per valori maggiori del +% il che `e coerente con i valori usuali di pendenza minima

(25)

e massima delle strade. Inoltre c’`e una presenza consistente di valori tra il−% e il +% e un calo drastico per valori uguali allo % il che `e molto coerente con una infrastruttura viaria cittadina, che `e solitamente densa di strade quasi pianeggianti.[Figura 3.7]

(26)

CAPITOLO 3. PREPROCESSING

(27)
(28)

CAPITOLO 3. PREPROCESSING

(29)

Figura 3.11: Pendenza archi porzione della Toscana

3.1.3

Tempo di percorrenza

Open Street Map, per apprezzare il peso degli archi, fornisce la distanza in m. Partendo da que-sti valori, al fine di calcolare il consumo, `e stato necessario il calcolo del tempo di percorrenza. Con i dati a disposizione non `e stato possibile calcolare il tempo medio di percorrenza per un veicolo su un arco e si `e quindi dovuta effettuare una stima di questi tempi. Per semplicit`a la velocit`a sull’arco `e stata considerata costante.

3.1.4

Calcolo consumo

Calcolati tutti i valori necessari si `e passati al calcolo del consumo. Si `e partiti dalla funzione di consumo sviluppata in un precedente lavoro di tesi [Ing18]. Il valore di capacit`a della batteria, che sul veicolo preso a modello nel lavoro a cui ci si `e ispirati, era di Kw, `e stato portato a Kwper adeguarlo a quello attuale, `e stato anche aggiornato il peso dell’autoveicolo ed `e stato portato a ., aumentandolo di quasi Kg3 rispetto ai  del modello precedente. Si `e

implementata la funzione in Python per renderla compatibile con lo spazio di lavoro utilizzato.

(30)

CAPITOLO 3. PREPROCESSING # Area f r o n t a l e d e l v e i c o l o A = 2 . 2 7 # Massa d e l v e i c o l o Mcar = 1580 # Massa d e l g u i d a t o r e Md = 90 # C o e f f i c i e n t e d i r e s i s t e n z a a e ro di n am i c a Cd = 0 . 2 9 # C o e f f i c i e n t e d i r e s i s t e n z a a l r o t o l a m e n t o R = 0 . 0 1 2 # C a p a c i t d e l l a b a t t e r i a eBatCap = 38 # Massa t o t a l e TotalMass = Mcar+Md # E f f i c i e n z a d e l l a t r a s m i s s i o n e e f f G e a r = 0 . 9 7 # E f f i c i e n z a d e l motore e l e t t r i c o effMot = 0 . 9 5 # Potenza a u s i l i a r i a Paux = 0 # E f f i c i e n z a d e l l a b a t t e r i a e f f B a t t C h a r g e = 0 . 9 5 # E f f i c i e n z a s c a r i c a m e n t o b a t t e r i a e f f B a t t D i s c h a r g e = 0 . 9 8 # A c c e l e r a z i o n e d i g r a v i t g = 9 . 8 1 # D e n s i t a r i a rho = 1 . 2 0 4 1 # R e g e n e r a t i o n r a t i o (G = 0 . 3 5 in ECO MODE) r e g e n R a t i o = 0 . 3 5

(31)

d e f evBattCons ( distanceFromPrev , timeGap , speed , a c c e l , alpha ) : # R e s i s t e n z a a l r o t o l a m e n t o

F r r = R ∗ ( TotalMass ) ∗ g ∗ math . cos ( alpha ) # R e s i s t e n z a a re o d i n am i c a

Fa = 0 . 5 ∗ A ∗ Cd ∗ rho ∗ math .pow( speed , 2 ) # G r a v i t

Fgo = ( TotalMass ) ∗ g ∗ math . s i n ( alpha ) # Forza d ’ i n e r z i a F i = 1 . 0 5 ∗ ( TotalMass ) ∗ a c c e l # Forza t o t a l e F t o t = F r r + Fa + Fgo + F i # Forza t r a z i o n e meccanica P t o t = F t o t ∗ speed PmotOut = 0 i f ( P t o t >= 0 ) : PmotOut = P t o t / e f f G e a r e l s e : PmotOut = r e g e n R a t i o ∗ P t o t ∗ e f f G e a r PmotIn = 0 i f ( PmotOut >= 0 ) :

PmotIn = PmotOut / effMot e l s e :

PmotIn = PmotOut ∗ effMot Pbat = PmotIn + Paux

# M o d e l l a z i o n e b a t t e r i a eBat = 0

i f ( Pbat >= 0 ) :

(32)

CAPITOLO 3. PREPROCESSING

eBat = Pbat ∗ timeGap ∗ e f f B a t t D i s c h a r g e # C a l c o l o DeltaSoC

kWh2Ws = 3 6 0 0 ∗ 1 e3

d e l t a S o C = eBat / ( eBatCap ∗kWh2Ws) r e t u r n d e l t a S o C

La funzione di consumo presentata `e stata applicata ad ogni arco del grafo e ne `e stato ricavato il valore di consumo sull’arco per il veicolo elettrico scelto come prototipo. Per semplicit`a, sono state ipotizzate costanti la velocit`a e la pendenza sull’arco, come velocit`a di percorrenza dell’arco `e stato scelto il limite massimo di velocit`a consentito per quell’arco.

3.2

Open Charge Map

Open Charge Map `e un servizio non-profit, non commerciale, ospitato e supportato da una comunit`a di imprese, enti di beneficenza, sviluppatori e appassionati di tutto il mondo ed `e definito come:

”Il data base pubblico globale delle colonnine di ricarica.”4

Tramite le API di Open Charge Map viene effettuata una richiesta al server5, specificando

l’area geografica di interesse, si ottiene in risposta un file JSON contenente la latitudine e la longitudine delle torrette presenti in quella zona e altre informazioni sul tipo di ricarica fornita.

3.2.1

Integrazione torrette di ricarica

Per integrare le torrette di ricarica nella struttura gi`a presente si `e inizialmente pensato di attri-buire la propriet`a di nodo torretta al nodo pi`u vicino alle coordinate geografiche della torretta. Cos`ı facendo ci si `e resi conto che alcune torrette, specialmente quelle collocate all’interno di

4https://openchargemap.org/site/ 5https://api.openchargemap.io/v3/poi/

(33)

resort di lusso, erano troppo distanti dal loro nodo pi`u vicino. Per risolvere il problema dell’in-serimento di queste torrette particolari si `e quindi optato per l’aggiunta di un nuovo nodo con propriet`a di nodo torretta. Per la creazione di questi nuovi nodi si `e innanzitutto calcolata la distanza tra le coordinate geografiche di ogni torretta e il suo nodo pi`u vicino, si sono scelte le torrette con distanza superiore ad un certo valore6.

Per queste torrette `e stato ricercato l’arco pi`u vicino. Tramite una funzione creata apposita-mente `e stata scomposta la geometria dell’arco in punti, si `e scelto il punto dell’arco pi`u vicino alla torretta ed `e stato trasformato in un nodo con propriet`a di nodo torretta. Si `e cos`ı divisa la geometria dell’arco in due e si sono ricostruiti i percorsi per e dal nuovo nodo. Nella Figu-ra 3.12 nella pagina seguente possiamo apprezzare la distribuzione delle torrette di ricarica, i nodi del grafo colorati in blu, sul territorio della Toscana. Come possiamo vedere la maggiore concentrazione delle torrette combacia con le grandi citt`a mentre si dirada proporzionalmente nel momento in cui ce ne allontaniamo.

(34)

CAPITOLO 3. PREPROCESSING

(35)

DIJKSTRA PER VEICOLI ELETTRICI

Nel caso preso in analisi non era possibile usare un algoritmo noto per valutare il percor-so minimo di un veicolo elettrico in quanto il problema di partenza non ammetteva un’unica soluzione. Non sarebbe stato nemmeno utile trovare tutte le possibili soluzioni S tali da per-mettere di raggiungere un nodo di arrivo v da un nodo di partenza s che impiegavano tempi t diversi con consumi c diversi per cui:

t[Si(s ; v)] < t [Sj(s ; v)] ⋀c[Si(s ; v)] > c [Sj(s ; v)]

OR

t[Si(s ; v)] > t [Sj(s ; v)] ⋀c[Si(s ; v)] < c [Sj(s ; v)]

Considerando che il nostro studio ha come scopo quello di andare a valutare l’impatto sulla vita quotidiana dell’individuo, nel caso di un passaggio ad un veicolo elettrico, `e stata data una maggiore valenza al tempo che si impiega per percorrere un tragitto piuttosto che alla batteria che si consuma. Si `e quindi deciso di considerare come variabile da minimizzare solo il tempo di percorrenza sull’arco, trattando la batteria come un vincolo al raggiungimento di alcuni nodi. A questo punto il problema poteva essere trattato come una variante del percorso minimo con un vincolo aggiuntivo. `E stato quindi scelto un algoritmo noto, l’algoritmo di Dijkstra, ed `e stato modificato con l’aggiunta di un vincolo alla funzione di rilassamento dei nodi. `E stata inoltre apportata una modifica in modo da consentire l’aggiornamento del valore di batteria

(36)

CAPITOLO 4. DIJKSTRA PER VEICOLI ELETTRICI

`E stato sviluppato un ulteriore algoritmo, modificando l’algoritmo di Bellman-Ford, poich`e, proprio per il suo diverso funzionamento, avrebbe permesso in alcuni casi, di trovare soluzioni alternative laddove l’algoritmo di Dijkstra per veicoli elettrici avrebbe invece fallito. Si `e voluto quindi andare a valutare, prendendo in considerazione anche la differenza tra il tempo di esecu-zione di un algoritmo rispetto all’altro, quanto sarebbe andato a perdere quest’ultimo rispetto all’algoritmo di Bellman-Ford per veicoli elettrici.

4.1

Pseudocodice

INITIALIZE-SINGLE-SOURCE(G, s) ; S= ∅; Q= V [G]; while Q≠ ∅ do u= EXTRACT-MIN (Q); S= S ∪ {u};

for each vertex v∈ Adj [u] do

RELAX-EV(u, v, w, c, maxBatt, anxV alue); end

end

(37)

if a[u] + c(u, v) > maxBatt ∗ anxV alue then if d[v] < d [u] + w(u, v) then

d[v] = d [u] + w(u, v);

if a[u] + c(u, v) > maxBatt then a[v] = maxBatt else a[v] = a [u] + c(u, v); end π[v] = u; end end Algorithm 5:RELAX-EV(u,v,w,c,maxBatt,anxValue)

4.1.1

Vincolo di batteria

La presenza della batteria, anche se considerata come un vincolo, mantiene ad ogni modo un ruolo estremamente importante nel nostro algoritmo in quanto tramite il Regenerative Bra-king System, in base alla pendenza dell’arco percorso essa si consuma o viene ricaricata di un valore definito dalla funzione di consumo. Si `e per questo dovuto inserire un limite superiore oltre il quale una batteria non pu`o essere caricata e un limite inferiore oltre il quale la batteria non pu`o essere consumata. Questo limite inferiore che prende il valore di  al caso limite ma che pu`o essere anche incrementato tramite l’anxiety value, `e quello che nell’algoritmo non permette di rilassare il peso di cammino minimo di un nodo se non si `e in grado di raggiungere quel nodo con la batteria a disposizione. Questo vincolo di batteria non permette all’algorit-mo di proseguire se si `e terminata la carica disponibile e fa restituire il messaggio di nodo non raggiungibile.

4.1.2

Ricarica

La ricarica del veicolo pu`o essere effettuata in due modi di cui il primo `e tramite un nodo torret-ta. Questo tipo di ricarica prevede un’iniziativa da parte del conducente che deve interrompere

(38)

CAPITOLO 4. DIJKSTRA PER VEICOLI ELETTRICI

la marcia e ricaricare la batteria della macchina; pu`o essere effettuato sia nell’abitazione del pro-prietario del veicolo tramite una presa di corrente o una torretta privata, sia lungo il percorso attraverso una delle torrette di ricarica facenti parte della rete infrastrutturale di elettrificazio-ne. Come vedremo nel capitolo dedicato al sottografo delle torrette, questa torretta di ricarica verr`a suggerita dall’algoritmo nel momento in cui si renda necessaria una sosta per completare il percorso.

Il secondo metodo di ricarica non prevede alcun intervento da parte del conducente in quanto viene effettuato tramite il Regenerative Braking System. Questa possibilit`a di ricaricare la batteria del veicolo durante la marcia viene catturata dall’algoritmo e il valore di batteria residua viene aggiornato ogni qualvolta si seleziona il cammino minimo per un determinato nodo, mantenendo in questo modo non soltanto i valori dei tempi di percorrenza sui cammini minimi, ma anche i valori di batteria consumata.

4.1.3

Anxiety value

La batteria disponibile nei veicoli elettrici non `e mai quella dichiarata ma si mantiene un certo range, solitamente il %, come margine di sicurezza per il corretto funzionamento della batte-ria; a esempio, nel caso della Nissan LEAF, la batteria dichiarata `e da Kw ma ne sono resi disponibili per l’utilizzo soltantoo Kw. Questi Kw di potenza non vengono considerati dai sistemi del veicolo ma servono esclusivamente al mantenimento della batteria stessa. Il no-stro algoritmo prende come valore di riferimento di batteria il valore reale a disposizione del conducente ovvero i Kw. Introduce tuttavia un valore in percentuale definito come anxiety value (valore di ansia) questo valore, permette appunto al conducente di non avere la preoc-cupazione di ritrovarsi con la batteria scarica e senza nessuna torretta in prossimit`a e quindi essere costretto a rivolgersi al soccorso stradale per ricaricare il veicolo. Il funzionamento di questo valore all’interno dell’algoritmo `e quello di nascondere una percentuale della batteria. In questo modo il valore minimo di carica oltre il quale il veicolo viene ritenuto impossibilitato a proseguire nella marcia non sar`a pi`u  bens`ı un valore v> , v ∈ R. Questo anxiety value pu`o essere modificato a piacimento. Durante la sperimentazione `e stato impostato a , quindi `e stata utilizzata tutta la batteria a disposizione.

(39)

4.2

Confronto con Bellman-Ford per veicoli elettrici

Ai fini della scelta di utilizzare l’algoritmo di Dijkstra come algoritmo base per la creazione del nostro algoritmo per veicoli elettrici `e stato di fondamentale importanza il confronto con l’algoritmo di Bellman-Ford.

Imponendo il vicolo di batteria si altera il normale funzionamento dell’algoritmo di Dijk-strache, in quanto algoritmo greedy, come gi`a spiegato nel capitolo su Djkstra, fonda il suo funzionamento sul principio per cui ogni volta che visito un nodo, il cammino che mi ha por-tato su quel nodo `e il cammino minimo per raggiungerlo. Di conseguenza anche se non ho percorso tutti gli archi entranti in quel nodo so gi`a che non mi porter`a vantaggio esplorarli e potr`o assegnare quel nodo all’insieme dei nodi definitivi e non lo visiter`o pi`u. Come possiamo apprezzare nella figura 4.1 a pagina 35, sotto le seguenti condizioni:

x> z l< h + m + n batt(S, A) − l > j batt(S, A) − h − m − n < j

l’algoritmo di Dijkstra per veicoli elettrici, per costruzione, non visita il nodo E. Al contrario, come possiamo notare nella figura 4.2 a pagina 36, l’algoritmo di Bellman-Ford per veicoli elettrici visita il nodo E. Questo succede perch´e l’algoritmo di Bellman-Ford `e strutturato per lavorare su grafi in cui i pesi di alcuni archi possono essere negativi. Per questa ragione l’algoritmo percorre tutti gli archi, almeno fino a che `e in grado di rilassare i nodi.

Quindi nel caso in figura 4.2 a pagina 36 l’algoritmo visita anche il nodo E. Questo succede perch´e l’algoritmo di Bellman-Ford procede per in modo iterativo fino a che non c’`e pi`u un gua-dagno. Visita, quindi, ad ogni iterazione, tutti i nodi raggiungibili distanti un solo arco dal nodo in cui si trova, in questo modo il nodo B viene visitato prima seguendo la strada che consuma meno e quindi il veicolo ha abbastanza batteria per raggiungere il nodo E. Questa situazione per`o non si verifica sempre, ad esempio sotto le seguenti condizioni, figura 4.3 a pagina 37:

(40)

CAPITOLO 4. DIJKSTRA PER VEICOLI ELETTRICI x< z

l> h + m + n batt(S, A) − l < j batt(S, A) − h − m − n > j

Il nodo E non viene visitato n´e utilizzando l’algoritmo di Dijkstra per veicoli elettrici n´e uti-lizzando l’algoritmo di Bellman-Ford per veicoli elettrici in quanto il percorso che porterebbe a scoprire anche il nodo E si trova a pi`u archi di distanza rispetto a quello che impiega tempo minore. Una volta scoperto il percorso che impiega tempo minore, essendo questa la nostra priorit`a, l’algoritmo non aggiorner`a il valore di quel nodo anche se questo consentirebbe di scoprire il nodo E. Per avere la certezza di raggiungere un nodo, quando possibile, si potrebbe scegliere di eseguire l’algoritmo con la quantit`a di batteria come peso da ottimizzare invece che con il tempo di percorrenza.

Eseguendo l’algoritmo con lo scopo di trovare tutti i percorsi minimi tra i nodi torretta, si `e notato che i percorsi variavano solo in carenza di batteria e che la percentuale di percorsi diversi si aggirava intorno all’h. In compenso la differenza nei tempi di esecuzione tra l’algoritmo di Dijkstra e quello di Bellman-Ford si aggirava intorno alle 300 volte, in favore del primo. Per questi motivi si `e scelto di utilizzare l’algoritmo di Dijkstra invece di quello di Bellman-Ford. Per rendere pi`u accurato l’algoritmo si sarebbe potuto scegliere di includere un controllo sulla presenza di un percorso di minimo consumo nel caso in cui non l’algoritmo di Dijkstra non avesse trovato nessun percorso. Si `e deciso, tuttavia, di non inserire questo controllo poich`e avrebbe rallentato l’algoritmo fornendo una informazione poco significativa. Si tenga a mente che i consumi di un veicolo elettrico dipendono da tanti fattori e, nella quasi totalit`a dei casi, ci trovavamo di fronte a guadagni di batteria irrisori.

(41)
(42)

CAPITOLO 4. DIJKSTRA PER VEICOLI ELETTRICI

(43)
(44)

Capitolo 5

SOTTOGRAFO DELLE TORRETTE

Trovato l’algoritmo migliore per calcolare il percorso di un veicolo elettrico, ci si `e trovati di fronte al problema della ricarica. I veicoli elettrici per loro natura hanno un’autonomia limitata alla capacit`a della propria batteria. Esaurita l’energia disponibile nella batteria necessitano di una sosta per ricaricare.

Questa necessit`a di ricaricare presenta, a livello di algoritmo, un ostacolo importante. Ogni qualvolta ci sia il bisogno di ricaricare sar`a necessario ricalcolare il percorso che passa per tutte le torrette di ricarica, al fine di trovare la torretta che impone la deviazione pi`u breve dal percorso ideale ovvero quello senza ricariche.

Si `e quindi deciso di utilizzare un sottografo delle torrette [BSWZ17] ovvero una struttura che raccoglie tutti i percorsi ottimi tra i nodi torretta presenti. L’utilizzo di questa struttura consente di velocizzare il calcolo per la ricerca del percorso ottimale in caso di ricarica. In que-sto modo, ogni volta che si render`a necessario il calcolo di un percorso contenente una o pi`u soste per la ricarica del veicolo, non ci sar`a bisogno di ricalcolare tutte le possibili combinazioni di percorsi che includono una o pi`u torrette nel tragitto. Tutte queste combinazioni saranno gi`a precalcolate all’interno del sottografo e sar`a quindi sufficiente, una volta certi della neces-sit`a di ricaricare, entrare nel sottografo delle torrette per trovare il percorso migliore fino alla destinazione.

(45)
(46)

CAPITOLO 5. SOTTOGRAFO DELLE TORRETTE

5.1

Creazione del sottografo

Per creare il sottografo delle torrette `e stato eseguito l’algoritmo di Dijkstra per veicoli elettrici prendendo come punto di partenza ogni torretta e non specificando nessun punto di destina-zione; in questo modo, l’algoritmo, trova tutti i percorsi che hanno come partenza la torretta selezionata e come destinazione tutte le altre torrette. Ogni nodo del sottografo contiene come informazioni il numero del nodo nel grafo di origine, le coordinate del nodo torretta e l’in-dirizzo della torretta. Ogni nodo `e in grado di contenere anche le informazioni sulla singola torretta, come ad esempio: il numero di postazioni di carica, la velocit`a, il tipo di attacco com-patibile, etc. Ogni arco del sottografo invece, oltre a i dati relativi all’identificazione dell’arco, immagazzina anche la distanza del percorso minimo per raggiungere il nodo, ovvero: il tempo di percorrenza dell’arco, l’insieme dei nodi che compongono il percorso minimo e il consumo di batteria lungo quel percorso. La costruzione del sottografo viene effettuata in modo che ogni arco rappresenti il percorso minimo tra i nodi, calcolato sul grafo originale, effettuabile con il massimo della capacit`a di batteria a disposizione. Nella nostra sperimentazione che ha come oggetto la regione Toscana sono stati costruiti due sottografi utilizzando due diversi approc-ci: nel primo caso si `e utilizzato l’algoritmo di Dijkstra per veicoli elettrici nel secondo, ci si `e approcciati al problema utilizzando l’algoritmo di Bellman-Ford per veicoli elettrici. Tra i sot-tografi risultanti dai due algoritmi si `e potuta apprezzare una leggera differenza, il sottografo costruito utilizzando l’algoritmo di Bellman-Ford per veicoli elettrici aveva . archi mentre il sottografo risultante dall’algoritmo di Dijkstra per veicoli elettrici ne aveva ., per una differenza di  archi, equivalenti all’h. Per quanto invece riguarda invece i tempi di esecu-zione dei due algoritmi, come abbiamo gi`a visto in precedenza, l’algoritmo di Bellman-Ford per veicoli elettriciimpiega un tempo di esecuzione estremamente pi`u lungo rispetto all’algoritmo di Dijkstra per veicoli elettrici. Considerato il piccolo vantaggio in termini di numero di percorsi trovati relativo all’utilizzo dell’algoritmo di Bellman-Ford per veicoli elettrici rispetto al grande svantaggio in termini di tempi di esecuzione, si `e optato per l’utilizzo dell’algoritmo di Dijkstra per veicoli elettriciper la costruzione dei sottografi delle torrette.

(47)

5.2

Utilizzo del sottografo

L’idea dell’utilizzo di un sottografo delle torrette `e quella di poter entrare in un grafo di percorsi ottimi nel momento in cui vi sia la necessit`a di ricaricare il veicolo. Questa possibilit`a riduce sensibilmente il costo computazionale in quanto i percorsi minimi tra torrette sono sempre gli stessi e in questo modo vengono calcolati una volta sola. Il metodo di utilizzo del sottografo varia a seconda dell’approccio che si sceglie di usare; nel nostro caso, il primo consisteva nel collegare il nodo di partenza ad ogni nodo torretta presente nel sottografo delle torrette e, suc-cessivamente, nel collegare ogni nodo torretta presente nel sottografo al nodo di destinazione del nostro tragitto. Questo approccio permette di ottenere il percorso migliore con ricarica, se esistente. Con questo approccio il tempo computazionale per collegare ogni nodo torretta alla destinazione `e molto simile a quello necessario alla creazione del sottografo delle torrette, quindi, in questo caso il vantaggio maggiore `e ottenuto se il veicolo necessita di due o pi`u ri-cariche durante il tragitto in quanto sfrutteremmo il vantaggio di aver gi`a calcolato i percorsi ottimi tra i nodi torretta. Sono state sviluppate due funzioni ausiliarie per aggiungere il nodo di partenza e il nodo di arrivo al sottografo.

DIST, BATT, PATH = DIJKSTRA-EV (Graph, partenza, battery , weight, consumo); Graph.add node(partenza);

for torre in SubGraph.nodes() do if torre in DIST then

Graph.add edge(partenza, torre, traveltime = DIST[torre], batteria = BATT[torre], percorso = PATH[torre]);

end end

Algorithm 6:AGGIUNGI-SOURCE(SubGraph, Graph, partenza, battery)

Come possiamo notare nell’algoritmo 8 nella pagina successiva viene creata una copia tem-poranea del sottografo. Ad ogni nodo del sottografo copiato vengono collegati il punto di par-tenza e il punto di arrivo del veicolo, in questo modo una volta che il veicolo entra nel sottografo delle torrette, ha gi`a precalcolati i percorsi pi`u veloci passanti per le torrette di ricarica; i

(48)

per-CAPITOLO 5. SOTTOGRAFO DELLE TORRETTE

Graph.add node(nodo);

for torre in SubGraph.nodes() do

if torre != arrivo and torre != partenza then

DIST, BATT, PATH = DIJKSTRA-EV (Graph, torre, battery , weight, consumo); end

if DIST is not None then

Graph.add edge(torre, arrivo, traveltime=dist[arrivo],batteria = batt[arrivo], percorso = path[arrivo]);

end end

Algorithm 7:AGGIUNGI-TARGET(SubGraph, Graph, partenza, arrivo, battery)

if partenza != arrivo then tempGsub D = subG.copy();

dist,batt,path = DIJKSTRA-EV (Graph, nodo, battery , weight, consumo); end

if dist is None then

AGGIUNGI-SOURCE (tempGsub D, G, partenza, battery); AGGIUNGI-TARGET (tempGsub D, G, partenza, battery);

return DIJKSTRA-EV-NO-VINCOLI(tempGsub D, partenza, arrivo, battery, weight, consumo)

else

return DIJKSTRA-EV (G, partenza, arrivo, battery, weight, consumo) end

(49)

caso in cui dovesse necessitare di pi`u di una sosta, la costruzione del sottografo non permette-rebbe all’algoritmo di uscirne passando da una singola torretta di ricarica ma sapermette-rebbe costretto a visitare il numero di torrette di ricarica equivalenti al numero di soste necessarie.

Il sottografo `e stato inoltre utilizzato per testare l’algoritmo di Dijkstra per veicoli elettrici, nella fattispecie, oltre al sottografo costruito con l’algoritmo di Dijkstra per veicoli elettrici, si `e costruito anche un sottografo delle torrette utilizzando l’originale algoritmo di Dijkstra, in questo modo si `e potuto fare un confronto tra i tempi impiegati da un veicolo elettrico che non necessita di effettuare la ricarica e i tempi impiegati da un veicolo a combustione. Si `e notato che su un totale di . percorsi, ovvero tutti i percorsi ottimi tra tutte le torrette ottenuti con algoritmo di Dijkstra, l’algoritmo di Dijkstra per veicoli elettrici, partendo con batteria piena riesce a percorrerne . senza necessit`a di ricaricare, con una perdita dell’.%, mentre l’algoritmo di Bellman-Ford per veicoli elettricitalvolta esplorando pi`u strade riesce a percor-rerne ., con una perdita dell’.%. Inoltre si sono andate ad analizzare le differenze tra i tempi dei percorsi ottimi utilizzando l’algoritmo di Dijkstra e i due algoritmi per veicoli elettrici.

In figura 5.3 a pagina 45 possiamo apprezzare la distribuzione delle differenze tra i tempi di percorrenza utilizzando l’algoritmo di Dijkstra e l’algoritmo di Dijkstra per veicoli elettrici men-tre nella figura 5.2 nella pagina successiva, possiamo osservare la distribuzione delle differenze tra i tempi di percorrenza utilizzando l’algoritmo di Dijkstra e l’algoritmo di Bellman-Ford per veicoli elettrici. In entrambi i casi si pu`o notare che per la quasi totalit`a dei percorsi le differenze sono minime. In questo studio si `e considerata la ricarica come ricarica completa ma ci`o non toglie che costruendo il sottografo delle torrette come un multigrafo con pi`u archi parallelli contenenti i percorsi pi`u veloci effettuabili con diversi livelli di batteria si pu`o simulare una ricarica parziale del veicolo.

(50)

CAPITOLO 5. SOTTOGRAFO DELLE TORRETTE

(51)
(52)

Capitolo 6

APPROCCI EURISTICI

L’algoritmo 8 a pagina 42 cos`ı definito, una volta implementato e testato su 100 percorsi, co-me ci si attendeva, si `e rivelato troppo lento nel calcolo del percorso, con alco-meno una ricarica, quando necessaria. Essendo quella di creare un trip-planner per veicoli elettrici una delle pos-sibili applicazioni dell’algoritmo, si `e reso necessario il miglioramento dei tempi di calcolo dei percorsi in presenza di ricarica. Si sono quindi tentati tre approcci euristici al problema. Da una analisi della complessit`a dell’algoritmo ci si `e resi conto che la porzione che impiegava il maggior tempo ad essere eseguita era quella descritta dalle due funzioni ausiliarie 6 a pagina 41 e 7 a pagina 42. Si `e quindi andati a cercare un approccio diverso al problema che si discostasse dalla ricerca del percorso in assoluto pi`u veloce e che modificasse in qualche modo il processo di aggiunta del nodo di partenza e del nodo di destinazione. Si sono quindi sviluppate due nuove funzioni per l’aggiunta dei nodi di partenza e di arrivo al sottografo.

6.1

Euristica 1

Il primo approccio euristico [algoritmo 11 a pagina 49] che `e stato valutato, trova il percorso pi`u veloce con ricarica controllando le torrette entro un certo range dai nodi del percorso. Si `e pensato di alleggerire la fase di aggiunta dei nodi di partenza e di arrivo limitando la scelta ai soli nodi torretta che si trovavano in un determinato range dai nodi del percorso calcolato senza il vincolo della batteria. Si `e quindi innanzitutto calcolato il percorso migliore come se il veicolo avesse autonomia illimitata, si `e definito un range entro il quale sarebbe dovuta ricadere

(53)

DIST, BATT, PATH = DIJKSTRA-EV (Graph, partenza, battery , weight, consumo); Graph.add node(partenza);

for torre in TorretteCandidate do if torre in DIST then

Graph.add edge(partenza, torre, traveltime = DIST[torre], batteria = BATT[torre], percorso = PATH[torre]);

end end

Algorithm 9: AGGIUNGI-SOURCE-EURISTICA(SubGraph, Graph, partenza, battery, TorretteCandidate)

Graph.add node(nodo);

for torre in TorretteCandidate do

if torre != arrivo and torre != partenza then

DIST, BATT, PATH = DIJKSTRA-EV (Graph, torre, battery , weight, consumo); end

if DIST is not None then

Graph.add edge(torre, arrivo, traveltime=dist[arrivo],batteria = batt[arrivo], percorso = path[arrivo]);

end end

Algorithm 10: AGGIUNGI-TARGET-EURISTICA (SubGraph, Graph, partenza, arrivo, battery, TorretteCandidate)

(54)

CAPITOLO 6. APPROCCI EURISTICI

la torretta e si sono quindi, per ogni nodo del percorso, andate a cercare le torrette a distanza minore del range definito, da ogni nodo. Si `e quindi creata una lista di nodi torretta candidati ad essere la torretta di ricarica del percorso. Una volta ottenuta la lista dei nodi candidati si sono utilizzati come punti di accesso al sottografo delle torrette e sono stati quindi collegati al nodo di partenza e al nodo di arrivo.

6.2

Euristica 2

Il secondo approccio euristico [algoritmo 12 a pagina 50] che `e stato valutato, trova il percorso pi`u veloce con ricarica controllando le torrette entro un certo range dai nodi di partenza e di arrivo del percorso. In questo caso si `e pensato di alleggerire la fase di aggiunta dei nodi di partenza e di arrivo limitando la scelta ai soli nodi torretta che si trovavano all’interno di un determinato range dai nodi di partenza e di arrivo. Si `e quindi inizialmente definito un range entro il quale sarebbe dovuta ricadere la torretta, si sono poi calcolate le distanze tra il nodo di partenza e i suoi nodi vicini fino a trovare il nodo torretta pi`u vicino, lo stesso procedimento si `e utilizzato per trovare la torretta pi`u vicina al nodo di arrivo e si sono utilizzati questi due nodi torretta come porta di accesso e porta di uscita al sottografo delle torrette. Questa euristica ha come vantaggio la rapidit`a di calcolo, in quanto deve collegare solo due nodi al sottografo delle torrette; tra gli svantaggi invece troviamo l’obbligo di passare per quei due nodi torretta, il che significa quindi una deviazione imposta a priori magari non necessaria, considerato il fatto che questa potrebbe rivelarsi molto dispendiosa e allontanare il veicolo dall’arrivo nel caso in cui ci trovassimo in una zona con una bassa densit`a di torrette e la pi`u vicina fosse nella direzione geografica opposta al punto di destinazione.

6.3

Euristica 3

Il terzo approccio euristico [algoritmo 13 a pagina 52] che `e stato valutato, trova il percorso pi`u veloce con ricarica collegando il nodo di partenza con tutte le torrette e il nodo di arrivo alla torretta pi`u vicina. In questo caso si `e pensato di alleggerire la fase di aggiunta dei nodi di partenza e di arrivo limitando la scelta ai soli nodi torretta che si trovavano all’interno di

(55)

if partenza != arrivo then tempGsub D = subG.copy();

DIST, BATT, PATH = DIJKSTRA-EV (Graph, nodo, battery , weight, consumo); end

if DIST is None then

DIST, PATH = DIJKSTRA (G, partenza, arrivo, weight=’traveltime’); if DIST is not None then

TorretteCandidate;

for NodoPercorso in PATH do

for NodoTorretta in SubGraph do

if Distanza(NodoPercorso, NodoTorretta)< offset then TorretteCandidate.append(NodoTorretta);

end end end

AGGIUNGI-SOURCE-EURISTICA (tempGsub D, G, partenza, battery, ToretteCandidate);

AGGIUNGI-TARGET-EURISTICA (tempGsub D, G, partenza, arrivo, battery, ToretteCandidate);

return DIJKSTRA-EV-NO-VINCOLI(tempGsub D, partenza, arrivo, battery, weight, consumo)

end else

return DIJKSTRA-EV (G, partenza, arrivo, battery, weight, consumo) end

(56)

CAPITOLO 6. APPROCCI EURISTICI

if partenza != arrivo then tempGsub D = subG.copy();

DIST, BATT, PATH = DIJKSTRA-EV (Graph, nodo, battery , weight, consumo); end

if DIST is None then

DIST, PATH = DIJKSTRA (G, partenza, arrivo, weight=’traveltime’); if DIST is not None then

TorretteCandidateStart; TorretteCandidateEnd;

for NodoTorretta in SubGraph do

if Distanza(partenza, NodoTorretta)< offset s then TorretteCandidateStart.append(NodoTorretta); end

end

for NodoTorretta in SubGraph do

if Distanza(arrivo, NodoTorretta)< offset e then TorretteCandidateEnd.append(NodoTorretta); end

end

AGGIUNGI-SOURCE-EURISTICA (tempGsub D, G, partenza, battery, ToretteCandidateStart);

AGGIUNGI-TARGET-EURISTICA (tempGsub D, G, partenza, arrivo, battery, ToretteCandidateEnd);

return DIJKSTRA-EV-NO-VINCOLI(tempGsub D, partenza, arrivo, battery, weight, consumo)

end else

return DIJKSTRA-EV (G, partenza, arrivo, battery, weight, consumo) end

(57)

un determinato range dai nodi di arrivo, collegando comunque il nodo di partenza a tutti i nodi torretta e garantendo in questo modo una pi`u ampia scelta di ingresso nel sottografo delle torrette, mantenendo quasi lo stesso tempo di esecuzione, in quanto nell’euristica 2 si tratta di una esecuzione dell’algoritmo DIJKSTRA-EV con nodo di partenza e nodo di arrivo mentre nell’euristica 3 si tratta di una esecuzione dell’algoritmo DIJKSTRA-EV con nodo di partenza ma senza nodo di arrivo, ovvero su tutto il grafo. Questa euristica ha come vantaggio quasi la stessa rapidit`a di calcolo dell’euristica 2 ma una maggiore accuratezza in quanto non si limita a collegare il punto di partenza con il nodo torretta pi`u vicino ma lo collega a tutti i nodi torretta presenti nel sottografo. Soffre degli stessi svantaggi dell’euristica 2 per quanto riguarda il nodo di arrivo: potrebbe anch’esso, in alcuni casi, portare il veicolo, almeno inizialmente, su un percorso che lo allontanerebbe dal punto di arrivo.

6.4

Scelta del range

Negli approcci euristici proposti si `e definito un range arbitrario, per dare la possibilit`a all’u-tente di poter decidere quanto deviare dal percorso ottimale o quanto allontanarsi dai punti predefiniti. Si `e per`o valutata anche l’opzione in cui l’utente non sia in grado o non voglia de-cidere di quanto allontanarsi dal cammino ottimo ma voglia lasciare all’algoritmo questa scelta. La scelta arbitraria del range includeva tutte le torrette in quel raggio mentre con questa opzio-ne se opzio-ne seleziona solo una. La scelta del range pu`o essere operata sia tramite una serie di prove che vanno a individuare la torretta pi`u vicina al nodo del percorso, sia attraverso l’utilizzo di un modello KNN. Il problema dell’approccio iterativo alla ricerca della torretta pi`u vicina `e che ci si potrebbe trovare di fronte ad alcune situazioni in cui la ricerca della torretta pi`u vicina impieghi tempi molto lunghi, questo perch´e durante il tragitto ci si allontana da luoghi abitati e quindi da luoghi ricchi di punti di ricarica, rallentando notevolmente l’algoritmo.

L’approccio KNN, al contrario, velocizza notevolmente questa scelta. Si `e quindi utilizzato un classificatore KNN che tramite la distanza euclidea riesce a trovare il nodo torretta pi`u vicino in tempi molto rapidi. Il modello `e stato addestrato sul sottografo delle torrette e utilizza la distanza euclidea per trovare la torretta pi`u vicina al nodo in questione.

(58)

CAPITOLO 6. APPROCCI EURISTICI

if partenza != arrivo then tempGsub D = subG.copy();

DIST, BATT, PATH = DIJKSTRA-EV (Graph, nodo, battery , weight, consumo); end

if DIST is None then

DIST, PATH = DIJKSTRA (G, partenza, arrivo, weight=’traveltime’); if DIST is not None then

TorretteCandidateEnd;

for NodoTorretta in SubGraph do

if Distanza(arrivo, NodoTorretta)< offset e then TorretteCandidateEnd.append(NodoTorretta); end

end

AGGIUNGI-SOURCE (tempGsub D, G, partenza, battery);

AGGIUNGI-TARGET-EURISTICA (tempGsub D, G, partenza, arrivo, battery, ToretteCandidateEnd);

return DIJKSTRA-EV-NO-VINCOLI(tempGsub D, partenza, arrivo, battery, weight, consumo)

end else

return DIJKSTRA-EV (G, partenza, arrivo, battery, weight, consumo) end

(59)

ESPERIMENTI

Ottenuto l’algoritmo con ricarica e le euristiche si `e potuto dare inizio alla fase di sperimenta-zione e valutasperimenta-zione dell’euristica migliore. Si sono effettuati diversi test partendo da dati reali. I dati a disposizione riguardavano dei tragitti reali da un punto di partenza ad un punto di arrivo descritti da coordinate geografiche e limitati alla sola Regione Toscana. Questi dati sono stati resi anonimi, estraendo il nodo pi`u vicino ai punti reali di partenza e di arrivo e utilizzando questi nodi come punti di partenza e di arrivo del tragitto. Da questi percorsi se ne `e estratto un campione casuale formato da  coppie partenza arrivo e si `e calcolato il percorso migliore applicando l’algoritmo LONG-SEARCH e i tre approcci euristici. Ci si `e resi subito conto che la quantit`a di batteria massima permetteva il raggiungimento di quasi tutti i nodi torretta. Si sono allora effettuate delle ulteriori simulazioni per andare a verificare quale fosse la percen-tuale di percorsi che necessitavano di almeno una sosta in rapporto alla percenpercen-tuale di batteria con cui si faceva partire il veicolo. La distribuzione di questi valori `e apprezzabile nel grafico in figura 7.1 nella pagina seguente. Come possiamo vedere nel grafico e come ci aspettavamo, maggiore `e la quantit`a di batteria a disposizione al momento della partenza e minore sar`a la necessit`a di effettuare una sosta per ricaricarla. Per ottenere la distribuzione delle ricariche in base alla batteria di partenza, si sono effettuate . simulazioni sullo stesso campione di per-corsi, per ogni livello di batteria e si sono andati a contare il numero di percorsi in cui il veicolo necessitava di ricaricare. Si `e quindi deciso di ridurre la quantit`a di batteria alla partenza, in questo modo si `e cercato di simulare un veicolo che si trovasse in situazione di scarsa batteria e

(60)

CAPITOLO 7. ESPERIMENTI

(61)

Figura 7.2: Scatter plot consumo batteria su tempo di percorrenza

un’autonomia di circa −  minuti di percorrenza prima di esaurire la carica. Da un’analisi degli archi del grafo che `e stato costruito si `e estrapolato il consumo medio per unit`a di tempo che `e pari a circa .Kw per ora di percorrenza, questo dato `e stato stimato effettuando una media del consumo per ogni arco del grafo rispetto al tempo che si impiega a percorrerlo. Si `e inoltre effettuata una rappresentazione, tramite scatter plot, figura 7.2 dei consumi di batteria rispetto al tempo di percorrenza degli archi dove si pu`o notare come il consumo di batteria dipenda dai minuti di movimento del veicolo ma non in modo perfettamente lineare. Una ul-teriore rappresentazione, sempre tramite scatter plot, figura 7.3 nella pagina seguente, `e stata fatta per mostrare la correlazione tra il consumo di batteria e la lunghezza dell’arco, nuova-mente si pu`o notare come il consumo di batteria dipenda dalla lunghezza dell’arco sempre in modo non perfettamente lineare, questo dipende dalle caratteristiche della strada, ovvero la pendenza e la velocit`a che influenzano il consumo, portandolo alle volte a essere negativo.

Nella figura 7.4 a pagina 57 vediamo una simulazione del percorso di un veicolo elettrico con a disposizione Kw di batteria su uno stesso tragitto effettuato da un veicolo alimentato a combustibile. Possiamo apprezzare come l’algoritmo devia dal percorso ottimo per effettuare

(62)

CAPITOLO 7. ESPERIMENTI

Figura 7.3: Scatter plot consumo batteria su lunghezza arco

to di arrivo, in blu il percorso ottimo, quello calcolato come se il veicolo non fosse elettrico e quindi avesse autonomia infinita, in rosso la deviazione da questo percorso ottimo e in giallo la torretta di ricarica e quindi il punto in cui viene effettuata la sosta. Successivamente ci si `e concentrati sul confronto tra i tempi di esecuzione degli algoritmi. Si sono effettuate del-le simulazioni sullo stesso campione di tragitti per ottenere i tempi di esecuzione dei diversi algoritmi. Nel primo caso, come possiamo vedere in figura 7.5 a pagina 58 sono stati confron-tati l’algoritmo LONG-SEARCH con le tre euristiche sia nella versione con offset predefinito che nella versione Knn. Dallo scatter plot possiamo vedere come l’algoritmo LONG-SEARCH rappresentato dai triangoli rossi `e il pi`u lento, impiegando quasi tre ore per calcolare cento percorsi. Tra gli approcci euristici possiamo vedere come l’euristica 2 con offset predefinito, rappresentata dal simbolo+, sia veloce quanto le euristiche con il Knn, andando per`o a vedere il numero di percorsi trovati ci si accorge che a differenza degli altri algoritmi questa euristica per ben due volte non trova nessun percorso. Le stesse conclusioni le possiamo trarre anche nello scatter plot, un po’ pi`u nel dettaglio, in figura 7.6 a pagina 58. Si `e poi andati a vedere nello specifico un confronto tra le tre euristiche pi`u veloci ovvero le Knn, anche in questo caso le simulazioni sono state eseguite su un campione di  tragitti. Come possiamo apprezzare

(63)

Riferimenti

Documenti correlati

Progetto Lauree Scientifiche.

A questo punto la ricerca del minimo ha un costo pari all’estrazione dell’elemento di priorità massima dalla coda, e l’aggiornamento dei valori di d, essendo effettuato una sola

Nascono i sistemi a chiave asimmetrica, composti da una chiave pubblica, nota a tutti ed usata per la cifratura, e da una chiave privata,.. nota ad una sola persona ed usata per

Si tratta di uno schema che calcola delle etichette π ammissibili (e ottime) per il problema duale con una caratteristica che lo differenzia dagli algoritmi label correcting

Irroratela quindi con un quarto di litro di vino e con altrettanto fumetto di pesce, poi passatela nel forno a 150 gradi per 45 minuti circa, unendo, a metà cottura, i

Il Metodo di Dijkstra.. Codifica del metodo di Dijkstra. 1)

Vogliamo dimostrare che la matrice simmetrica A ha abbastanza autodimensione, cio` e vogliamo usare il Teorema fondamentale della diagonalizzazione.. Allora assumiamo il contrario,

 Se nessuna variabile artificiale è ancora in base, ho una base fatta da sole colonne del problema originario e posso partire con Fase 2 su esso.  Se ho ancora variabili