INOM
EXAMENSARBETE TEKNIK, GRUNDNIVÅ, 15 HP
STOCKHOLM SVERIGE 2016 ,
Ruttoptimering vid
massbeställning av taxi
GUSTAF ENGELBREKTSSON
KTH
Ruttoptimering vid massbeställning av taxi
GUSTAF ENGELBREKTSSON
Examensarbete kandidatnivå ICT-skolan
Industriell handledare: Anders Söderman, Claremont AB Examinator: Johan Montelius
TRITA-ICT-EX-2016:55
Referat
För att företags personal ska utvecklas kan anställda be- höva skickas på konferenser och kurser. Anställda behöver transporteras till och från sammankomster och för detta är taxi ett möjligt färdmedel. Claremont är ett Stockholms- baserat IT-konsultföretag som alltid har behov att utveck- la sina 220 konsulters kompetens, där taxi är ett vanligt transportmedel till sammankomster eller flygplatser. För att minska utgifter för transporter kan samåkning med taxi ske.
I dagsläget sker logistikplaneringen för samåkning ge- nom att företaget själva eller taxibolag manuellt utan hjälp av datorkraft försöker ta fram möjliga rutter för samåkning, rutter som i slutändan inte alltid blir bra. Kan denna pro- cess automatiseras och beräknas med datorkraft kan bra ruttförslag ges vilket resulterar i att planeringstid, restid och pengar sparas.
Problemet samåkning med taxi från en plats till flera eller från flera platser till en har modellerats som en instans av Vehicle Routing Problem. Vehicle Routing Problem be- skriver hur många och i vilken ordning ett eller flera fordon ska besöka olika destinationer.
En systemarkitektur har tagits fram där adresser ma-
tas in och ett förslag på rutter returneras till användaren
i form av en lista med adresser, där adresserna är gruppe-
rade i olika rutter. Visualisering sker även på en karta för
kontroll av lösningen och ackumulerad tid samt uppskattat
pris visas. Systemarkitekturen använder sig av avancerade
algoritmer och heuristiker i Open Source Routing Machine
Abstract
Route optimization of taxi bulk ordering
In order for companies’ staff to improve their knowledge employees may need to be sent to conferences and courses.
Employees needs transport to and from gatherings and for this taxi is a possible mean of conveyance. Claremont is a Stockholm based IT-consulting firm that always have the need to improve their 220 consultants’ competence, where taxi is a common mode of conveyance to gatherings or air- ports. To reduce expenditures, it is possible to use rideshar- ing with taxis.
Currently the logistics planning for ridesharing is per- formed by the company themselves or taxi companies man- ually without help from computer power, where they try to produce possible routes for ridesharing that in the end not always turns out good. If this process can be automa- tized and calculated with computer power it is possible to give satisfactory route suggestions which results in savings in planning time, travel time and costs.
The problem ridesharing with taxis from many-to-one or one-to-many locations has been modelled as an instance of the Vehicle Routing Problem. The Vehicle Routing Prob- lem describes how many and in which order one or multiple vehicles should visit multiple destinations.
A system architecture has been developed where ad-
dresses are inputted and a suggestion for routes is returned
to the user in the form of lists of addresses, where the ad-
dresses are grouped in different routes. Visualization is
also performed on a map for checking the solution and ac-
cumulated time with approximated price is displayed. The
system architecture uses advanced algorithms and heuris-
tics in the Open Source Routing Machine and Optaplanner
to solve the problem.
Innehåll
1 Inledning 1
1.1 Bakgrund . . . . 1
1.2 Problem . . . . 2
1.3 Syfte . . . . 2
1.4 Mål . . . . 2
1.5 Metod . . . . 2
1.6 Avgränsning . . . . 2
1.7 Disposition . . . . 3
2 Teoribakgrund 5 2.1 Vehicle Routing Problem . . . . 5
2.1.1 Olika probleminstanser . . . . 5
2.2 Prismodell för taxi . . . . 6
2.3 Redogörelse för använda verktyg . . . . 6
2.3.1 REST & MVC . . . . 6
2.3.2 Optaplanner . . . . 7
2.3.3 Spring . . . . 8
2.3.4 AngularJS & Leaflet . . . . 8
2.3.5 Open Source Routing Machine & Open Street Map . . . . 8
3 Metod & Genomförande 9 3.1 Utvecklingsprocess . . . . 9
3.1.1 Definition och identifikation av problem . . . . 9
3.1.2 Litteraturstudie . . . . 11
3.1.3 Planering av struktur, val av verktyg och utveckling av system 11 3.2 Testning . . . . 12
3.2.1 Testdata . . . . 12
3.2.2 Testsystem . . . . 12
3.3 Framtagning av prisuppgift för drift . . . . 13
4 Systemarkitektur 15
4.1 Översikt . . . . 15
4.2.1 Grafiskt gränssnitt . . . . 16
4.2.2 Bakomliggande struktur . . . . 18
4.3 Serverarkitektur . . . . 19
4.3.1 Övergripande struktur . . . . 20
4.3.2 Beräkning av kantvikter . . . . 20
4.3.3 Optimering: framtagning av lösning . . . . 20
4.3.4 Verifiering . . . . 21
4.4 Optimering av tid för beräkning . . . . 21
4.4.1 Identifikation av tidskrävande moment . . . . 22
4.4.2 Lokalsökning krävs . . . . 22
4.4.3 Konfiguration av Optaplanner . . . . 22
4.5 Slutgiltig tid för skapande av lösningsförslag . . . . 24
4.6 Kostnad för drift . . . . 24
4.6.1 Geocoding . . . . 24
4.6.2 Serverdrift . . . . 26
5 Diskussion och slutsatser 29 5.1 Återkoppling till syfte . . . . 29
5.2 Acceptabel förlängning i restid . . . . 29
5.3 Begränsningar med geocoding . . . . 30
5.4 Möjliga framtida arbeten . . . . 30
5.4.1 Alternativ systemarkitektur . . . . 30
5.4.2 Taxibokning via API . . . . 31
5.4.3 Bättre användarupplevelse . . . . 32
5.5 Alternativa lösningar & arbetets bidrag till forskning . . . . 32
5.6 Metoder och val av verktyg . . . . 32
Litteratur 33
Kapitel 1
Inledning
Samåkning med taxi kan spara in pengar hos taxiresenärer. Idag finns diverse web- baserade tjänster för samåkning med taxi där många bygger på att personer ett tag före resan skriver in sin startpunkt och destination, för att eventuellt paras ihop med lämpliga medpassagerare. Det är oklart vilka medpassagerarna blir, helt okända människor kan bli medpassagerare vilket ibland kan upplevas som mindre trevligt. Ibland kan det även krävas att planering sker ett tag före avresa.
Via är en tjänst som implementerar taxi-samåkning i realtid, i en applikation slås startpunkt och destination in och en lämplig taxi hittas direkt. Är för tillfäl- let endast tillgänglig i New York och Chicago, större städer med många taxibilar tillgängliga [34]. Bandwagon är en tjänst som finns för enstaka terminaler på flyg- platser och event. Här slås en destination in och en eventuell matchning ska ske inom tio minuter [4]. Taxi for Two liknar Bandwagon men har möjligheten att även i förväg hitta människor att samåka med [30]. Det dessa tjänster har gemensamt är att samåkning sker med okända människor.
1.1 Bakgrund
Claremont är ett IT-konsultföretag som de senaste åren växt kraftigt [25]. För att deras anställda ska utveckla sin kompetens behöver de ibland skicka många (över 220) av sina anställda på kurs eller konferens. Vanligtvis är det taxi exempelvis till Arlanda från konsulternas bostäder i Stockholmsområdet som är aktuellt som transportmedel. Idag sker planeringen för detta med manuellt arbete utan datorbe- räkning, där företaget antingen själva försöker ordna samåkning eller ber taxibolag lösa problemet. Kan denna beräkning utföras av en dator minskas arbetsbelastning- en.
Problemet att optimera körrutter från en och samma startpunkt till multipla
destinationer samt tvärtom är NP-svårt (förklaring i sektion 2.1), vilket medför
att optimala körrutter inte kan beräknas inom rimlig tid (förutom för väldigt små
instanser) [19]. En optimal lösning kan däremot approximeras [6], vilket kan ge
fungerande körrutter.
KAPITEL 1. INLEDNING
1.2 Problem
Beräkning av samåkning med taxi ska inte behöva ske manuellt utan beräkning ska kunna ske med datorkraft. Problemet samåkning med taxi behöver modelleras och för att beräkning ska kunna ske inom rimlig tid krävs en systemarkitektur som använder sig av avancerade algoritmer för att approximera optimala körrutter.
Arkitekturen måste vara skalbar för att kunna hantera större probleminstanser. För att systemet ska vara användarvänligt samtidigt som kontroll av föreslagna lösningar måste kunna ske krävs ett grafiskt gränssnitt.
1.3 Syfte
Syftet är att förenkla för grupper att ta sig hem och till punkter via samåkning.
Syftet för uppgiften är att ta reda på och redogöra för en systemarkitektur som löser detta problem inom rimlig tid.
1.4 Mål
Målet är en fungerande prototyp till en systemarkitektur som klarar av att approx- imera optimala körrutter för samåkning med Taxi. Uppdelning i flera taxibilar från olika startpunkter till en och samma destination samt olika destinationer med sam- ma startpunkt ska fungera. Indata ska vara i form av en lista på adresser, därefter ska en lösning på samåkningsproblemet hittas snabbt och presenteras. Att även ta fram en prisuppgift för drift bidrar till att se om systemet kan vara lönsamt. Sys- temarkitekturen ska bidra till ökad lönsamhet för samåkning inom skilda grupper samt mindre arbete för planering av samåkning. Samåkning bidrar till minskade transporter, vilket bidrar till minskade utsläpp och mindre trängsel.
1.5 Metod
Samåkningsproblemet har identifierats som en instans av Capacitated Open Vehicle Routing Problem (COVRP). Komplexa ramverk har hittats och en systemarkitektur har utvecklats och implementerats. Den mest tidskrävande delen av systemarkitek- turen har identifierats och prestandaoptimerats. API-tjänster för geocoding (över- sättning av adresser till koordinater) har undersökts för möjliggörande av framtag- ning av prisuppgift för drift.
1.6 Avgränsning
Fokus ska inte vara på tjänstens visuella design, grundläggande funktion före form kommer prioriteras. Fokus är att få till hyfsade lösningar för större probleminstanser inom kort tid, om arkitekturen även visar sig fungera bra för mindre probleminstan- ser får det ses som en bonus.
2
1.7. DISPOSITION
Arbetet i denna rapport fokuserar på Stockholm och exempelvis översättning från adresser till koordinater kommer inte diskuteras för andra regioner. Systemar- kitekturen i sig är dock inte tänkt att ha några geografiska begränsningar inbyggda, det som är regionspecifikt är kartunderlag.
En taxi förutsätts ta snabbaste vägen och inte den för kunden billigaste vägen, vilket medför att enbart körtid optimeras och inte kostnad. En taxi förutsätts ha rörliga priser, i verkligheten förekommer det fastpris till utvalda destinationer.
Kontakt och förhandling med företag som erbjuder API-tjänster kommer inte att ske förutom enstaka prisförfrågningar och förfrågningar om vad deras API-tjänster erbjuder.
1.7 Disposition
Det första kapitlet introducerade bakgrunden, problemet, syfte, mål och avgräns-
ning för uppsatsen. Kapitel 2 presenterar nödvändiga kunskaper för att förstå upp-
satsen. Kapitel 3 redogör för utvecklingsprocessen och hur samåkningsproblemet
med taxi lösts. Kapitel 4 presenterar den resulterande systemarkitekturen och drifts-
kostnad. Kapitel 5 diskuterar några problem och framtida arbeten.
Kapitel 2
Teoribakgrund
Detta kapitel redogör för teori som läsaren behöver bekanta sig med för att förstå rapporten. Sektion 2.1 redogör för Vehicle Routing Problem och dess klasser, sek- tion 2.2 visar en typisk prismodell för en taxi och sektion 2.3 presenterar de verktyg och ramverk som systemarkitekturen använder.
2.1 Vehicle Routing Problem
Handelsresandeproblemet (Travelling Salesman Problem (TSP)) beskriver i vilken ordning en handelsman ska besöka en uppsättning städer, där målet är att minimera restiden [23]. Vehicle Routing Problem (VRP) är en generalisering av TSP som först definierades 1959, där VRP beskriver i vilken ordning en eller flera lastbilar ska besöka multipla servicestationer från en huvudstation [7]. VRP och TSP är NP- svåra problem vilket betyder att probleminstanser inte går att lösa inom rimlig tid (förutom väldigt små) [19].
Typiskt för NP-svåra problem är att om en optimal lösning ska hittas måste exempelvis alla möjliga lösningar testas för att se vilken som är bäst. Komplexiteten för att testa alla möjliga lösningar blir inte polynomisk, vanligt är att för varje ökning i indata dubbleras antalet möjliga lösningar som måste testas. [18, s. 33-35]
För att hitta lösningar inom rimlig tid till det NP-svåra problemet VRP kan avancerade algoritmer användas som approximerar optimala lösningar [6]. Approx- imationsalgoritmer hittar lösningar i polynomisk tid (rimlig tid), men lösningar är inte optimala utan är istället nära optimala [18, s. 599].
2.1.1 Olika probleminstanser
VRP har utvecklas sedan 1959 och kan delas in i olika klasser, där några klasser är: [33]
• Capacitated VRP (CVRP). Varje kund (”servicestation” i originella defi-
nitionen) har ett i förväg känt behov av en handelsvara. Fordonsflottan består
KAPITEL 2. TEORIBAKGRUND
av ett fast antal fordon som utgår från en enda depå, där varje fordon har en fast kapacitet för antal handelsvaror som får plats.
• Open VRP (OVRP). I vanliga VRP behöver ett fordon åka tillbaks till depån när sista kunden i en slinga har besökts, i Open VRP behöver inte detta ske.
• Time Windowed VRP. Varje kund har ett tidsfönster för när ett fordon kan tillgodose ett behov. Exempelvis kanske en kund som väntar på en hem- leverans enbart är hemma vissa tider.
Dessa problemklasser kan kombineras, exempelvis kan CVRP och OVRP kom- bineras till COVRP vilket bildar en klass där fordon inte behöver åka tillbaks till depån efter sista kundbesöket och varje kund har ett visst behov av en handelsvara.
Fler problemklasser än de presenterade finns.
2.2 Prismodell för taxi
Kostnadsmodellen för en taxi kan förenklat bestå av en startkostnad och rörlig kostnad för avstånd och tid. Om c är startkostnad, a pris per timme, t antal timmar, b pris per kilometer och d antal körda kilometer kan sambandet definieras:
c + a ∗ t + b ∗ d
Om n är antalet rutter och i en rutt blir den totala kostnaden för samåkning
då:
nX
i=1
(c + a ∗ t
i+ b ∗ d
i)
Prismodellen kompliceras för en riktig resa av exempelvis olika pris beroende på vilken tid på dygnet resan sker, fastpris till utvalda destinationer och extra avgifter vid vissa knutpunkter [27]. Att försöka definiera och ge ett exakt pris i ett program utan samarbete med taxibolag får därför anses för komplicerat. Syftet med prismodellen är att kunna ge en ungefärlig uppskattning för slutanvändarens pris, för att slutanvändaren därefter kan begära en offert från olika taxibolag.
2.3 Redogörelse för använda verktyg
2.3.1 REST & MVC
Representational State Transfer (REST) är en tillståndslös lättviktig klient-server arkitektur för kommunikation mellan nätverksapplikationer, där HTTP vanligtvis används som underliggande protokoll. REST är plattforms- och språkoberoende vilket medför mindre begränsningar än vissa alternativ till REST som exempelvis remote procedure call. [9, 8]
6
2.3. REDOGÖRELSE FÖR ANVÄNDA VERKTYG
Model-View-Controller (MVC) är en arkitektur där en applikation delas upp i tre delar. En Model behandlar data och kan exempelvis innehålla funktioner för att behandla data i en databas. En View är användarinterfacet, exempelvis HTML.
En Controller innehåller logiken som bestämmer vad View-delen ska visa och vad Model-delen ska göra. MVC är en kraftfull arkitektur som används av många po- pulära ramverk för webbapplikationer. [16]
2.3.2 Optaplanner
Optaplanner är en motor för optimering av planeringsproblem som definieras med villkorsprogrammering. Planeringsproblem såsom planering av tentamina och VRP kan modelleras och optimeras i Optaplanner, exempelvis finns VRP modellerat som ett exempel i Optaplanner. Planeringsproblem som modelleras i Optaplanner är NP-svåra, vilket innebär att Optaplanner använder avancerade algoritmer för att approximera en optimal lösning inom rimlig tid. [31]
Heuristik är problemberoende och kan ses som en algoritm som använder kva- lificerade gissningar för att lösa ett problem, nackdelen är att en lösning inte är garanterat optimal medan fördelen är att en lösning kan hittas inom rimlig tid.
En konstruktionsheuristik bygger en lösning snabbt som är avsedd att användas av exempelvis lokalsökning som kräver en lösning att utgå ifrån [31].
Lokalsökning utgår från en existerande lösning och förbättrar den. Lokalsökning använder en sökstig och utvärderar i varje steg vilket steg som ska tas näst. Ett exempel på en algoritm som använder sig av lokalsökning är Hill Climbing, som utgår från en existerande lösning för att sedan iterativt testa ändringar och välja bättre ändringar. Ett problem med Hill Climbing är att algoritmen kan fastna i ett lokalt optimum. [31]
Metaheuristik är ett algoritmramverk som till skillnad från heuristik är pro- blemoberoende. Metaheuristik använder sig precis som av heuristik kvalificerade gissningar där exempelvis lokalsökning är en möjlig algoritm som används av me- taheuristik. [12]
Ett exempel på en metaheuristik är tabusökning. Tabusökning fungerar på ett liknande sätt som lokalsökning men kommer ihåg möjliga steg som är tabu. Ta- busökning undviker tack vare minnet att fastna i lokala optimum. [31]
En generell lösningsfas för Optaplanner sker genom att en konstruktionsheuristik först snabbt tar fram ett lösningsförslag, som metaheuristik sedan utgår ifrån för att skapa lösningsförslag som är närmare den optimala lösningen. Metaheuristik kan vara exempelvis tabusökning. [31]
Optaplanner valdes framför alternativ på grund av dess stora möjligheter till
konfiguration av exempelvis vilka algoritmer som används, detta eftersom syste-
markitekturen har som mål att snabbt ta fram resultat kan algoritmer behöva ut-
värderas ur ett prestandaperspektiv. Optaplanner är dessutom skrivet i Java vilket
uppsatsarbetaren är bekant med, jämfört med exempelvis Lisp som ett möjligt al-
ternativ använder.
KAPITEL 2. TEORIBAKGRUND
2.3.3 Spring
Spring-ramverket är en plattform för Java som tillhandahåller infrastruktur för Java- applikationer. Stöd för att serialisera (Java-objekt till JSON) är inbyggt vilket gör det enkelt att konstruera en serverapplikation som följer REST och MVC. [17]
Spring har valts då många exempel för Spring från början använder REST samt då Spring är skrivet i Java kan Optaplanner byggas in i samma tjänst, om en plattform skrivet i ett annat språk än Java skulle Optaplanner behöva köras som en egen Java-server.
2.3.4 AngularJS & Leaflet
Eftersom REST används krävs det att en klient klarar av att skicka REST-förfrågningar till en server. AngularJS är ett ramverk för Javascript som gör det möjligt att ren- dera HTML-sidor dynamiskt med asynkron laddning [2]. AngularJS valdes framför alternativ eftersom det har ett inbyggt stöd för REST samt uppsatsarbetaren har begränsad erfarenhet utav AngularJS.
I användargränssnittet behöver lösningar kunna presenteras visuellt, detta för att snabbt kunna verifiera lösningar och under testning se att inga lösningar är för dåliga. Leaflet är ett Javascript-bibliotek som innehåller funktioner för att visa kartor och lager med linjer och markörer [1]. Leaflet valdes då det har tydliga lättanvända exempel samt stöd för flera olika karttjänster.
2.3.5 Open Source Routing Machine & Open Street Map
Open Street Map (OSM) är en öppen karttjänst där användare själva kan uppdatera kartan. Då OSM är öppen data är det möjligt för en användare att få tillgång till all data utan begränsningar [26]. Detta kan jämföras med stängda karttjänster såsom Google Maps, Hitta & Eniro där det inte är tillåtet eller möjligt att exportera kartdatabaser. En nackdel med OSM är att gatunummer i Sverige vanligtvis inte finns vilket gör att OSM inte kan användas för att få koordinater från adresser (geocoding).
Tjänster såsom Google Maps låter en användare att i realtid beräkna rutter med begränsningar. Open Source Routing Machine (OSRM) är skrivet i C++ och använder sig av kartdata från OSM för att beräkna rutter i realtid. Eftersom OSRM är öppet och möjligt att själv köra finns inga begränsningar för antalet maximala förfrågningar som får ske. [22]
8
Kapitel 3
Metod & Genomförande
Detta kapitel redogör för utvecklingsprocessen i sektion 3.1 där det förklaras hur problemet samåkning med taxi definieras, redogör för testning i sektion 3.2 och framtagning av prisuppgift för driftsättning av systemet i sektion 3.3.
3.1 Utvecklingsprocess
Ett mål är att lösningsförslag ska ges snabbt, vilket innebär att från grunden skapa avancerade algoritmer som löser problemet blir för tidskrävande och medför en hög risk. Alternativet är att konstruera ett komplext system av komplexa pusselbitar, vilket sparar tid och medför lägre risk.
Vid definition och identifikation av problemet i sektion 3.1.1 valdes en kvalitativ metod med en induktiv ansats, eftersom kvalitativ forskning är lämpligt när ämnen behöver förstås [15]. Vid utveckling i de tre utvecklingsfaserna i sektion 3.1.3 valdes en mer deduktiv ansats med en kvantitativ metod där ändringar gjordes som sedan testades med stora datamängder för att observera resultat, detta eftersom kvanti- tativ forskning är lämpligt när mätbara resultat från experiment kan ges [15].
3.1.1 Definition och identifikation av problem
En förstudie skedde där problemet definierades och identifierades. Möten med An- ders Söderman från Claremont AB skedde, där Anders presenterade problemet som Claremont hade och vad som skulle behöva lösas. Problemet definierades som be- räkning av samåkning i stor skala för taxi till en och samma punkt från flera desti- nationer, eller från en och samma punkt till flera destinationer.
Problemet identifierades till en instans av COVRP (Capacitated Open Vehicle Routing Problem, sektion 2.1.1), där
1. den gemensamma plats som samåkning ska ske till eller från motsvarar en depå i VRP
2. varje passagerares behov av antal varor är ett (en passagerare vid varje plats)
KAPITEL 3. METOD & GENOMFÖRANDE
gemensam plats
1
1
1
1
1 1
1
1
1
Figur 3.1: COVRP för samåkning. Cirkel representerar en passagerare, siffran inuti behov.
3. varje taxi har kapaciteten fyra passagerare 4. kantvikten är restiden (inte kostnad).
Figur 3.1 illustrerar hur samåkningsproblemet ses som en COVRP-instans. Varje cirkel är en passagerares plats som ska besökas och i varje cirkel visas behovet. Då en taxi har plats för max fyra passagerare blir antalet passagerare för varje rutt 1-4. Notera även att det i figuren endast förekommer en kant till den gemensamma platsen för varje rutt i (C)OVRP. Detta kan jämföras med (C)VRP där en taxi behöver besöka den gemensamma platsen både före första passageraren och efter den sista i en rutt, vilket i en graf bildar två kanter till den gemensamma platsen i varje rutt istället för en.
När samåkningsproblemet ses som en komplett graf (kanter mellan alla noder) där den gemensamma platsen är en nod och varje passagerare en nod, beror antalet kanter i en komplett graf på antalet noder n: [35]
n 2
!
= n(n − 1) 2
Figur 3.2 illustrerar denna komplexitet för antalet kanter. Denna komplexitet in- nebär att antalet avstånd som behöver beräknas växer ungefär i O(n
2), vilket gör
10
3.1. UTVECKLINGSPROCESS
gemensam plats
a
b c
d
Figur 3.2: Komplexiteten för antalet kanter.
det möjligt att beräkna kantvikter inom rimlig tid, förutsatt att exempelvis inget externt API behöver anropas en gång för varje kant.
3.1.2 Litteraturstudie
Litteraturstudier genomfördes kontinuerligt under arbetets gång. När problemet identifierades bestod informationssökning av taxi-specifik litteratur vilket inte bi- drog till en gynnsam identifikation. Litteratur om ”one-to-many”, ”many-to-one”
och ”one-to-many-to-one” hittades sedan, problemklasser där exempelvis ett fordon ska från en punkt till flera olika [14]. Efter det inhämtades och studerades litteratur som berör VRP. Dokumentation till de verktyg som användes studerades före samt under utvecklingsfasen.
3.1.3 Planering av struktur, val av verktyg och utveckling av system I denna fas delades först systemarkitekturen in i delar och verktyg i form av ramverk valdes. Utvecklingen delades sedan in i tre utvecklingsfaser. Utveckling av använ- dargränssnittet skedde parallellt med alla tre utvecklingsfaser. Utvecklingsfaserna var följande:
1. Få alla delar att samverka. Målet var att fånga in användardata, skicka det till en serverdel som stoppar in användardatan i alla ramverk som används och sedan visar någonting på en karta för användaren. Syftet med denna del var att få en fungerande pipeline-arkitektur för hela systemarkitekturen som sedan kunde vidareutvecklas.
2. Anpassning till ändamål. Målet var att anpassa systemarkitekturen till det definierade problemet taxi-samåkning och returnera fungerande lösningar.
3. Prestandaoptimering av systemet. Identifikation av tidskrävande faser
under uträkningen och optimera dem genom att exempelvis konfigurera ram-
verk för prestanda.
KAPITEL 3. METOD & GENOMFÖRANDE
3.2 Testning
Under utvecklingen skedde testning kontinuerligt genom att adresser eller koordina- ter matades in i systemet för att observera utfall. Syftet med testdatan som presen- teras i sektion 3.2.1 var att med hjälp av testdatan som underlag kunna utvärdera systemarkitekturens prestanda och precision för lösningsförslag, där bland annat olika metaheuristiker i Optaplanner kunde jämföras med varandra med avseende på prestanda och precision.
3.2.1 Testdata
Vid testning av hela systemet förutom delen med adressöversättning användes fem olika probleminstanser i varierande storlek, där koordinater användes direkt och steget för adressöversättning utelämnades.
1. Tre destinationer med en sjö som separerar några koordinater. Förväntat ut- fall: minst två taxibilar ska användas, ingen rutt ska gå en onödig omväg runt hela sjön.
2. Tre destinationer, två norrut längs en motorväg och en söderut. Förväntat utfall: de två destinationerna norrut får samåka medan destinationen söderut får en egen taxi.
3. 13 destinationer i Stockholmsområdet, med ett specialfall där två destinatio- ner är fågelvägen väldigt nära varandra men separerade med ett vattendrag.
Förväntad utfall: destinationerna som separeras av ett vattendrag tilldelas olika taxibilar och de andra destinationerna får en fungerande lösning.
4. 261 byggnadsminnen i Stockholms län, gemensam plats Östermalmstorg. Syf- tet var att testa hastigheten för systemet, kontrollera ackumulerad restid, prisapproximation samt visuellt kontrollera föreslagen lösning. Datan hämta- des som en KML-fil från [20] och ett enklare program i Python skapades för att konvertera KML-filen till JSON-format för Javascript.
5. 189 kyrkliga kulturminnen i Stockholms län, gemensam plats Arlanda. Syftet och tillvägagångssättet var samma som med 4 och datan hämtades från [21].
3.2.2 Testsystem
För testning användes Ubuntu 16.04 körandes i en virtuell maskin (VirtualBox) på ett Windowssystem. Den virtuella maskinen hade tillgång till fyra processorkärnor med frekvensen 4,6GHz och 4GB RAM. Vid testning kördes applikationen direkt i utvecklingsverktyget JetBrains IntelliJ IDEA som använde sig utav Spring Boot.
12
3.3. FRAMTAGNING AV PRISUPPGIFT FÖR DRIFT
3.3 Framtagning av prisuppgift för drift
Två kostnadsdelar behövde undersökas, pris för serverdrift samt pris för geocoding.
För serverdrift identifierades krav och en exempelsida för molndrift hittades.
För geocoding identifierades krav för tjänsten och en jämförelse skedde sedan där APIer undersöktes och testades. För att förenkla testning förutsattes att ett API ger samma svar som respektive karttjänst, där sökning på kartan skedde utzoomat till Sverige (förhindra lyft för lokala resultat) och där ”, Sverige” las till i söksträngen för att begränsa resultat till Sverige. Undantaget för denna metodik var Mapbox där APIet användes direkt.
Prisuppgift för geocoding skedde genom att respektive dokumentation studera-
des och tolkades. I fallet med Googles API för geocoding kontaktades Google för
en prisuppgift samt deras klient-API testades genom att i hög frekvens använda
geocoding med hjälp av en hemsida [5] som skickade geocoding-förfrågor med hög
frekvens till Googles API.
Kapitel 4
Systemarkitektur
I detta kapitel presenteras systemarkitekturen. I sektion 4.1 presenteras en översikt för systemarkitekturen, i sektion 4.2 presenteras klientarkitekturen, i sektion 4.3 presenteras serverarkitekturen, i sektion 4.4 beskrivs hur systemarkitekturen pre- standaoptimerats, i sektion 4.5 presenteras slutgiltig tid för att hitta lösningar samt i sektion 4.6 har en prisuppgift för drift tagits fram.
4.1 Översikt
AngularJS Synligt för
användaren Spring
Indata Geocoding
Leaflet
REST OSRM Optaplanner
REST
Figur 4.1: Översikt för systemarkitekturen med använda ramverk.
Systemarkitekturen kan delas in i två samverkande delar, en klientdel och en
serverdel. Klientdelen består av geocoding och det grafiska gränssnitt användaren
ser, klientdelen körs i en vanlig webbläsare. Serverdelen tar emot en förfrågan från
klientdelen och tar fram ett förslag på samåkning som sedan returneras till använ-
daren. I figur 4.1 ses hur de olika använda ramverken samverkar med varandra,
KAPITEL 4. SYSTEMARKITEKTUR
1
{
2
commonLocation: {
3
id: 0,
4
address: "Arlanda",
5
latitude: 59.424617,
6
longitude: 17.935052
7
},
8
locations: [ // Lista där varje objekt
9
{ // är en passagerares plats.
10
id: 1, // Unikt ökande id-nummer.
11
address: "Kistagången 16, Kista",
12
latitude: 59.404343,
13
longitude: 17.949938
14
},
15
{
16
id: 2,
17
...
18
}
19
...
20
]
21