EXAMENSARBETE INOM DATALOGI OCH DATATEKNIK, AVANCERAD NIVÅ, 30 HP STOCKHOLM, SVERIGE 2017 Förutsäga data för lastbilstrafik med maskininlärning ERIC HÖRBERG KTH SKOLAN FÖR DATAVETENSKAP OCH KOMMUNIKATION
Förutsäga data för lastbilstrafik med maskininlärning Examensarbete ERIC HÖRBERG Examensarbete vid NADA - 6 December 2016 Handledare: Jeanette Hällgren Kotaleski Examinator: Erik Fransén
Referat Artificiella neuronnätverk används idag frekvent för att försöka se mönster i stora mängder data. Ser man mönster kan man till viss del se framtiden, och hur väl det fungerar på lastbilstrafik undersöks i den här rapporten. Historisk data om lastbilstrafik används med ett framåtkopplat artificiellt neuronnätverk för att skapa prognoser för lastbilars ankomster till en logistisk plats. Med ett program som skapats för att testa vilka paramterar som ger bäst resultat för det artificiella neuronnätverket så undersöks vilken datastruktur och vilken typ av prognos som ger det bästa resultatet. De två typer av prognoser som testas är tiden till nästa lastbils ankomst samt intensiteten av lastbilarnas ankomster nästa timme. De bästa prognoserna skapades när intensiteten av lastbilar för nästa timme förutspåddes, och prognoserna visade sig då vara bättre än de prognoser nuvarande statistiska metoder kan ge.
Abstract Predicting data for truck tra c with machine learning Artificial neural networks are used frequently today in order to find patterns in large amounts of data. If one can see the patterns one can to some extent see the future, and how well this works for truck tra c is researched in this report. Historical data about truck tra c is used with a feed-forward artificial neural network to create forecasts for arrivals of trucks to a logistic location. With a program that was created to test what data structure and what parameters give the best results for the artificial neural network it is researched what type of forecast gives the best result. The two forecasts that are tested are the time to the next trucks arrival and the intensity of truck arrivals the next hour. The best forecasts were created when the intensity of trucks for the next hour were predicted, and the forecasts were shown to be better than the forecasts present statistical methods can give.
Innehåll 1 Introduktion 1 1.1 Problembeskrivning........................... 1 1.2 Prediktioner med ANN.......................... 2 1.3 Rapportens mål.............................. 2 1.4 LUP Technologies AB.......................... 2 1.5 Rapportens struktur........................... 3 2 Bakgrund 5 2.1 Lastbilstrafik............................... 5 2.2 ANNs historia............................... 6 2.3 Framåtkopplade nätverk - en typ av ANN............... 7 3 Metod 11 3.1 ANNs struktur.............................. 11 3.2 Motivation för ANNs struktur...................... 13 3.3 Programmet runt ANN......................... 13 3.4 Datans initiala struktur......................... 14 3.5 Verifiering av metod........................... 15 3.6 Verifiering av resultat.......................... 20 3.6.1 Cross-validation......................... 20 3.6.2 Statistik.............................. 20 3.6.3 Genomsnitt............................ 20 3.7 Bearbetning av indata.......................... 20 3.7.1 Avstånd mellan lastbilsankomster................ 21 3.7.2 Antal lastbilsankomster per timme............... 23 4 Resultat 29 4.1 Parametrar för ANN........................... 32 4.2 Diskussion................................. 34 4.3 Avslutande ord.............................. 34 Litteraturförteckning 37
Kapitel 1 Introduktion Att gissa in i framtiden är sällan en enkel uppgift, men att lyckas innebär ofta stor potential. Denna rapport beskriver vad artificiella neuronnätverk (ANN) är, hur ANN är uppbyggda samt hur ANN klarar av att förutspå framtiden och ge prognoser för lastbilar. Människan kan också gissa in i framtiden, vi kan t.ex. gissa vem som kommer att vinna en fotbollsmatch och vad motståndaren har för hand i poker. Vissa är så pass bra på att gissa in i framtiden att de kan livnära sig på det. Med mer data kan människan göra bättre gissningar, och det är här ANN har ett övertag. Mängden data ANN kan ta hänsyn till är enormt mycket större än den mängd människan kan ta till sig. En människa kan känna till ungefär hur det brukar gå för ett fotbollslag och vad som oftast är statistiskt korrekt när man spelar poker, men ANN kan ha alla fotbollsmatcher som någonsin har spelats i sitt minne, och alla pokerhänder mellan alla spelare någonsin. Detta övertag är vad som gör att ANN ibland lyckas bättre än sin skapare med att gissa in i framtiden. 1.1 Problembeskrivning Svenska industrier som använder sig av lastbilstransporter har idag ett stort problem. De vet inte när lastbilarna kommer att anlända till deras plats, och de har ingen att fråga. Problemet kommer från att logistikkedjan är fragmenterad, och att information inte delas fritt mellan parterna. De flesta lastbilar är idag utrustade med GPS, men detta är inte information som finns tillgänglig för industrierna. Intensiteten av lastbilar kan variera kraftigt och plötsligt på ett industriområde. Då industrierna inte vet hur trafiken varierar måste de överdimensionera sin kapacitet för att kunna hantera dessa svägningar. Om industrin med större säkerhet kunde förutse när dessa pikar i lastbilsintensitet skulle inträ a skulle de kunna spara tid och pengar. 1
KAPITEL 1. INTRODUKTION 1.2 Prediktioner med ANN ANN har använts inom många olika områden för att ge prediktioner givet att man har historiska data. Det har använts både inom finans, medicin och väder. Ett mycket bra citat om varför ANN används i dessa typer av situationer återfinns i rapporten Forecasting with artificial neural networks: The state of the art : ANNs are data-driven self-adaptive methods in that there are few a priori assumptions about the models for problems under study. They learn from examples and capture subtle functional relationships among the data even if the underlying relationsships are unknown or hard to describe. This ANNs are well suited for problems whose solutions require knowledge that is di cult to specify but for which there are enough data or observations. [19] Denna beskrivning passar in på prediktioner av lastbilsdata. Mycket data finns tillgängligt, men det är inte tydligt vilka mönster som finns i datan. Vidare har rapporten Electric Load Forecasting Using An Artificial Neural Network angripit ett liknande problem med ANN, och använder även där historiska data som input till sytemet: As is the case with time series approach, the ANN traces previous load patterns and predicts(i.e. extrapolates) a load pattern using recent load data. [21] 1.3 Rapportens mål Denna rapport undersöker till vilken grad maskininlärning kan förutse lastbilstrafik till en logistisk plats, givet data om den platsens historiska lastbilstrafik. Vilken logistisk plats datan gäller tas inte upp i rapporten då det är konfidentiellt. Däremot så gäller datan endast ett flöde på denna logistiska plats, utlastningen. Den data som används är de tidpunkter då lastbilar åker in innanför grindarna på området. Rapportens mål är att besvara följande tre frågor: Man kan ge prognoser på lastbilstrafik både i tid till kommande lastbil samt intensitet under kommande tidsenhet. Vilken typ av prognos ger bäst resultat? ANN har flera parametrar som måste konfigureras. Vilka värden på parametrarna ger bäst resultat? Det går även att uppskatta lastbilstrafik med statistiska metoder. Är det bästa resultatet ANN kan producera bättre än de statistiska metodernas resultat? 1.4 LUP Technologies AB Exjobbet utfördes på företaget LUP Technologies AB och är en del av företagets produktutveckling. Företaget LUP Technologies AB jobbar med att göra transporter säkrare och e ektivare. Deras främsta produkt är LUPNUMBER, som är ett 2
1.5. RAPPORTENS STRUKTUR sätt för industrier att nå ut till lastbilschau örer med säkerhetsinformation och leveransinformation. Satsningen på ANN kommer från insikter som företagets nära kontakt med marknade har lett till. Dessa insikter innefattar kostnaderna som krävs för att slotbokning ska vara användbart, samt den allmänna uppfattningen om att det verkar finnas ett mönster i när lastbilar anländer till en logistisk plats. 1.5 Rapportens struktur Rapporten kommer först gå igenom bakgrunden till problemet tydligare och förklara de algoritmer som användes. Sen kommer rapporten förklara metoden som användes, hur dess resultat verifierades samt hur datan omstrukturerades för att uppnå resultaten. Slutligen kommer rapporten lista resultaten och diskutera dem. 3
Kapitel 2 Bakgrund 2.1 Lastbilstrafik Lastbilstrafik är en bransch som är lätt att glömma bort. När man tänker på stora företag i Sverige är ett namn som kommer upp IKEA. Om man jämför IKEAs årliga omsättning i Sverige så är det inte ens i närheten av hur mycket svensk åkerinäring omsätter. IKEA omsätter årligen över 20 miljarder i Sverige, men Sveriges åkerinäring omsätter över 150 miljarder årligen [1, 2]. Ett enkelt sätt att inse storleken på lastbilsindustrin är att se runt sig där man sitter. Allt man ser kring sig inomhus, inte bara alla saker utan alla väggar, det där innanför, alla kläder och all mat har åkt lastbil. Volymerna är enorma. Lastbilstrafiken har idag dock ett stort problem, och det är kommunikationen. Om en industri vill ha en lastbilsleverans så hör de av sig till en speditör såsom DHL, DSV, DB Schenker, etc. och beställer leveransen. Speditören ger sen arbetsuppgiften till ett åkeri, som i sin tur ger arbetsuppgiften till en lastbilschau ör. Denna kedja är för lång för att någon väsentlig information utöver lastnummer och adress ska nå från industri hela vägen till lastbilschau ören. Det stora problemet här är att det blir mycket svårt för industrin att förutse när leveransen kommer till deras plats. Den enda kontakten de har är speditören, som omöjligen kan ge relevanta uppskattningar på när en lastbil kommer. Därför är just nu många industrier intresserade av att implementera slotbokning på sitt industriområde. Slotbokning innebär att varje lastbil får en tid tilldelad (eller vald, beroende på implementation) som de förväntas komma vid. Vad som händer om lastbilen inte kommer vid denna tid varierar mellan ingenting, och att de inte får komma in. Om en industri visste när leveranser skulle komma till deras plats hade de haft möjlighet att bli mycket e ektivare, både vad gäller bemanning och planering. Besparingspotentialen går inte att förutsäga exakt, men då marknaden är så enorm bara i Sverige och då lösningen är applicerbar globalt så handlar det om mycket stora mängder pengar. Det finns dock flera problem med slotbokning, och det är mycket arbete för att få 5
KAPITEL 2. BAKGRUND det att fungera bra. Ett av problemen är att det är lastbilschau ören som själv vet bäst när hen kommer kunna anlända till industrin. I nuvarande implementationer av slotbokning så är det dock inte lastbilschau ören som säger när hen kommer att anlända. Beroende på implementation så är det antingen speditörerna eller åkerierna som säger en tid, eller industrin som kräver en tid som sen följs så gott den kan av speditörer, åkerier och lastbilschau örer. Om det inte är lastbilschau ören själv som säger när hen kommer att anlända så är risken stor att tiden inte kommer att stämma. Vidare, om det är lastbilschau ören som bokar tiden så är risken att lastbilschau ören gör det inte särskilt hög såvida inte lastbilschau ören tjänar något på att göra det. För att lastbilschau ören ska tjäna något på att boka en tid så måste det finnas en separat grind för bokade tider, annars hamnar lastbilschau ören i samma kö som de som inte bokade tid. Då finns ingen poäng med att boka en tid för lastbilschau ören. För de industrier som inte redan har möjlighet att ha flera infarter, en kö för bokade och en kö för obokade, så kan det vara enorma kostnader associerade med att bygga en ny infart. Men, det finns ett annat sätt att lösa problemet. Det man egentligen vill veta är som sagt när lastbilarna kommer. Slotbokning är bara en lösning på problemet, en annan är att använda sig av ANN. 2.2 ANNs historia ANN har funnits sedan 1950. Det är givetvis svårt att peka ut en vetenskaplig rapport som var den första på området, men det är också svårt att börja längre bak än Warren McCulloch och Walter Pitts rapport, som släpptes 1943. Rapporten föreslår en modell för hur neuroner skulle kunna fungera, och modellerar dem som elektroniska kretsar [3]. Nästa rapport som bör nämnas är den Donald Hebb skrev 1949, The Organization of Behavior. I denna rapport läggs en av grundstenarna för ANN. Rapporten föreslår att när två neuroner aktiveras samtidigt så stärks kopplingen emellan dem. Denna teori står kvar även idag som den populäraste teorin för hur det går till när människan (lite generaliserat) lär sig [4]. Under 50-talet blev datorer tilltäckligt kraftfulla för att simulera ANN. Tidigare misslyckade försök hade gjorts, men 1959 skapade Marcian Ho och Bernard Widrow MADALINE, och det var första gången som ANN applicerats på reella problem. Med hjälp av ANN kunde Marcian Ho och Bernard Widrow förutspå framtiden i form av att förutspå bit-trafik på en telefonlinje [5]. ANN fortsatte att utvecklas under 70- och 80-talet, men det är först de senaste åren som ANN verkligen blivit populärt. 2011 så visade Watsson, en artificiell intelligens av IBM som byggde på många algoritmer men bl.a. ANN, toppen av isberget av ANNs potential när den vann på Jeopardy [6]. Idag har ANN lyckats inom områden man tidigare trott varit utom dess räckhåll. Googles AlphaGo besegrade en professionell go-spelare på spelet go, vilket är 6
2.3. FRAMÅTKOPPLADE NÄTVERK - EN TYP AV ANN häpnandsväckande då spelet go är för komplext för att alla möjliga drag ska kunna genomsökas, på det sätt som schack kan genomsökas med dagens datorer. Spelet kräver ett kreativt tänkade för att spela på professionell nivå [7]. 2.3 Framåtkopplade nätverk - en typ av ANN Det finns olika typer av ANN. Den typ av ANN som användes för uppgiften är kallas för framåtkopplade nätverk. Framöver kommer ANN att åsyfta framåtkopplade artificiella neuronnätverk. ANN består av tre distinkta delar. Input, nätverk, output. Input är den data som används, output är de svar som förväntas och nätverket är där själva algoritmen arbetar. Signalen från input skickas in i nätverket, som sen producerar en ny modifierad signal som skickas till output. Att visa den absolut enklast möjliga formen av ANN är en bra startpunkt för att förstå dem. Följande exempel kommer simplifieras på många sätt, men kommer att ge en god grund för att beskriva ANN. Vi kommer använda oss av denna input och output, då det är ett mönster som är lätt att förstå: Output är det dubbla av input. Input Output 1 2 2 4 3 6 4 8 5 10 6 12.. 20 40 Tabell 1. Ett enkelt exempel på input och output till ANN Den enklaste formen av ANN har endast en neuron i sitt nätverk. Alla neuroner har en överföringsfunktion, f(x), och vi kommer använda oss av den enklaste typen av överföringsfunktion: f(x) =x. När signalen 1 tas emot av denna neuron kommer den att skickas igenom sin överföringsfunktion: f(1) = 1, och signalen 1 skickas då till output. Alla kopplingar mellan neuroner har en vikt som kan stärka eller försvaga signalen, precis som Hebb beskrev. Vikten emellan vår input och vår neuron betecknas som v. Signalen går alltså från input till vår neuron genom denna synaps med en vikt som signalen multipliceras med. Dessa tillsammans skapar neuronens fulla överföringsfunktion, f(x) =vx Synapser initeras oftast med en slumpmässig vikt. Vi säger att denna slumpmässiga vikt i vårt fall är v =3.71. Låt oss se vad output blir för första input-signalen: 7
KAPITEL 2. BAKGRUND f(1) = 3.71 ú 1=3.71 Vår simpla version av ANN ger svaret 3.71 på det första input-värdet. Detta värde jämförs nu med önskad output för det värdet, 2. Värdet som ANN producerade var för högt, och nätverket justerar sina vikter efter denna feedback. Vi säger att vår synaps har uppdaterat sin vikt och att det nya värdet på synapsens vikt är 1.73. Neuronen får nu sitt nästa värde, 2. Låt oss se vad det resulterar i för output. f(2) = 1.73 ú 2=3.46 Detta värde är för lågt, enligt tabellen ska värdet bli 4. Nätverket infomeras om detta varpå alla vikter uppdateras. På detta sätt kan neuronernas vikt konvergera mot det rätta värdet, vilket i vårt fall är 2. f(3) = 2 ú 3=6 Detta simplifierade som sagt många steg i hur ett neuronnätverk lär sig, men det skapar ett överskådligt exempel på strukturen i ANN. Nu finns ett utrymme för att förklara strukturen mer korrekt. Vi börjar med överföringsfunktionen. De två vanligaste överföringsfunktionerna är f(x) = 1 e x 1+e och f(x) =arctan(x). x Som figur 1 visar är funktionerna mycket lika varandra: Figur 1. Två vanliga överföringsfunktioner för ANN Dessa funktioners syfte är att omvandla värden till mer relativa värden. Efter överföringsfunktionen blir skillnaden mellan 0 och 1 mycket större än skillnaden mellan 20 och 21. Detta är önskvärt, då skillnaden mellan 0 och 1 i de flesta fall faktiskt är större än skillanden mellan 20 och 21 i maskininlärningsproblem: arctan(1) arctan(0) = fi 4 0.79 8
2.3. FRAMÅTKOPPLADE NÄTVERK - EN TYP AV ANN arctan(21) arctan(20) 0.0024 Det finns givetvis många andra överföringsfunktioner [9, 10]. ANN kan även ha flera input, t.ex. om neuronnätverket har två tal in och ett tal ut. Varje input har en egen synaps med en egen vikt. ANN kan också ha flera lager av neuroner, och varje lager av neuroner kan ha olika antal neuroner. I ANN med flera lager skickas input till ett lager av neuroner, som inte skickar sina svar direkt till output utan till ännu ett lager av neuroner. Neuroner i samma lager har inga synapser sinsemellan, men alla neuroner i ett lager har synapser till alla neuroner i nästa lager. I exemplet med neuronnätverket som slog en världsmästaren i spelet go användes många lager. Exakt hur många anges inte på deras hemsida, inget mer än ett rykte att det var 13 lager finns tillgängligt [8]. Dessa är alltså de variabler man kan ändra på i strukturen av ANN: Antal input, antal output, överföringsfunktionen, antal lager samt antal neuroner för varje lager. 9
Kapitel 3 Metod I detta avsnitt kommer strukturen för den version av ANN som användes för att undersöka frågan förklaras mer i detalj och matematiskt. Vidare kommer det förklaras hur inställningarna som producerade slutresultaten beräknades. Vilken input och output som användes kommer också att visas. Framöver kommer ANN att åsyfta det framåtkopplade artificiella neuronnätverk som användes för att undersöka frågan. ANNs struktur följer helt den som beskrivs i en laboration från kursen Artificiella neuronnät och andra lärande system som hålls vid KTH, instruktionerna finns tillgängliga på kth.se/social/files/54c27097f27654654e16f94d/delta.pdf (hämtat 6:e december 2016). Strukturen kommer oavsett att förklaras i denna rapport. 3.1 ANNs struktur Precis som i laborationen har ANN ett dolt lager av neuroner. Samma överföringsfunktion som i laborationen används också, f(x) = 1 e x 1+e. I laborationen är denna x skriven på en alternativ form: 1 e x 1+e x = 2 1+e x 1 Även en symmetriskt representation av datan har valts, såsom i laborationen. Med detta menas att signaler i ANN varierar mellan 1 och 1. Dettaheltenkelt för att det föll sig enklare rent programmeringsmässigt, det ger ingen skillnad på resultatet. Laborationen har också valt att låta bias-termen bli en del av inputmängden istället för att skötas separat. Detta implementerades också, även här för att det är enklare rent programmeringsmässigt. Laborationens struktur för framåt- och bakåt-pass följs även det. Framåtpasset, alltså när signalen tar sig igenom ANN, är precis som det beskrevs i tidigare exempel. Input skickas till det dolda lagret av neuroner och multipliceras med samtliga vikter i de synapser signalen passerar. Låt input i beskriva signalens styrka från 11
KAPITEL 3. METOD input-nod i, låt dold j beskriva den resulterande signalstyrkan in i dold neuron nr j, samt låt vikt j,i vara vikten för synapsen mellan input nod i och dold nod j: dold j = ÿ i vikt j,i,input i Detta sätt att multiplicera nummer är precis vad som händer vid matrismultiplikation. Låt matrisen V vara vikterna för de synapser som kopplar ihop input-lagret av neuroner och det dolda lagret av neuroner, och låt I beskriva input-vektorn. Då blir vektorn med signaler in till det dolda lagret av neuroner helt enkelt VI. För att beskriva signalen ut ur det dolda lagret behövs nu bara överföringsfunktionen. Överföringsfunktionen är sen tidigare benämnd som f(x). Låt D beskriva vektorn av signaler ut ur det dolda lagret, som då blir: D = f(vi) Exakt samma logik kan nu användas för att få signalvektorn från neuronnätverkets output, då samma metod används här. Låt O vara signalen ut ur outputneuronerna, och låt matrisen W vara vikterna för de synapser som kopplar ihop det dolda lagret av neuroner och output-neuronerna: O = f(wd) När alla signaler i nätverket hanterats av ANN så ska felet beräknas. Denna process omnämns i laborationen som bakåtpasset och kallas ofta backprop". Det ena steget är att ta output-vektorns värde minus vektorn med förväntade värden, eller svaren. Låt S beteckna vektorn med de förväntade output-värdena. Denna di erans blir då O S. För att få felet på signalen så multiplicerar vi detta med överföringsfunktionens derivata av indatan till output-lagret. Låt felet på signalen från output-noderna betäcknas med O ú, och låt beteckna elementvis multiplikation. O ú =(O S) f Õ (WD) Detta värde används sedan för att beräkna felet på signalen från de dolda noderna. Låt detta fel betecknas som D ú : D ú =(V T O ú ) f Õ (VI) Nu har vi felet både för utsignaler från de dolda neuronerna och från outputneuronerna, D ú och O ú respektive. Dessa används för att beräkna den viktuppdatering som ska genomföras på synapserna. Låt vara hur stor del av viktuppdateringen som ska genomföras, låt V beteckna den önskade viktuppdateringen för viktmatrisen V samt låt W beteckna den önskade viktuppdateringen för viktmatrisen W : V = D ú I T 12
3.2. MOTIVATION FÖR ANNS STRUKTUR W = O ú D T ANN har även en tröghet,, inprogrammerad. Dess e ekt är att viktjusteringen även beror på den förra viktjusteringen, vilket undviker plötsliga svängningar. Med denna tröghet har algoritmen en chans att undvika att fastna i lokala minimum. Låt V f samt W f vara vikternas föregående ändringar: V f = V f (1 )D ú I T W f = W f (1 )O ú D T V = V f W = W f Ovan har alltså beskrivits hur signalerna tar sig igenom neuronnätverket, hur felet beräknas samt hur detta fel används för att uppdatera vikterna med en tröghet för att undvika att fastna i lokala minimum. 3.2 Motivation för ANNs struktur Denna typ av maskininlärningsalgoritm, alltså ett framåtkopplat artificiellt neuronnätverk med back-propagation för viktjustering, har valts då det även i andra liknande fall använts för att ge prediktioner. Den tydligaste liknelsen är att förutspå aktiemarknaden. När prognoser för aktiemarknaden skapas används historisk data för aktiemarknaden, rapportens mål är skapa prognoser för lastbilstrafiken och använda historisk data för lastbilstrafiken. Det finns två anledningar till att ANN används för att förutspå aktiemarknaden. Det är dessa anledningar som är orsaken till att ANN använts för denna rapport. Först och främst så är ANN en underkategori av supervised learning. Både när aktiemarknaden och lastbilstrafiken ska förutspås så är målet att skapa en funktion mellan en input-mängd och en output-mängd. All datas innebörd är tydligt definierad, så supervised learning passar bättre än unsupervised learning. Vidare är back-propagation känt för att ge goda resultat, men ta lång tid att träna. När träningen väl är klar kan svar snabbt hämtas från neuronnätverket då alla vikter är beräknade. I båda fallen är det irrelevant att träningen tar lång tid, och då är den största av back-propagations svagheter borta. [12, 13, 14] 3.3 Programmet runt ANN Att testa vilka värden som ger bäst resultat för artificiella neuronnätverk är en stor del av arbetet. I början av projektet utfördes detta arbete manuellt, och bestod mest av ett gissningsarbete och försök att se trender. Det blev ganska snart uppenbart att den manuella delen både var ett stort tidsslöseri och en risk att missa viktiga datapunkter. 13
KAPITEL 3. METOD Därför skrevs ytterliggare ett program som kommunicerade med ANN. Programmet itererade igenom tidigare valda värden på samtliga parametrar och sparade hela tiden det bästa resultatet. Efter att ha itererat igenom samtliga parametrar returnerade programmet de bästa parametrarna. Programmet innebar en stor tidsbesparing och var slutligen det som gav en insikt om vilka parametrar som egentligen var de bästa, oberoende av mänskliga gissningar och slump. I den uppsättning som slutligen användes fanns sex parametrar att justera: 1. Antalet neuroner i det dolda lagret. 2. Antalet epoker, alltså hur många gånger ANN går igenom datan innan ANN stannar. 3. -värdet, grafens tröghet som beskrivet tidigare. 4. -värdet, hur stor del av den uträknade viktändringen som används. 5. En undre felgräns. Föregående epoks fel jämförs med nuvarande epoks fel och om förbättringen är mindre än den undre felgränsen 400 epoker i rad så stannar algoritmen. 6. Antalet repetitioner, hur många gånger algoritmen körs med varje uppsättning ovanstående värden. Denna variabel existerar då ANN initieras med slump, hur bra den slutliga gissningen blir varierar därför lite även om alla parametrar är desamma. 3.4 Datans initiala struktur Varifrån datan som används i rapportens experiment kommer är konfidentiellt, men inte hur datan ser ut. Den kan sammanfattningsvis beskrivas enligt tabell 2. Typ av transport Lastningen börjar Lastningen slutar Lastbil 2014-05-03 12:43:12 2014-05-03 13:12:31 Lastbil 2014-05-03 13:21:31 2014-05-03 13:41:41 Båt 2014-05-03 15:41:22 2014-05-03 19:01:27 Lastbil 2014-05-04 10:51:41 2014-05-04 11:28:51 Båt 2014-05-04 11:01:01 2014-05-04 11:31:13... Tabell 2. En generalisering av den initiala datastrukturen Denna data omstrukturerades för att vara bättre lämpad för rapportens experiment. Alla lastbilsrader sparades och slutlastning togs bort. Givet tabell 2 skulle detta resultera i tabell 3. Datan strukturerades om på detta sätt för att ta bort allt förutom det informationsbärande. Det enda informationsbärande är när lastbilar anländer. 14
3.5. VERIFIERING AV METOD Lastbilar anländer 2014-05-03 12:43:12 2014-05-03 13:21:31 2014-05-04 10:51:41. Tabell 3. Den informationsbärande delen av den intiala datan Under experimenten användes två datamängder. Den ena är en fabrikerad datamängd tillverkad av trigonometriska funktioner. Denna datamängd används för att verifiera metoden. Den andra datamängden bygger på den faktiska datan. Båda dessa datamängder är uppdelade i träningsdata och testdata. Detta för att resultaten sen ska kunna verifieras med cross-validation. 3.5 Verifiering av metod För att försäkra sig om att koden producerade de resultat som förväntades så genererades först trigonometrisk data som input. Trigonometriska data valdes av två anledningar: Dels för att lastbilstrafik iallafall på något sätt är periodisk, till den här platsen kom det t.ex. inga lastbilar på natten. Den andra anledningen är att den trigonometriska datan är mycket simpel, vilket gjorde att det var enkelt att få en överblick och en insyn i hur ANN betedde sig i den här nya miljön. Det var helt enkelt ett sätt att säkerställa kodens funktionalitet samt förfina den. Detta avsnitt förklarar dels arbetet som ledde fram till hur datan omstrukturerades för att kunna tolkas som input/output värden, och dels hur den trigonometriska datan användes för att verifiera metoden. Alla tidsserier kommer att representeras grafiskt. Både den faktiska tidsserien och ANNs gissning kommer att visas. Input-vektor Output-värde [t(x-20), t(x-19), t(x-18),..., t(x-1)] t(x) [t(x-19), t(x-18), t(x-17),..., t(x)] t(x+1) [t(x-18), t(x-17), t(x-16),..., t(x+1)] t(x+2) [t(x-17), t(x-16), t(x-15),..., t(x+2)] t(x+3) [t(x-16), t(x-15), t(x-14),..., t(x+3)] t(x+4).... Tabell 4. Hur grafisk data kan representeras som input och output Den första tanken var att ANN skulle få de senaste 20-30 lastbilarna och vilken tid de anlände till platsen, och från det gissa tiden på när nästa lastbil skulle an- 15
KAPITEL 3. METOD lända. Detta innebar att input och output skulle genereras enligt tabell 4, där t(x) är den trigonometriska funktion som användes. Denna metod att göra om en tidsserie/graf till input/output för ett artificiellt neuronnätverk har också använts för att förutse glukos-nivåer hos patienter [15] samt för att förutspå vädret givet data från solpaneler [16]. Resultatet blev till en början inte särskilt bra, och dessutom var processen långsam. Figur 2. Den första gissningen på en trigonometrisk funktion. Figur 2 visar bland de bättre fallen, men gemensamt var trenden för ANNs gissning att börja dra iväg uppåt under testdatan istället för att gissa korrekt. En tanke var att index, alltså x-värdet, hade kunnat hjälpa som input. Det visade sig att det inte tillförde någonting i detta fall. Vad som däremot gjorde stor skillnad var att skala om värdena. ANN hanterar signalvärden mellan -1 och 1, och 16
3.5. VERIFIERING AV METOD att skala upp värdena så att de rörde sig i hela detta spann och inte bara i en liten del gjorde enorm skillnad: Figur 3. Det förbättrade resultatet då värden skalats om till ett större spann. Innan texten fortsätter skall noteras att programmet för att rita upp graferna här förbättrats sen förra bilden. Nu visas också fel per x-värde nere till höger. Fel per x-värde innebär helt enkelt ANNs gissning för det x-värdet minus den faktiska tidsseriens värde vid det x-värdet. Nere till vänster är det genomsnittliga felet, på x- axeln visas epokerna och på y-axeln visas det genomsnittliga felet i ANNs gissning. I programmet så ritas detta upp i realtid, och felet i gissningen initieras med 1:or eller 0:or. Därav det plötsliga hoppet upp till 1 i denna graf, som orsakas av att bilden togs vid den 200:ade epoken och att alla värden i fel-vektorn efter det fortfarande har sina initierade värden, nämligen 1. Bilden togs här då antalet epoker som nu, efter att värdena skalats om, krävdes för att ANN skulle konvergera minskade så kraftigt att felet knappt ändrades alls i senare epoker. Ett problem som nu försökte åtgärdas var att topparna i ANNs gissning inte var så höga som de borde vara. Teorin var att inputvektorns längd, som vid det här laget var att bara se 8 datapunkter bakåt, inte innefattade tidigare toppar. Detta betydde att det inte fanns någon större skillnad på de olika topparna för ANN, och att ANN nu bara lärde sig att röra sig som en våg. Denna teori ledde till en lång rad av problem som alla i slutändan visade sig vara meningslösa att försöka lösa. Resultatet blev inte omedelbart bättre av att introducera en större inputvektor, en längre historia, och algoritmen blev mycket långsammare med ett större antal inputnoder. Med ett för lågt -värde så tog sig inte ANN hela vägen till lösningen, se figur 4, 17
KAPITEL 3. METOD Figur 4. Fler input-noder användes, här är -värdet för litet. Figur 5. Fler input-noder användes, här är -värdet för stort. och med ett för högt -värde så skakade grafen fram och tillbaka runt rätt svar, se figur 5. Programmet som letade variabler lyckades inte hitta ett mellanting. Ett försök gjordes att skapa ett dynamiskt -värde som anpassade sig beroende 18
3.5. VERIFIERING AV METOD Figur 6. Dynamiska -värden ledde till katastrofala resultat. Figur 7. Den ej intuitiva slutsatsen att färre input-noder gav ett bättre resultat visad som graf. på hur stort felet var. När felet var större skulle -värdet bli större, och när felet var mindre skulle -värdet bli mindre. Detta lyckades aldrig, -värdet stabiliserades inte och graferna blev minst sagt katastrofala, se figur 6. 19
KAPITEL 3. METOD Här avslutades den trigonometriska delen av experimenten med en oanad slutsats: Att ha ett mindre antal inputnoder, en kortare historia, visade sig inte bara fungera bäst utan också förvånansvärt bra. De slutliga parametrarna var 10 000 datapunkter, 5 000 för träning och 5 000 för test, 25 dolda neuroner, =0.9 och =0.001. Med dessa inställningar gick felet ner under 10% på bara 1000 epoker, presenterat grafisk i figur 7. 3.6 Verifiering av resultat Verifieringen av de resultat algoritmen producerar sker på fyra olika sätt. Alla syftar till att säkerställa att de resultat som algoritmen uppnår är av värde. 3.6.1 Cross-validation Den data som används är uppdelad i träningsdata och testdata. Träningsdatan är det som algoritmen använder för att hitta de bästa parametrarna och justera vikterna i ANN. Testdatan är det algoritmen använder för att få sina resultat, där parametrarna och vikterna appliceras. Alla resultat är hämtade från algoritmens prestationer på testdatan. 3.6.2 Statistik Alla resultat jämförs med det statistiska genomsnittet för samma prediktion. Detta för att ge en bild av hur bra uppskattningarna är, men också för att se om metoden är användbar. Om de statistiska gissningarna ger ett bättre resultat finns inget värde i metoden. 3.6.3 Genomsnitt Då vikterna i ANN initeras med slumpmässiga värden så behöver paramterarna inte vara de bästa trots att de efter en viss körning gav goda värden. Därför kallar den yttre algoritmen ANN flera gånger för varje uppsättning av värden och presenterar genomsnittet på felet från alla körningar som sitt resultat. 3.7 Bearbetning av indata Nu fanns en metod för att, givet en graf, förutspå hur den skulle röra sig. Nu var utmaningen att ändra om lastbilsdatan så att den kunde beskrivas som en graf. Den metodik som användes när glukosnivåer och vädret estimerades [15, 16] går inte att applicera rakt av, då dessa fall hade ett värde till varje tidpunkt. I detta fall är värdet på varje tidpunkt 1, 1 lastbil. Det intressanta för lastbilsdatan är intervallet emellan de olika tidstämplarna, intensiteten av lastbilar. Därför behövdes denna datamängd omstruktureras på något sätt för att ANN ska kunna analysera den. 20
3.7. BEARBETNING AV INDATA Först undersöktes resultaten då avståndet mellan lastbilsankomster fick representera datamängden, sen undersöktes när antal lastbilar per timme fick representera datamängden. 3.7.1 Avstånd mellan lastbilsankomster Den första teorin var att helt enkelt låta avstånden mellan lastbilarnas ankomster i sekunder bli datapunkterna. Detta gav en mycket oregelbunden graf då antalet sekunder mellan den sista lastbilen en dag och den första nästa dag, framförallt över helger, var mycket högt. Detta löstes genom att ta bort alla tidsavstånd som var längre än 8 timmar, vilket skulle motsvaras av att ANN vet öppettiderna på platsen. Resultaten blev inte särskilt bra, men en märklig upptäckt gjordes. Figur 8. Algoritmens första försök på lasbilsdatan. Algoritmen gav sitt bästa svar när antal dolda neuroner var det minsta antal som programmet som testade värden till ANN undersökte, 5 stycken. Detta antogs bara vara ett resultat av att datarepresentationen var dålig, och att uppenbara mönster därför uklassade mer komplicerade mönster i den tidsbegränsning som fanns. Från vad som fanns att läsa verkade det dock som att detta inte var något ovanligt, utan faktiskt vad man kunde förvänta sig. Antalet dolda neuroner är sällan högre än antalet input- och output-noder tillsammans [11]. Detta sågs först som ett tecken på att inputmängden måste vara för liten. Inputmängden ökades därför till 30, och efter en lång beräkning på flera timmar av programmet som testade värden så visade det sig att resultatet inte förbättrats alls. 21
KAPITEL 3. METOD Figur 9. Med bara en historisk punkt så gissar ANN på genomsnittet hela vägen, och får ett bättre resultat. Figur 10. Fem-minutersintervall på datan istället för sekund-intervall gjorde resultaten bättre men fortfarande alldeles för dåliga. Det ännu mer ointuitiva och illabådande som sen upptäcktes var att resultaten blev bättre om endast en input-nod användes. Det var lätt att se varför på grafen 22
3.7. BEARBETNING AV INDATA som genererades, se figur 9. ANN gissade nu helt enkelt på genomsnittet. Detta var det bästa ANN kunde producera. Faktum var att om ANN helt ignorerades och ett genomsnitt användes som gissning, så var det en bättre gissning. Här, när resultaten var som allra sämst och hoppet var som allra lägst, så började experiment göras som så småningom skulle leda i helt rätt riktning. Det första antagandet var att det måste vara alldeles för mycket brus och oregelbundenheter i datan. Det testades att istället beskriva avståndet mellan lastbilar i minuter, och sen i fem-minutersintervall, för att försöka ta bort lite brus. Med femminutersintervall så kom ANN ner på samma fel-nivå som genomsnittsgissningen gav på 0.0571, se figur 10. Detta var såklart fortfarande mycket dåligt. Vid det här laget så togs några steg tillbaka och tankarna fick gå helt utanför lådan. Problemet granskades inte längre som hur det skulle formuleras för att ANN skulle lösa problemet, utan hur det skulle formuleras för att en människa skulle kunna lösa problemet. 3.7.2 Antal lastbilsankomster per timme Detta nya perspektiv gav den första av två vinnande insikter. Istället för att ANN skulle gissa tid till nästa lastbil så skrevs datan om till att representera lastbilar per timme. Denna omstrukturering syftade till att minska bruset i datan samt göra datans mönster mer uppenbara. Efter omstruktureringen såg nu datan istället ut på följande sätt: Timme Antal lastbilar 0 20 1 14 2 12 3 17 4 24.... 213 13 214 10 215 7.... Tabell 5. Omstruktureringen av datan till lastbilar per timme istället för tidsintervall Denna nya representation gjorde en dramatisk skillnad och nu började si rorna att röra sig i rätt riktning då ANN konsekvent var mycket bättre än en genomsnittsgissning, med ett fel på 0.1481 mot genomsnittsgissningen 0.1634, se figur 11. Att genomsnittsgissningen nu fick ett annat värde var helt enkelt för att datan var strukturerad helt annorlunda. 23
KAPITEL 3. METOD Figur 11. Omstruktureringen av datan till lastbil per timme gjorde stor skillnad Figur 12. Med bara 180 träningspunkter gissade nu algoritmen ändå bra Nu när denna omstrukturering av datan genomförts och visat sig fungera bättre så testades att inte längre ta bort timmarna som motsvarade helger och kvällar. Detta visade sig ge ännu bättre resultat, och dessutom så kunde Ann lära sig med 24
3.7. BEARBETNING AV INDATA Figur 13. Resultaten blev långsamt bättre med den nya represetnationen av data extremt få punkter. I figur 12 så används bara 180 punkter för träning och de över 10 000 resterande punkterna gissades av ANN. Dag Timme Antal lastbilar 0 0 0 0 1 0 0 2 0... 3 23 0 4 0 0... 6 23 0 0 0 0... Tabell 6. Datan omstrukturerades till att bara innehålla timme och dag Med fler punkter i träningsmängden och när programmet som letar värden fick köra klart, så blev de bästa parametrarna: 20 dolda neuroner, ett -värde på 0.9, ett -värde på 0.001 och ett fel på 0.059205 mot genomsnittets 0.091454, se figur 13. Återigen så ändrades datan, så genomsnittsgissningen fick ännu ett nytt värde. För att försöka göra resultatet ännu bättre gjordes nu två experiment. Båda experimenten hade i åtanke att försöka göra problemet lättare att lösa för en män- 25
KAPITEL 3. METOD Figur 14. ANNs gissning givet endast dag och timme Figur 15. ANNs gissning inzoomad niska genom att förbättra representationen. Det första var att bara använda timme och dag som input. Resultatet blev mycket intressant. 26
3.7. BEARBETNING AV INDATA Figur 16. Helger representeras nu som -1, vardagar som 1, ANNs gissning är inzoomad ANN gör ett samband mellan dag, uttryckt som en si ra mellan 0 och 6, och timme mot antal lastbilar så gott det går. Det blir färre lastbilar ju senare i veckan det är, då dag 5 och 6 alltid innebär 0 lastbilar, därav den större perioden som syns i grafen. Det blir också fler lastbilar ju lägre timmen är, då det på denna plats kommer fler lastbilar på förmiddagen än på eftermiddagen. Detta skapar den mindre perioden vi ser, de två perioderna tillsammans är vad som skapar de upprepade nedåtpekande sågarna vi kan se i figur 15. Nu uppstod långsamt den andra insikten om hur datan egentligen skulle struktureras. ANN hade tidigare setts som en svart låda som skulle se något mönster som ingen annan såg. Fokus byttes nu till att det skulle göras lätt för ANN. Indatan skrevs om så att helger representerades av -1 och vardagar av 1. Detta gav resultatet vi kan se i figur 16. Nu ändrades också så att timmar inte längre representerades av timslag, utan bara angav om platsen var öppen eller stängd, med värden 1 och -1 respektive. När ANN nu också fick tillgång till historisk data så syns tydligt i figur 17 att ANN anpassar sig efter dagarna. Den andra insikten som nu uppenbarade sig klart och tydligt var vad den här typen av maskininlärning egentligen handlar om. Det är inte en fråga om att ANN ska hitta ett mönster som människan inte ser. Det handlar snarare om att göra mönstret så tydligt som möjligt, och sen låta ANN arbeta med sina fördelar, nämligen att ANN klarar av att ta in en mycket större mängd data och analysera den mycket snabbare än människor. Denna insikt var det som gjorde att det statistiska genomsnittet togs med som 27
KAPITEL 3. METOD Figur 17. Med historisk data och tydligare information om när platsen är öppen och stängd syns tydligt hur ANN förstår vad som är dagar och förstår när det borde komma många lastbilar. ANNs graf är även här inzoomad input, enligt tankegången att det skulle göras så lätt som möjligt för ANN. Det statistiska genomsnittet beräknades givet dag och timme. Det beskrev alltså Hur många lastbilar kommer i genomsnitt på tisdagar klockan 15:00?. När det statistiska genomsnittet var en del av representationen så lossnade allt. Det gav inte bara ANN en bra utgångspunkt för sina gissningar, det förklarade också när det var öppet respektive stängt eftersom det statistiska genomsnittet är -1 när det är stängt. Efter alla dessa experiment så fastställdes den slutliga metoden: Lastbilsfrekvens strukturerades per timme, och det statistiska genomsnitten skulle tas med som input. Nu var det bara en fråga om att se vilka värden på de olika parametrarna och vilken historia som skulle användas för att skapa det bästa resultatet, och därmed svara på den slutliga frågan: Kan ANN förutse lastbilstrafik bättre än det statiska genomsnittet? 28
Kapitel 4 Resultat Med datarepresentationen lastbilsfrekvens per timme appliceras nu vår metod för att se om den presterar bättre än de statistiska metoderna. Det första som testades var att, precis som i experimenteten på egengenererad data, inte ha någon historia alls utan bara det statistiska genomsnittet. Med historia så menas mängden historisk data i varje datapunkt i inputvektorn som ANN hanterar. Med datarepresentation lastbilsfrekvens per timme så är historian antal timmar av lastbilsfrekvens innan den timmen som ska gissas. Grafen i figur 18 blev ointressant, då det statistiska genomsnittet självklart redan var en bra gissning. Alla vikter i ANN sattes till 1 så att input var samma sak som output, nämligen det statistiska genomsnittet. Figur 18. Utan historia men med statistisk data som input så gissar ANN precis på vad input var 29
KAPITEL 4. RESULTAT Vad som sen visade sig stämma för de trigonometriska funktionerna, att längre historik inte nödväntigtvis var bra, visade sig vara nyckeln till de slutliga resultaten. Att ha med mer än en historisk punkt gjorde bara resultaten sämre, det bästa var att bara ha nuvarande timme som input, tillsammans med det statistiska genomsnittet. Input formulerades nu istället till att bli antal lastbilar som kom vid timme t 1 samt antal lastbilar som i genomsnitt kommer vid den timme som ska gissas, t. Här inträ ade något märkligt. Av ett misstag så användes istället genomsnittligt antal lastbilar förra timmen, t 1, som input. När detta korrigerades så visade det sig att resultatet helt oförklarligt blev sämre. Förvånansvärt nog så var den bästa inputen att ha både antal lastbilar och statistisk genomsnitt vid tidpunkt t 1. Slutlig input och output såg alltså ut på följande sätt, där s(t) beskriver det statistiskt genomsnittliga antalet lastbilar vid tidpunkt t och där l(t) beskriver antal lastbilar som anlände vid tidpunkt t: Input1 Input2 Output s(t 1) l(t 1) l(t) Tabell 7. Den slutliga input och output som användes Ett sista problem var att ANN aldrig gissade på 0 lastbilar under helgerna, utan strax över, vilket syns i figur 19. Detta åtgärdades genom att bara dela all input och output på 2 så att värdena inte var lika extrema, vilket löste problemet, se figur 20. Figur 19. Det syns att ANNs graf inte kommer ner helt till -1 och därför får onödiga fel på helger och kvällar. 30
Figur 20. Efter att ha skalat om datan så tar sig ANNs graf ner hela vägen till -0.5. Detta syns som tydligast i grafen fel/värde, då den har som ett streck i sig som går längs med 0, vilket visar alla de kvällar och helger där ANN gissar rätt. 31
KAPITEL 4. RESULTAT 4.1 Parametrar för ANN Figur 21. Den slutliga jämförelsen mellan de två graferna. Antal dolda neuroner Alpha-värde Eta-värde Fel Statistisk fel 4 0.7 0.001 0.0460 0.0534 Tabell 8. De slutliga värdena som användes Antal dolda neuroner Antal epoker Alpha-värde [1, 2, 3, 4, 5, 7, 9, 12, 15] 5000 [0.5, 0.6, 0.7, 0.8, 0.9] Eta-värde Undre felgräns Repetitioner [10 6, 10 5, 10 4, 10 3, 10 2 ] 5ú 10 6 5 Tabell 9. Data för algoritmen som letade rätt på de bästa värdena De frågor som rapporten från början ställde var vilken typ av prognos som gav bäst resultat, vilka paramterar på ANN som var bäst för denna typ av prognos samt om resultatet blev bättre än en statistisk gissning. Den prognos som gav bäst resultat var när lastbilstrafiken uttycktes som en intensitet. Som vi ser i tabell 8 är felet 0.0460 som algoritmen producerar c:a 14% mer korrekt än den statistiska gissningen som ger ett fel på 0.05344. Som figur 21 visa så anpassar gissningen sig efter perioder av mer eller mindre trafik och även rent visuellt liknar gissningen den faktiska datan. Tabell 8 visar också de inställningar som ANN hade när dessa resultat producerades Tabell 9 visar inställningarna på det yttre programmet som beräknade detta fel. Algoritmen ger sina resultat från endast testdatan, inte från träningsdatan. Resultaten är genomsnittet efter antalet repetitioner som är angivet i tabell 9. Många andra försök att låta ANN förutspå framtiden givet historisk data har utförts. Resultaten i denna rapport är i linje med övrig forskning där ANN använts 32
4.1. PARAMETRAR FÖR ANN för att ge prediktioner: I alla referenser som använts i denna rapport har ANN gett goda resultat. Och inte bara referenserna, utan även referensernas referenser uppger att resultaten är goda, som i denna rapport från Zhang et al (1997): Lacher et al., Sharda and Wilson, Tam and Kiang, and Wilson and Sharda report that neural networks produce significantly better prediction accuracy than classical statistical techniques..[20] 33
KAPITEL 4. RESULTAT 4.2 Diskussion Arbetet har visat att det är möjligt att förutse när lastbilar anländer till en logistisk plats med maskininlärning. Arbetet ledde även till tre insikter. 1. Ett stort antal dolda neuroner är inget att eftersträva. 2. Att göra problemet lättare att lösa för en människa gör det också ofta lättare för ett artificiellt neuronnätverk. 3. Artificiella neuronnätverk har inte någon faktisk intelligens. De tar in mycket stora mängder data och det är därifrån deras precision kommer. Att göra representationen av datan tillräckligt bra för att artificiella neuronnätverk ska ge goda prediktioner är ett manuellt arbete. Vad som däremot var ointuitivt var vad som faktiskt visade sig vara rätt input och output. Om jag personligen skulle gissa hur många lastbilar som kommer nästa timme så verkar det logiskt att jag vill veta hur många som brukar komma i genomsnitt den timmen. Att det sen gav sämre resultat är märkligt. Det jag tror är sambandet som ANN hittar är hur mycket som antalet lastbilar avviker från det statistiska genomsnittet i föregående timme, och utifrån det kan gissa hur många som kommer nästa timme. Exakt vilket mönster ANN använder sig av vet jag inte, men att ANN faktiskt lyckas gissa bättre än det statistiska genomsnittet finner jag häpnandsväckande. Givet vad som sagts i introduktionen har dessa resultat stora implikationer. Det är sannolikt så att maskininlärningsmetoder helt kan ersätta slotbokning, och den mängd tid och pengar som ANN kan spara lastbilslogistik är enorm. Framåt återstår nu att se hur väl ANN presterar på lastbilsdata från andra platser, och vilken input som ger bäst resultat där. Det finns också möjligheter att förbättra resultaten genom att lägga ett lager av logik ovanpå ANN. Då kan algoritmen på ett tydligare sätt ta hänsyn till t.ex. antalet lastbilar som är bokade per dag och platsens arbetstider. 4.3 Avslutande ord Jag hoppas att denna rapport varit intressant att läsa. Språket skiljer sig mycket från hur vetenskapliga rapporter vanligtvis skrivs, och det är ett medvetet val. De flesta av mina vänner är inte forskare, men bland nästan alla mina vänner så är vi överens om att de flesta vetenskapliga rapporter är svåra att ta sig igenom om man inte sen innan är intresserad av ämnet. Mitt mål med den här rapporten är att den ska vara inspirerande, att den ska lyfta fram hur den forskande processen kan vara mycket spännande och kreativ. Denna bild tycker jag personligen ofta försvinner när andra forskningsarbeten väl skrivs ner i rapporter. Detta även fast jag vet att nästan alla forskare brinner för sitt ämne och har många intensiva och fantastiska ögonblick när deras forskning 34