Het Extended Vehicle Routing Probleem met...

120
Matthias Maes rusttijdreglementering tijdstipafhankelijke reistijden onderworpen aan rij- en Het Extended Vehicle Routing Probleem met Academiejaar 2009-2010 Faculteit Ingenieurswetenschappen Voorzitter: prof. dr. ir. Hendrik Van Landeghem Vakgroep Technische bedrijfsvoering operationeel onderzoek Master in de ingenieurswetenschappen: bedrijfskundige systeemtechnieken en Masterproef ingediend tot het behalen van de academische graad van Begeleiders: Carles Sitompul, Yqing Zhong Promotor: prof. dr. El-Houssaine Aghezzaf

Transcript of Het Extended Vehicle Routing Probleem met...

Matthias Maes

rusttijdreglementeringtijdstipafhankelijke reistijden onderworpen aan rij- enHet Extended Vehicle Routing Probleem met

Academiejaar 2009-2010Faculteit IngenieurswetenschappenVoorzitter: prof. dr. ir. Hendrik Van LandeghemVakgroep Technische bedrijfsvoering

operationeel onderzoekMaster in de ingenieurswetenschappen: bedrijfskundige systeemtechnieken en

Masterproef ingediend tot het behalen van de academische graad van

Begeleiders: Carles Sitompul, Yqing ZhongPromotor: prof. dr. El-Houssaine Aghezzaf

Matthias Maes

rusttijdreglementeringtijdstipafhankelijke reistijden onderworpen aan rij- enHet Extended Vehicle Routing Probleem met

Academiejaar 2009-2010Faculteit IngenieurswetenschappenVoorzitter: prof. dr. ir. Hendrik Van LandeghemVakgroep Technische bedrijfsvoering

operationeel onderzoekMaster in de ingenieurswetenschappen: bedrijfskundige systeemtechnieken en

Masterproef ingediend tot het behalen van de academische graad van

Begeleiders: Carles Sitompul, Yqing ZhongPromotor: prof. dr. El-Houssaine Aghezzaf

Woord vooraf

Na maanden werken en schrijven mag ik met veel plezier zeggen dat mijn masterproef voltooid

is. Het was een leerrijk proces waarbij gaandeweg mijn interesse voor dit probleem groeide.

Hierdoor ging ik mij ook informeren in andere zoekpistes. Dit resulteerde in een wijziging

van het thesisonderwerp. Het Inventory Routing Problem werd in overeenstemming met mijn

promotor aangepast naar een Vehicle Routing Problem waarbij speciale aandacht uitging naar

de wetgeving voor rij- en rusttijden.

Voor het programmeren van deze masterproef wordt vooral gebruik gemaakt van Matlab. Het

Iteratieve Multi Tour Opbouw- en Veteringsalgoritme, dat de basis vormt van deze thesis,

wordt volledig geprogrammeerd in Matlab. Een kleine zijstap wordt gemaakt wanneer door

middel van de Genetic and Evolutionary Algorithm Toolbox in Matlab het concept van Ge-

netische Algoritmes wordt aangehaald. Deze toolbox is de ideale partner voor het oplossen

van dit niet-lineair probleem. De handleidingen geschreven door Hartmut Pohlheim over deze

Toolbox voor Matlab waren een handige leidraad.

Een thesis schrijven kan je uiteraard niet alleen. Daarom wil ik iedereen bedanken die heeft

bijgedragen aan het tot stand brengen van dit eindwerk. Zonder hen was dit resultaat niet

behaald geweest. In het bijzonder gaat mijn dank uit naar mijn promotor professor El-

Houssaine Aghezzaf die mij via kritische opmerkingen en nuttige tips goed geholpen heeft.

Samen hebben we het pad uitgestippeld richting dit resultaat.

De mensen van Digitach die mij meer uitleg gaven in verband met de wetgeving rond rij- en

rusttijden zijn ook van harte bedankt.

De Logistieke dienst van Colruyt verdient ook een vermelding net als de mensen van de

Federale Overheidsdienst Mobiliteit en Vervoer die mij de nodige info bezorgden.

Daarnaast bedank ik ook mijn vrienden die mij tijdens mijn 5 jaren aan de Universiteit Gent

hebben bijgestaan om de niet-werkende tijd zo aangenaam mogelijk in te vullen. ZIj deden

mij er aan denken dat er meer in het leven is dan studeren.

Eveneens dank aan de mensen die fouten rapporteerden en/of verbeteringen suggereerden:

Ann De Vijlder, Paul Maes.

v

vi

Speciale dank ook aan mijn schoonbroer Elie Deckers. Hij was het die op een familiefeest

vroeg of ik rekening gehouden had met de rij-en rusttijdreglementering. Deze vraag leidde

uiteindelijk tot een herorientering van mijn thesisonderwerp.

Tot slot zou ik ook graag mijn ouders bedanken. Ik draag deze thesis dan ook aan hen op,

voor hun constante steun in alles wat ik verkies te doen.

Matthias Maes

21 augustus 2010

vii

Het Extended Vehicle Routing Probleem

met tijdstipafhankelijke reistijden

onderworpen aan rij- en

rusttijdreglementeringdoor

Matthias Maes

Masterproef ingediend tot het behalen van de academische graad vanMaster in de ingenieurswetenschappen:

bedrijfskundige systeemtechnieken en operationeel onderzoek

Academiejaar 2009–2010

Promotor: prof. dr. El-Houssaine AghezzafBegeleider: Carles Sitompul, Yqing Zhong

Faculteit IngenieurswetenschappenUniversiteit Gent

Vakgroep Technische bedrijfsvoeringVoorzitter: prof. dr. ir. Hendrik Van Landeghem

Samenvatting

Deze masterproef ontwerpt in eerste instantie een basismodel voor het Capacitated VehicleRouting Probleem with Hard Time Windows. De routering wordt gekenmerkt door MultiTours. Dit betekent dat een voertuig opnieuw kan binnenkomen in het depot voor herbe-voorrading. Het basismodel wordt, nadat het zijn degelijkheid heeft bewezen, uitgebreid metde rij- en rusttijdreglementering die uitgaat van de Europese Unie. Hierdoor ontstaan MultiTours waarbij rekening gehouden wordt met de verplichte rustpauzes om te vermijden dat ermeer dan 4 uur en 30 minuten aan een stuk gereden wordt.

Trefwoorden

Vehicle Routing Problem;Rij-en rusttijdreglementering;Multi Tour;Tijdstipafhankelijke reistijden;

The Extended Vehicle Routing Problem withtime-dependent travel times subject to EU

legislation on drivers’ working hoursMatthias Maes

Supervisor(s): El-Houssaine Aghezzaf

Abstract— Legislation on drivers’ working hours is an important mat-ter in distribution and logistics. This paper tries to design a model for theEuropean context. In a first step, this survey designs a model to tackle theCapacitated Vehicle Routing Problem with hard time windows. The cus-tomers in this model are replenished by Multi Tours, a specific kind of toursin which vehicles can replenish their cargo in the depot. After this modelhas proven its value, the drivers’ working hours legislation imposed by theEuropean Union is introduced into this model. Solutions are designed in away that drivers take a break to avoid uninterrupted driving times of morethan 4h30’.

Keywords— Vehicle Routing Problem, Multi Tour, Time-DependentTravel Times, Driving and rest time regulations

I. INTRODUCTION

On April 11, 2007 the new regulations within the EuropeanUnion on drivers’ working hours entered into force. These reg-ulations govern the working hours of truck and passenger carry-ing vehicle drivers. These regulations are created in order to im-prove road safety, to improve the working conditions of driversand to promote fair competition between companies. These reg-ulations are taken into account in the following Vehicle RoutingProblem.

II. BASIC VRPHTW MODEL

A. Multi Tours and Time-dependent travel times

The delivery locations of the n customers in this VRP withhard time windows have time windows within which the deliv-eries must be made. The objective function is the minimalisationof the route duration, route distance and vehicle rent costs. Thefollowing characteristics define the problem:

aj arrival time at customer jej opening time of time window at customer jgj duration of service at customer jlj closing time of time window at customer jqj demand of customer jtij time-dependent travel time between customers i and jyj beginning of service a customer j

The difference (yj − aj) is known as the waiting time at acustomer location until the opening of the time window. Soyj = max(ej , aj), with aj = yi + gi + tij .

A first step is to introduce Multi Tours in the mathematicalmodel. A Multi Tour is driven by one vehicle that has the abilityto replenish when it’s running out of cargo. In this way, a MultiTour consists out of several subroutes during one Time Horizon.

Time-dependent travel time are captured into this model, usingan adaption on the FIFO-based algorithm from Ichoua et al [3].This algorithm calculates travel times from any two given cus-tomers i and j by using an iterative forward calculation from thearrival time at customer i. To design the necessary speed func-tion, travelling speed data is obtained from the START/SITTERSystem, offered by the Belgian Ministery of Traffic and Infras-tructure [4]. This service makes traffic data accesible of all theBelgian highways since 1999.

B. Iterative Multi Tour Construction & Improvement Algorithm

The Iterative Multi Tour Construction and Improvement Al-gorithm is an adaptation on an algorithm designed by M.Figliozzi to construct and improve routes [2]. The core of hisIRCI algorithm is a construction algorithm were routes are se-quentially built and improved. The solution method is dividedinto two phases: route construction and route improvement. Un-like local search heuristics, where customers or groups of cus-tomers are exchanged and inserted, the IRCI improves the so-lution of VRP problems creating and improving groups or setsof routes. These sets are selected using specific criteria as routeduration, geographical proximity, route distance or number ofcustomers in a route.

The alterations made on Figliozzi’s algorithm are the introduc-tion of Multi Tours in both phases and a different improvementmethod. Where Figliozzi improves a limited set of routes, theMulti Tour Improvement algorithm in this paper starts with allthe Multi Tours and excludes every iteration one Multi Tourmore from the improvement phase. The exclusion is based onperformance criteria as mentioned above.

III. DRIVERS’ WORKING HOURS MODEL

A. Regulations

The EU rules apply to drivers of most vehicles used for thecarriage of goods where the maximum permissible weight of thevehicle exceeds 3.5 tonnes and where the vehicle is used withinEU and EEA countries and Switzerland.

Driving time is the duration of driving activity or cargo handlingrecorded by a tachograph. After a driving period of no more than4.5 hours, a driver must immediately take a uninterrupted breakof at least 45 minutes or end his shift. Alternatively, a full 45-minute break can be replaced by one break of at least 15 minutesfollowed by another break of at least 30 minutes. These breaksmust be distributed over the 4.5-hour period. Breaks of less than

15 minutes will not contribute towards a qualifying break, butneither will they be counted as duty or driving time.

A driver makes a ‘reset’ if he takes a 45-minute break (or quali-fying breaks totalling 45 minutes) before or at the end of a 4.5-hour (270’) driving period. This means that the next 4.5-hourperiod begins with the completion of that qualifying break, andin assessing break requirements for the new 4.5-hour period, noreference is to be made to driving time accumulated before thispoint [1]. Some correct driving time shedules are given in figure1. A thick line stands for a reset.

Fig. 1. Correct examples of drivers’ working hours.

B. Model

The Time Horizon is set from 7h00 until 16h45, which makesa maximum of 9 hours driving time possible.

The Cumulated Driving Time (CDT ) on a moment in time tsums up the driving times (gi + tij) between the time of the lastreset and this moment t. The value CDT makes it possible tomonitor the total driving time so that crossing the 270’ limit canbe avoided. A new reset sets the CDT value back on 0.

The Cumulated Break Time (CBT ) on a moment t gives the to-tal break time taken since the last reset. This value is calculatedto make a split break time possible.

There are two kind of breaks. A first one is the Waiting Break(WB), which is a waiting time (yi − ai) satisfying the con-straints mentioned above. A second type is an ObligatoryBreaks (OB), which has to be taken to avoid driving time vi-olation.

The diagram in figure 2 shows a mechanism calculating the ar-rival time aj , the service start time yj and the values CDTj andCBTj using CDTi and CBTi as input. These values are usedin the Iterative Multi Tour Construction and Improvement algo-rithm to obtain Multi Tours which satisfy drivers’ working hourslegislation. The following conditions are checked in a top-downapproach:

1. Driving time violation during a travel time tij? If this is thecase, an Obligatory Break is needed to obtain a reset.

2. A Waiting Break provoking a reset?

3. Driving time violation during the service time gj . Becauseit’s unprofessional to interrupt a service time, an ObligatoryBreak after the travel time tij makes sure that no service timeinterruption is needed.

4. A Waiting Break which alters the CBT -value.

Fig. 2. Flow model describing the drivers’ working hours regulation.

IV. CONCLUSIONS

Computational results indicate that the algorithms solve theVRPHTW in a correct way while taking into acount the prin-ciples of time-dependent travel times and Multi Tours. The ex-tension with the driver’s working legislation leads to satisfyingresults.

ACKNOWLEDGMENTS

The author would like to acknowledge M. Figliozzi for theinspiration derived from his paper [2].

REFERENCES

[1] COI. Rules on Drivers’ Hours and Tachographs. Vehiclee and OperatorServices Agency, 2007.

[2] M.A. Figliozzi. An iterative route construction and improvement algorithmfor the vehicle routing problem with soft time windows. Transport. Res.,Part C, 2009.

[3] S. Ichoua, M. Gendreau, and J.Y. Potvin. Vehicle dispatching withtime-dependent travel times. European Journal of Operational Research,144(2):379–396, 2003.

[4] Federale Overheidsdienst Mobiliteit-Vervoer. Samenwerkingsakkoord Fed-erale Overheid - Gewesten - START/SITTER. http://www.start-sitter.be(laatst bekeken op 18 juni 2010), 2010.

Inhoudsopgave

Gebruikte afkortingen en symbolen xiii

1 Probleem beschrijving 11.1 Het Vehicle Routing Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Extended Vehicle Routing Probleem met tijdstipafhankelijke reistijden onder-

worpen aan rij-en rusttijdreglementering . . . . . . . . . . . . . . . . . . . . . 31.3 Analyse van de complexiteit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Oplossingsstrategie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Probleem formulering 62.1 Flow-arc formulering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2 Algoritme TTT(tstart,d,T I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Variabelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.4 Uitgewerkt voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5 Hulpwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.6 Model voor een Time Windows VRP . . . . . . . . . . . . . . . . . . . . . . . 18

2.6.1 Doelfunctie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.6.2 Restricties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3 Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 233.1 Het Ondersteunend Multi Tour Opbouwalgoritme Hr . . . . . . . . . . . . . . 24

3.1.1 Klant vj opnemen in de routering . . . . . . . . . . . . . . . . . . . . . 243.1.2 Routering vervolledigen met Nearest Neighbor algoritme . . . . . . . . 263.1.3 Algoritme Hr(Routering, vi, vj , Qi, C,∆) . . . . . . . . . . . . . . . . . 27

3.2 Het Multi Tour Opbouwalgoritme Hc . . . . . . . . . . . . . . . . . . . . . . . 293.2.1 De Klantordenfunctie w(vi, C,W ) . . . . . . . . . . . . . . . . . . . . 293.2.2 Routering met behulp van Hr . . . . . . . . . . . . . . . . . . . . . . . 293.2.3 Algoritme Hc(Wi, Routeringi, vi, Qi, Ci) . . . . . . . . . . . . . . . . . 30

3.3 Het Multi Tour Verbeteringsalgoritme Hv . . . . . . . . . . . . . . . . . . . . 323.3.1 De Multi Tour Ordenfunctie k(Routering −R) . . . . . . . . . . . . . 333.3.2 Algoritme Hv(Routering,W ) . . . . . . . . . . . . . . . . . . . . . . . 34

3.4 Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.4.1 Gegevens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.4.2 Oplossingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

x

Inhoudsopgave xi

4 Model onderworpen aan rij- en rusttijdreglementering 444.1 Rij-en rusttijden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

4.1.1 Doel van de rij- en rusttijden . . . . . . . . . . . . . . . . . . . . . . . 444.1.2 Rij- en rusttijdreglementering . . . . . . . . . . . . . . . . . . . . . . . 444.1.3 Tachograaf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.2 Aanpassen yj en aj aan de rij- en rusttijden . . . . . . . . . . . . . . . . . . . 484.2.1 Benamingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.2.2 Werking van het Tijd-algoritme . . . . . . . . . . . . . . . . . . . . . 51

4.3 Voorbeeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.4 Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5 Genetisch algoritme 625.1 Werking Genetisch Algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . 625.2 Opstellen Genetisch Algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.2.1 Variabelen en VLUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.2.2 Doelfunctie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.2.3 Selectie, Recombinatie en Mutatie . . . . . . . . . . . . . . . . . . . . 67

5.3 Toepassing Genetisch Algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . 69

6 Besluit 726.1 Conclusies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.2 Perspectieven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

A Algoritme W (X,n) 75

B Hr(Route, vi, vj, Qi, C, ∆) 77B.1 Hr.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77B.2 TTT.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81B.3 TTTomg.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81B.4 degegevens.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82B.5 Dcal.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

C Hc(W1, Route, vi, Qi, Ci) 84C.1 Hc.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84C.2 w.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85C.3 AddCustom.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87C.4 Kost.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89C.5 tot afstand.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

D Hv(Route, vi, vj, Qi, C, ∆) 91D.1 Hv.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91D.2 k.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92D.3 k.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Inhoudsopgave xii

E T ijd(GRTi, GRTj) 96E.1 Tijd.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96E.2 TTTvoor.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98E.3 Hr1.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Bibliografie 104

Gebruikte afkortingen en symbolen

BPP Bin Packing Problem

cd Kostprijs per eenheid afgelegde weg

ct Kostprijs per minuut dat route duurt

cv Kostprijs per voertuig per dag

CVRP Capacitated Vehicle Routing Problem

dij Afstand tussen twee knooppunten i en j

ei Starttijdstip Service Time Window

g(∆, i, j) Gegeneraliseerde kostenfunctie

GA Genetisch Algoritme

GEATbx Genetic and Evolutionary Algorithm Toolbox

gi Totale servicetijd

GNNH Generalized Nearest Neighbor Heuristic

GOT Gecumuleerde Onderbrekingstijd

gqi Hoeveeldheidsafhankelijke servicetijd

GRT Gecumuleerde Rijtijd

gstop Standaard servicetijd

IMTOV Iteratieve Multi Tour Opbouw- en Verbetering

IRP Inventory Routing Problem

li Sluitingstijdstip Service Time Window

MDVRP Multi Depot Vehicle Routing Problem

NP Nondeterministic Polynomial time

PVRP Periodic Vehicle Routing Problem

qi Hoeveelheid vraag voor de klant

qmax Laadcapaciteit voertuig

xiii

Hoofdstuk 0. Gebruikte afkortingen en symbolen xiv

SDVRP Split Delivery Vehicle Routing Problem

tij Reistijd ≥ 0

TSP Traveling Salesman Problem

v0 Depot knooppunt waaruit alle subroutes vertrekken

vn+1 Depot knooppunt om te herbevoorraden of een subroute te stoppen

VO Verplichte Onderbreking

VRP Vehicle Routing Problem

VRPPD Vehicle Routing Problem with Pick-up and Delivery

VRPTW Vehicle Routing Problem with Time Windows

WO Wachtonderbreking

Y0 Startuur van de werkdag

YTH Einduur van de werkdag

Hoofdstuk 1

Probleem beschrijving

1.1 Het Vehicle Routing Problem

Basis van deze thesis is het Vehicle Routing Problem (VRP). Geformuleerd in 1959 door G.B. Dantzig and R.H. Ramser (3) vormt het VRP heden ten dagen nog steeds een boeiendonderwerp voor onderzoek binnen de logistiek. Het betreft een combinatorisch optimalisatie-probleem waarbij een aantal geografisch verspreide klanten van voorraad voorzien dienen teworden.

Het VRP is een zeer belangrijk probleem in de transport- en distributiewereld. In sommigemarktsectoren levert transport een groot aandeel in de toegevoegde waarde van de goederen.Daarom is het doel van het VRP de routes zodanig op te stellen dat alle klanten correctbevoorraad worden tegen een minimale distributiekost. Grootste kosten betreffen vooral deafstandvergoeding, de lonen van de chauffeurs en de huurprijs van een voertuig. Door op dekost van een voertuig een hoge prijs te kleven, wordt er aan fleet sizing gedaan. Hier wordtdan getracht de benodigde voertuigenvloot zo klein mogelijk te houden.

De beschrijving van het Vehicle Routing Problem gaat als volgt: beschouw een een depotwaarin enkele vrachtwagens instaan voor de bevoorrading van ‘n’ klanten gedurende eenbepaalde werkdag. Deze klanten wensen een deterministische hoeveelheid van een of meerdereproducttypes. De vloot voertuigen staat in om via bepaalde subroutes de goederen tot bijde klant te brengen vanuit het depot. Een subroute bestaat dus uit een vertrek vanuit eendepot, het bezoek aan een aantal klanten en een terugkeer naar het depot. Elke klant kanbevoorraad worden binnen zijn Service Time Windows. Dit is het tijdsinterval waarbinnenlevering mogelijk is aan de klantzijde. Het is nu aan de leverancier om een routering opte stellen waarbij aan elke klant de juiste hoeveelheid goederen geleverd wordt binnen hetService Time Window van deze klant.

1

Hoofdstuk 1. Probleem beschrijving 2

Figuur 1.1: Voorbeeld van 6 klanten die bedeeld worden door 2 routes.

Vele variaties op dit basismodel zijn reeds veelvuldig beschreven. Hieronder volgt een overzichtvan enkele types:

• Vehicle Routing Problem with Time Windows (VRPTW): de klanten hebben time win-dows waarbinnen de levering dient plaats te vinden.

• Capacitated Vehicle Routing Problem (CVRP): de voertuigen hebben een beperktecapaciteit die ze kunnen vervoeren.

• Multi Depot VRP (MDVRP): de verdeler beschikt over meerdere voorraaddepots.

• VRP with Pick-Up and Delivery (VRPPD): een aantal goederen dienen bij een klantopgehaald te worden om ze bij een andere klant af te leveren.

• Split Delivery VRP (SDVRP): de klanten kunnen bediend worden door verschillendevoertuigen.

• Periodic VRP (PVRP): leveringen kunnen meerdere dagen duren.

Hoofdstuk 1. Probleem beschrijving 3

1.2 Extended Vehicle Routing Probleem met tijdstipafhanke-

lijke reistijden onderworpen aan rij-en rusttijdreglemen-

tering

Het onderwerp van deze thesis is het VRP beschreven in bovenstaande titel. Dit model voldoetaan zowel het Capacitated Vehicle Routing Problem als het Vehicle Routing Problem metTime Windows. Alle klanten beschikken dus over een Time Window (VRPTW) waarbinnengeleverd moet worden door identieke vrachtwagens die een maximale laadcapaciteit hebben(CVRP).

Daarenboven wordt er rekening gehouden met volgende restricties:

Tijdstipafhankelijke reistijden

De reistijden zijn afhankelijk van de afstand en het tijdstip waarop de reis wordt aangevat. Dewerkdag wordt ingedeeld in tijdsintervallen waarin een bepaalde snelheid gehanteerd wordt.Op deze manier is het mogelijk spitsuren weer te geven. Start een vrachtwagen met rijdenin een bepaald tijdsinterval, dan wordt er gerekend dat de vrachtwagen rijdt aan de snelheiddie gekoppeld is met dat interval. Wanneer een volgend tijdsinterval aanbreekt, wordt degemiddelde snelheid aangepast aan deze van het nieuwe tijdsinterval.

Multi Tour met herbevoorrading

Een vrachtwagen kan zich na een subroute herbevoorraden in het depot. Een subroute bestaatuit een vracht die verdeeld wordt onder bepaalde klanten, waarna teruggekeerd wordt naarhet depot. In het depot kan dan beslist worden om dit voertuig opnieuw de baan op testuren met een nieuwe lading, of het voor de rest van de dagelijkse Time Horizon in het depotongebruikt te laten. Over een hele dag gezien, maakt een voertuig dus een Multi Tour diebestaat uit meerde subroutes.

Rij-en rusttijdreglementering

Sinds 11 april 2007 heeft de Europese Unie de wetgeving rond rij- en rusttijden in het trans-portvervoer aangepast voor voertuigen zwaarder dan 3,5 ton. Zo worden de maximale dage-lijkse, wekelijkse en tweewekelijkse rijtijden vastgelegd. Deze zijn onderhevig aan de nodigerusttijden. Deze nieuwe wetgeving is in werking sinds 1 mei 2007. Door middel van eentachograaf wordt de opvolging van deze wetgeving nagekeken. In hoofdstuk 4 wordt dezewetgeving dieper uitgespit, zodat ze toegepast kan worden op het model.

Hoofdstuk 1. Probleem beschrijving 4

1.3 Analyse van de complexiteit

Van combinatorische problemen is graag geweten hoe moeilijk het is deze op te lossen. Decomplexiteitstheorie biedt een mogelijkheid om deze problemen in te delen. Het werk vanM.R. Garey and D.S. Johnson (7) vormt een mooie inleiding tot deze theorie.

Voor het Vehicle Routing Problem is bewezen dat het een NP-hard, zelfs NP-complete, pro-bleem is (7). Voor zulke problemen is het vaak aangewezen benaderende oplossingen tevinden, die veel vlugger te vinden zijn. Hiervoor maakt men dan gebruik van heuristieken.Voor een variant op het Vehicle Routing Problem, namelijk het Vehcile Routing Problemmet Time Windows is door M. Savelsberg (13) aangetoond dat het NP-complete is. Het hiergedefinieerde probleem is een versie van VPRTW die een hogere moeilijkheidsgraad heeft danhet VPRTW door het invoeren van Multi Tours, fleet sizing en tijdstipafhankelijke reistijden.Omdat de gewone VRPTW een gemakkelijkere versie is van dit probleem die NP-Completeis, kan men er vanuit gaan dat dit probleem eveneens NP-Complete is.

Het Vehicle Routing Probleem is sterk gebaseerd op twee andere NP-Hard problemen diereeds veelvuldigd bestudeerd werden in de literatuur (4):

• Het Traveling Salesman Problem: wanneer de capaciteit van de voertuigen oneindiggesteld wordt, bekomt men een instantie van een Mutliple Traveling Salesman Problem.Een MSTP instantie kan omgevormd worden tot een TSP instantie door aan de graafk-1 extra kopies van knoop 0 toe te voegen samen met de takken die aan knooppunt 0grenzen. (waarbij k het aantal routes bedraagt).

• Het Bin Packing Problem: de vraag of er een feasible solution bestaat voor een gegeveninstantie van het VRP is een instantie van het BPP. De beslissingen in het BPP zijnconceptioneel equivalent aan het VRP model waarbij alle takken hun kosten 0 bedragen.

Er kan dus gesteld worden dat de eerste transformatie gelijk is aan een relaxatie van het on-derliggende BPP en de tweede transformatie gelijk is aan een relaxatie van het onderliggendeTSP. Een volledige oplossing van het VRP is dan een TSP tour die voldoet aan de BPPvoorwaarden. Omwille van de wisselwerking tussen beide onderliggende modellen kunneninstanties van het Vehicle Routing Problem heel moeilijk op te lossen zijn in de praktijk.

1.4 Oplossingsstrategie

Een eerste stap is het opstellen van een wiskundig model dat het probleem beschrijft. Inhoofdstuk 2 wordt een basismodel opgesteld dat voldoet aan VRPTW, CVRP, de tijdstip-afhankelijke reistijden en de Multi Tour conditie. Er is getracht het wiskundig model op testellen met zo weinig mogelijk variabelen zodat het eenvoudig geımplementeerd kan wordenin zowel een Multi Tour Verbeteringsalgoritme als in een Genetisch Algoritme.

Hoofdstuk 1. Probleem beschrijving 5

Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme, dat de belangrijkste oplossings-strategie is van deze thesis, wordt behandeld in hoofdstuk 3. Dit algoritme maakt gebruikvan twee fasen. In een eerste fase wordt een routering opgesteld en in een tweede fase wordtgetracht deze routering te verbeteren.

Bij de opbouwfase moet bepaald worden wie de eerstvolgende klant in de partiele routeringwordt. Als er m ongerouteerde klanten over zijn, dan wordt de routering m maal vervolledigd,waarbij telkens een andere ongerouteerde klant als eerste aan bod komt in de vervollediging.De vervollediging van de partiele routering gebeurt door middel van een nearest neighboralgoritme. Uit de m volledige routeringen wordt dan de goedkoopste routering gekozen. Deongerouteerde klant die in deze routering als eerste toegevoegd wordt aan de partiele routering,wordt dan gekozen als eerstvolgende klant om definitief in de partiele routering opgenomente worden.

In de verbeteringsfase worden volgens bepaalde criteria enkele ‘mindere’ Multi Tour geselec-teerd die opnieuw gerouteerd dienen te worden. Wanneer deze herschikte Multi Tours eengoedkoper resultaat opleveren, worden zij opgenomen in de routering en worden de oorspron-kelijke Multi Tours verwijderd.

Pas in hoofdstuk 4 wordt dit basismodel uitgebreid met de rij- en rusttijdreglementering,zodat verzekerd kan worden dat het basismodel naar behoren werkt.

In hoofdstuk 5 wordt het basismodel opgelost door middel van een eenvoudig Genetisch Algo-ritme. Voor het vak Applied Combinatorial Optimization and Heuristics werd gevraagd eenGenetisch Algoritme op te stellen dat betrekking had op het thesisonderwerp. Met behulp vande Genetic and Evolutionary Algorithm Toolbox voor Matlab wordt een eenvoudige pogingondernomen een oplossing te vinden met behulp van een Genetisch Algoritme. Het betrefthier echter eerder een aanzet tot een oplossing, dan een echte wiskundig sterke oplossing.Maar voor de volledigheid is dit toch opgenomen in de thesis.

Tot slot worden er in hoofdstuk 6 conclusies getrokken uit deze thesis.

Hoofdstuk 2

Probleem formulering

2.1 Flow-arc formulering

Een traditionele flow-arc formulering wordt gebruikt om het probleem te beschrijven. Hetdistributienetwerk bestaat uit een depot en n klanten, dat voorgesteld wordt door de graafG(VG, A), met VG de knooppuntenverzameling v0, ..., vn, vn+1 en A de verzameling takken(vi, vj) : i 6= j∧i, j ∈ VG. Elke tak (vi, vn) heeft een daarmee gerelateerde constante afstanddij . Deze afstand wordt afgelegd in een reistijd tij(bi) die afhankelijk is van het tijdstip vanvertrekken bi. Per eenheid afgelegde afstand wordt een kost cd gerekend. De duur van deMulti Tour wordt belast per tijdseenheid met ct.

De twee knooppunten v0 en vn+1 stellen beiden de depot voor. v0 wordt gebruikt als startpuntvan elke subroute en vn+1 stelt het eindpunt voor van elke subroute. Dit kan dan optredenals definitief eindpunt wanneer de Multi Tour stopt of als herbevoorradingspunt als er eensubroute volgt op de binnenkomende subroute. Identieke voertuigen die maximaal een ca-paciteit qmax kunnen vervoeren, worden naar de klanten gezonden. Per voertuig wordt eenprijs cv gerekend per dag. De totale duur om deze vrachtwagen te laden is g0. In deze g0zit een constante waarde gstop bevat en een laadtijd g(q0). De Service Time Windows van dedepot [e0, l0] en [en+1, ln+1] zijn gelijk. Deze worden gelijkgesteld aan [Y0, YTH ]. Y0 stelt dan7u00 voor, het begin van de werkdag (420 minuten). YTH stelt het einde van de dag voor,namelijk 16u45 (1005 minuten). In dit verslag wordt uitgegaan van een werkdag die 9 urenen 45 minuten bedraagt.

Klanten hebben elk een vraag qi ≥ 0. De totale Service Time aan klantzijde is gi = g(qi) +gstop ≥ 0. Het Service Time Window waarbinnen het voertuig moet aankomen is [ei, li].

6

Hoofdstuk 2. Probleem formulering 7

Een korte samenvatting:

cv kostprijs per voertuig per dagct kostprijs per minuut dat Multi Tour duurcd kostprijs per eenheid afgelegde routeafstanddij afstand tussen twee knooppunten i en j[ei, li] start- en sluitingstijd Service Time Windowgi = gstop + gqi totale Service Timeqi gevraagde hoeveelheid door de klantqmax laadcapaciteit voertuigtij reistijd ≥ 0v0 depot knooppunt waaruit alle subroutes vertrekkenvn+1 depot knooppunt om te herbevoorraden of een subroute te stoppenY0 starttijd van de Daily Time HorizonYTH sluitingstijd van de Daily Time Horizon

Een Multi Tour bestaat dus uit een of meerdere subroutes. Deze subroutes moeten van elkaaronderscheiden worden. Daarom wordt elke subroute genoemd naar de laatste klant op zijnroute. Zo zal de subroute die klant 3 als laatste klant heeft voor terugkomst in het depot, denaam 3 dragen. Deze methode is mogelijk, omdat elke klant slechts een keer bezocht wordtgedurende de werkdag.

2.2 Algoritme TTT(tstart,d,T I)

Het doel van dit algoritme is om de tijdsafhankelijke reistijden te berekenen gegeven hettijdstip tstart waarop de rit start en de afstand d die afgelegd wordt. Input TI stelt eenmatrix voor. Deze is voorzien van een rij T van tijdsintervallen en een rij S van snelheden diecorresponderen met die tijdsintervallen. Deze tijdsintervallen worden bepaald door een dagop te splitsen in p tijdsintervallen T= T1, T2, ..., Tp. Elk interval [Tk, Tk+1[ wordt gelinkt aaneen constante rijdsnelheid Sk die gedurende dit interval aangehouden wordt. Dit algoritme iseen aanpassing op het algoritme van S. Ichoua, M. Gendreau, and J.Y. Potvin (8).

Hoofdstuk 2. Probleem formulering 8

Start T(tstart,d,T I)

1. t∗ ← 0

2. find k ∈ [1, ..., p], Tk ≤ tstart ≤ Tk+1

3. t∗ ← tstart + d/Sk

4. while (t∗ > Tk+1) do

5. d← d− (Tk+1 − tstart)Sk

6. t∗ ← Tk+1 + d/Sk+1

7. k ← k + 1

8. end while

9. return (t∗ − tstart)

Als output wordt de totale rijtijd gegeven. Een belangrijke eigenschap van deze output isdat het principe van First In - First Out gerespecteerd wordt. Daardoor zal een voertuig datklant vi verlaat om naar klant vj te gaan en vertrekt op tijdstip t steeds vroeger aankomendan een voertuig dat hetzelfde traject aflegt maar start op een tijdstip t+ σ (σ > 0).

Een aangepaste versie van dit algoritme TTTomg(teind,d,T I) wordt eveneens gebruikt. Hier-bij berekent men de reistijd uitgaande van het tijdstip teind waarop het transport aankomt.

De programmering van deze algoritmes in Matlab zijn beschreven in appendices B.2 en B.3.

Data intervallen

Voor de data van de gemiddelde snelheden van vrachtverkeer op de autowegen werd contactopgenomen met verschillende overheidsdiensten. De website http://www.start-sitter.be,opgericht door de Federale Overheidsdienst Mobiliteit en Vervoer (10), beschikt over dezedata. Via een uitgebreid netwerk van meetpunten aanwezig aan tunnels, verkeerswisselaars,ringwegen en E-wegen registreren zij o.a. voertuigkilometers, verkeersvolumes, wegvak verza-diging, snelheid van personenwagens en vrachtverkeer, zwaarte van files, ... . Verantwoorde-lijke van deze applicatie, Danny Weckhuyzen, liet mij weten dat de data voor vrachtverkeerniet altijd even accuraat zijn. Voornamelijk bij vertraagd verkeer heeft het systeem moeitevrachtwagens van personenwagens te onderscheiden.

Onderstaande figuur is een schermafdruk van de webapplicatie Start-Sitter. Via de verschil-lende kaders kunnen de gewenste data opgevraagd worden. De kolom S2 bevat de gemiddeldesnelheden voor vrachtverkeer.

Hoofdstuk 2. Probleem formulering 9

Figuur 2.1: Webapplicatie www.start-sitter.be.

Ondanks de beperkingen wordt toch een poging ondernomen om via deze applicatie eensnelheidsfunctie op te stellen voor tijdsintervallen van 60 minuten. Deze snelheidsfunctie zaldan een goede leidraad zijn voor de snelheidsfunctie die gebruikt zal worden in de algoritmes.Uit de talrijke meetpunten wordt gekozen voor de ringweg R4 rond Gent. Dit is een wegmet veel vrachtverkeer, dus een goede indicatie. Vervolgens worden de data bekeken vooreen normale werkweek, namelijk van maandag 7 juni 2010 tot vrijdag 11 juni 2010. Van de(correcte) data wordt een weekgemiddelde genomen. Deze gemiddelde snelheidsfunctie wordtuitgevlakt aan de zijkanten en verminderd met 20km/h, omdat de trajecten niet enkel overautostrades lopen. Eveneens worden de ochtend- en avondspits benadrukt in de gecorrigeerdesnelheidsfunctie. Dit levert volgend resultaat (alle data in km/h):

Hoofdstuk 2. Probleem formulering 10

7/6/10 8/6/10 9/6/10 10/6/10 11/6/10 Gemid. v Gecorrig. v

0 101 100 101 138 100 100,5 801 100 100 102 138 100 100,5 802 101 100 103 138 100 101 803 101 100 101 130 100 100,5 804 101 100 102 132 100 100,75 805 103 98 100 102 100 100,6 806 96 95 92 90 93 93,2 717 90 90 86 87 90 88,6 68.68 88 89 84 85 88 86,8 66.89 89 91 84 86 90 88 6810 92 91 87 87 91 89,6 69.611 90 92 89 87 91 89,8 69.912 91 91 89 87 91 89,8 69.813 93 90 86 87 90 89,2 69.214 90 91 88 85 92 89,2 69.215 90 92 88 86 89 89 6916 92 93 88 87 92 90,4 70.417 91 95 81 85 92 88,8 68.818 93 96 87 88 95 91,8 71.819 101 96 94 91 99 96,2 76.220 99 102 99 98 101 99,8 8021 102 102 99 98 102 100,6 8022 105 103 100 97 102 101,4 8023 100 103 155 100 99 100,5 80

Uiteraard is de gecorrigeerde snelheid in deze tabel slechts een leidraad voor een snelheids-functie. Wanneer men een specifiek Vehicle Routing Problem heeft, wordt de snelheidsfunctieopgesteld rekening houdend met probleemspecifieke factoren zoals de soort wegen (autostrade,gewestweg, dorpskern), de regio (ring Antwerpen, E19, ...), ...

In onderstaande figuur ziet u een grafische voorstelling van de gecorrigeerde snelheidsfunctie.In de algoritmes wordt een andere snelheidsfunctie gebruikt waarbij de ochtend- en avondspitsnog meer benadrukt worden.

Hoofdstuk 2. Probleem formulering 11

Figuur 2.2: Gecorrigeerde snelheidsfunctie.

2.3 Variabelen

In wat volgt wordt een overzicht gegeven van de ingevoerde variabelen. Hun mening wordtverduidelijkt door middel van enkele figuren. In deze figuren worden klanten voorgesteld doorcirkels en het depot door een rechthoek. Om de schetsen niet te ingewikkeld te maken, wordenbegindepot 0 en einddepot n + 1 in de routering niet op dezelfde plaats afgebeeld, hoewelbeide depots dezelfde depot voorstellen.

De y-variabelen geven tijdstippen weer. In het Multi Tour Verbeteringsalgoritme kunnen dezereele waarden aannemen. In het Genetisch Algoritme worden dit gehele waarden zodanig datalle variabelen in het Genetisch Algoritme van het type integer zijn.

Indien n het aantal klanten voorstelt, dan hebben we in totaal 4n variabelen:

xi i ∈ [1, n], xi ∈ [1, n+ 1]

Integer beslissingsvariabele die aanduidt dat vanuit klant vi naar het knooppunt vxi gereisdwordt. Deze variabele geeft dus weer dat na een bezoek aan een klant vi, er gekozen wordtvoor een bezoek aan een andere klant of voor binnenkomst in het depot. Zo wordt ervoorgezorgd dat er steeds een traject vertrekt uit een klant-knooppunt. De xi variabelen gevenweer waarheen een route leidt vanuit een klant. Doordat enkele klanten ook richting het depotvn+1 trekken, komen niet alle klanten voor in de reeks [x1, x2, ..., xn]. Voor de klanten die nietvoorkomen in deze xi-variabelen wordt er vanuit gegaan dat zij bereikt worden via een route

Hoofdstuk 2. Probleem formulering 12

die vertrekt uit het depot.

Figuur 2.3: De mogelijke waarden voor x.

yi i ∈ [1, n], yi ∈ [max(Y0, ei − t0i − g0), li − t0i − g0]

Reele of integer (GA) beslissingsvariabele die aanduidt wanneer de service start in het depotv0 om de tocht voor te bereiden naar klant vi. Met het starten van een service bedoelt men inhet depot het inladen van de vrachtwagen. De waarde yi moet zodanig gekozen worden datde aankomst bij de klant plaatsvindt binnen het Service Time Window van deze klant. Hetvroegste vertrek uit het depot is dan pas mogelijk voor een ondergrens max(Y0, ei− t0i− g0).De Multi Tour kan pas starten als de werkdag begonnen is, vandaar Y0. Men wil bij deeerste klant ten vroegste aankomen op het moment dat het Service Time Window opengaat.Daarom moet de ondergrens van yi gekozen worden rekening houdend met de laadtijd g0

en rijtijd t0i, zodanig dat pas gestart wordt zodat er ten vroegste op ei aangekomen wordtbij klant vi. Onderstaande figuur toont eerst een voertuig dat onmiddellijk aan de servicebegint. Hierdoor moet er op de locatie van de klant nog gewacht worden (grijze balk). In deonderste voorstelling vindt deze wachttijd plaats in het depot, zodat de chauffeur zich nogkan bezighouden met andere taken dan wachten.

Figuur 2.4: Een voorbeeld voor de ondergrens van de yi-waarden. De groene balk stelt het ServiceTime Window voor van de klant. De onderste voorstelling is de correcte.

De bovengrens is via dezelfde gedachtengang berekend. yi dient zodanig gekozen te wordendat er rekening houdend met de laad- en rijtijd nog op tijd vertrokken wordt om de klant tebereiken voor het sluiten van zijn Service Time Window.

Hoofdstuk 2. Probleem formulering 13

Figuur 2.5: Een voorbeeld voor de bovengrens van de yi-waarden. De onderste voorstelling is decorrecte, waarbij er nog net op tijd gestart wordt om tijdig aan te komen bij de klant.

yi i ∈ [1, n], yi ∈ [ei, li]

Reele of integer (GA) beslissingsvariabele die aanduidt wanneer de service start in klant vi.Met het starten van een service bedoelt men aan klantzijde het uitladen van de vrachtwagen.Dit tijdstip moet binnen het Service Time Window van de klant gelegen zijn.

Figuur 2.6: yi moet binnen het Service Time Window vallen.

zi i ∈ [1, n], zi ∈ [0,n+1].

Integer beslissingsvariabele die de volgende stap aanduidt voor een subroute die binnenlooptin het depot na het bezoek aan klant vi. zi = 0 betekent dat het transport van klant vi naarhet depot niet plaatsvindt. Daardoor kan er ook geen opvolger gezocht worden. zi = n + 1betekent dat deze subroute de laatste is en de Multi Tour eindigt daar. Na de binnenkomstin het depot zal dus geen nieuwe subroute meer vertrekken. zi = j met j ∈ [1, n] betekent dater na binnenkomst in het depot terug vertrokken wordt richting klant vj . Voorwaarde hierbijis wel dat het transport van het depot naar vj plaatsvindt.

Hoofdstuk 2. Probleem formulering 14

Figuur 2.7: De drie mogelijke waarden voor z.

2.4 Uitgewerkt voorbeeld

Om dit model duidelijk te maken, wordt hieronder een voorbeeld uitgewerkt. Stel u eenvoertuig voor dat klanten 1 tot 5 dient te bevoorraden. De VRP rekent uit dat volgendresultaat het best de kostenfunctie minimaliseert:

Variabelen

1 2 3 4 5

xi 6 5 6 3 1yi 682 460yi 863 750 589 520 800zi 6 0 2 0 0

Service Time Windows

ei li

0 420 10051 420 10052 750 10053 500 6004 520 7505 800 1005

In de afbeelding hieronder wordt een oplossing voorgesteld op basis van bovenstaande gege-vens. Het voertuig wacht eerst in het depot om te vermijden dat bij de eerste klant reedsgewacht moet worden op de opening van het Service Time Window. In de depot kan dechauffeur zich ten minste nog nuttig maken op een andere manier. Daarom start de servicein het depot pas om 460. De service in het depot omvat het inladen van het voertuig, ge-durende g0. Dit wordt gevolgd door een reistijd t04 naar de klant. Door de starttijd van deservice in het depot af te stellen op het Time Window van klant 4, wordt er aangekomen aan

Hoofdstuk 2. Probleem formulering 15

klant 4 gelijktijdig met het openen van het Time Window, namelijk 520. De service kan dusonmiddellijk starten. Daar wordt uitgeladen, g4, waarna de trip verder gaat richting klant 3.Daar komt het voertuig aan binnen het Service Time Window van klant 3, want het uitladeng3 kan onmiddellijk beginnen op 589. Vervolgens wordt er terug naar het depot gereden. Aande hand van de w3-waarden is het mogelijk na te gaan of q4w3

4 + q3w33 ≤ qmax. De waarde

z3 = 2 geeft aan dat er een nieuwe subroute vertrekt richting klant v2. Daar wordt wederomhalt gehouden zodanig dat er gewacht kan worden in het depot in plaats van op de locatietot het openen van het Service Time Window bij de eerstvolgende klant . Op 682 start hetinladen van de vrachtwagen in het depot. Om 750 kan dan, gelijktijdig met de opening vanhet Time Window de service bij klant 2 beginnen. De route trekt dan verder van klant 2naar klant 5. Daar moet echter gewacht worden tot 800 voor het beginnen van y5 omdat hetService Time Window nog niet open is. Tot slot wordt via klant 1 naar het depot gereisd.Daar duidt de waarde z1 = 6 er op dat er geen nieuwe subroute meer uitrijdt.

voertuig 1: v0 → v4 → v3 → v6 → v0 → v2 → v5 → v1 → v6

Figuur 2.8: Een voorbeeld van een distributiepatroon voor een voertuig met n=5. Grijs stelt wacht-tijden voor, oranje service tijden en roos reistijden.

Hoofdstuk 2. Probleem formulering 16

2.5 Hulpwaarden

Het vooropgestelde model moet nog onderworpen worden aan enkele restricties. Dit zou per-fect kunnen op basis van de 4n-variabelen. De voorstelling van de restricties wordt echter eenpak eenvoudiger indien men uit deze 4n-variabelen enkele hulpwaarden berekend. Hierondervolgt de betekenis van deze hulpwaarden:

xi i ∈ [1, n], xi ∈ 0, i

Deze hulpwaarden duiden aan of een klant vi bereikt wordt via een subroute startend in hetdepot. xi = i geeft dus weer dat klant i bereikt wordt vanuit het depot. xi = 0 geeft weerdat klant i bereikt wordt via een subroute startend bij een andere klant. Een voorbeeld voorn=3 maakt veel duidelijk:

Figuur 2.9: Voorbeeld voor de x-waarden met n=3.

De variabelen worden ten slotte verenigd in een vector X waarin eerst de n xi-waarden voor-komen, gevolgd door de n xi-variabelen.

wsi i ∈ [0, n], s ∈ [1, n], ws

i ∈ 0, 1

Zoals reeds vermeld is, worden subroutes genoemd naar de laatste klant voor hun terugkeernaar het depot. In bovenstaande figuur zou dit betekenen dat er subroute 1 en subroute2 bestaan. Via deze binaire hulpwaarden ws

i duiden we aan of de subroute s die klant vi

aandoet, vervolgens op een correcte manier verder reist naar eventuele volgende klanten enten slotte terugkeert naar het depot vn+1. Het algoritme beschreven in de appendix A kentenkel ws

i = 1 toe indien:

• de klant vj die na vi komt reeds een waarde wsj = 1 heeft. Dit betekent dus dat vi

verbonden wordt met een klant die reeds op een correcte manier verbonden is met hetdepot.

• wss = 1: de klant die zijn naam verbonden heeft aan de subroute heeft een rechtstreeks

transport naar het depot vn+1.

Hoofdstuk 2. Probleem formulering 17

• vi de enige klant is die naar vj reist. Hierdoor vermijdt men dat meerdere subrouteseenzelfde klant aandoen.

Figuur 2.10: Voorbeeld voor de w-waarden.

Het uiteindelijke doel in de restricties is er voor te zorgen dat elke klant juist 1 wsi -waarde

heeft die 1 is. Zodanig bekomt men een correcte routering waarin elke klant bezocht wordtdoor een correcte subroute. Subroutes die lussen beginnen maken worden zo vermeden. Meerhierover wanneer de restricties worden ingevoerd.

In onderstaande figuur wordt eens een voorbeeld gegeven van de toekenning van de w-waardenvoor n = 7. Vanuit klanten 3 en 7 wordt er op een correcte manier naar het einddepot 8gereisd. De waarden w3

3 en w77 worden dus aan 1 gelijkgesteld. De s-index verwijst naar

de naam van de subroute, die bepaald wordt door de laatste klant voor binnenkomst in hetdepot. Vervolgens zien we dat vanuit klant 1 op een correcte manier gereisd wordt naar klant3, waarvan reeds aangetoond is dat vanuit klant 3 het depot bereikbaar is. Dus w3

1 = 1,omdat klant 1 in subroute 3 ligt. Vanuit klanten 5 en 6 reizen twee voertuigen naar klant 7die reeds een w-waarde verschillend van 0 heeft. Het is echter niet toegestaan dat meerdereroutes dezelfde klant aandoen. Vandaar dat klanten 5 en 6 geen w-waarde toegekend krijgendie gelijk is aan 1. Hierdoor weet het model dat klanten 5 en 6 niet correct gerouteerd zijn.Tot slot valt op dat klanten 2 en 4 ook geen w-waarden hebben die gelijk zijn aan 1. Ditomdat vanuit deze klanten het depot niet op een correcte manier bereikt wordt omwille vaneen lus.

Hoofdstuk 2. Probleem formulering 18

Figuur 2.11: Voorbeeld van de toekenning van de w-waarden met n=7.

Opmerking

Deze w-waarden lijken op het eerste zicht redelijk ingewikkeld. De verklaring hiervoor is tevinden in het feit dat het model ook geschikt is voor een Genetisch Algoritme. Terwijl hetIteratieve Multi Tour Opbouw- en Verbeteringsalgoritme intern over meer probleemspecifiekekennis beschikt, is dit bij het Genetisch Algoritme minder het geval. Daardoor moet er indeze w-waarden al enige intelligentie gestopt worden, zodanig dat de doelfunctie van hetGenetisch Algoritme beter te sturen valt. Terwijl het Iteratieve Multi Tour Opbouw- enVerbeteringsalgoritme meteen correcte routes opbouwt, start het Genetisch Algoritme doorwillekeurige toekenningen aan de variabelen. Daardoor heeft het GA initieel routes die nietcorrect verlopen omwille van routes die plots stoppen, routes die uit het niets beginnen,lussen... Daarom moet het GA eerst gestuurd worden door middel van de w-waarden zodanigdat er een correcte routering verkregen wordt die men dan kan aanpassen.

De wsi -waarden zijn ook nodig om klanten binnen een subroute aan elkaar te linken, wat

handig zal blijken in de restricties.

2.6 Model voor een Time Windows VRP

2.6.1 Doelfunctie

De doelfunctie voor dit VRP is een kostenfunctie die geminimaliseerd dient te worden. Detotale kostprijs van de gehele routering omvat de huur van het aantal voertuigen, de kilometer-vergoeding van de totaal afgelegde afstand en tot slot de uitbetaalde lonen aan de chauffeursgedurende de routeduur. Volgende formulering van de doelfunctie wordt bekomen:

Hoofdstuk 2. Probleem formulering 19

minimaliseer:

cv

n∑i=1

(zi = n+ 1) + cd

n∑i=1

(d0xi + dixi) (2.1)

+ctn∑

i=1

(xi = n+ 1)

[yi + gi + ti n+1 + (zi)+(zi 6= n+ 1)(yzi − yi)

]− (xi)+yi

Een voertuig dat gebruikt wordt, zal op een gegeven moment zijn Multi Tour stoppen. Ditwordt gekenmerkt door zi = n + 1. Wanneer men dan kijkt hoeveel maal deze specifiekezi-waarde voorkomt, dan vindt men het aantal gebruikte voertuigen.

Voor de afgelegde weg kijkt men eerst naar de routes van het depot naar de klanten. Steltmen d00 = 0 dan kan men deze afstand voorstellen door d0xi , want de trajecten die nietplaatsvinden, xi = 0, resulteren dan in een afstand d00 = 0. De totale afstand van detrajecten die vertrekken vanuit de klanten wordt dan voorgesteld door de som van dixi .

Tot slot wordt de duur van de Multi Tours berekend. De routeduur wordt hier gedefinieerdals de tijdspanne tussen het starten van de service voor een subroute yi en het tijdstip waaropeen subroute terug binnenkomt, yi + gi + ti n+1. Deze laatste tijd wordt vermeerderd met dewachttijd in het depot tussen twee subroutes indien het een herbevoorrading betreft, vandaarde term (zi)+(zi 6= n+ 1)(yzi −yi). De factoren (xi = n+ 1) en (xi)+ zorgen ervoor dat enkelde tijdstippen gerekend worden van de klanten die laatst, respectievelijk eerst in een subrouteliggen.

2.6.2 Restricties

Hierna volgen de restricties waaraan het model moet voldoen om correcte routes te genereren.

Elke klant wordt bereikt

n∑j=1

(Xj == i) = 1 ∀i ∈ [1, n] (2.2)

Deze restrictie zorgt ervoor dat elke klant bereikt wordt. Elke klant moet exact eenmaalvoorkomen in de vector X = [x1...xn x1...xn]. Dit komt er dan op neer dat naar elke klanteen traject wordt ondernomen ofwel vanuit het depot (xi) ofwel vanuit een andere klant (xi).

Hoofdstuk 2. Probleem formulering 20

Laadcapaciteit voertuig

n∑j=1

qjwsj ≤ qmax ∀s ∈ [1, n] (2.3)

Elke vrachtwagen kan maximaal zijn lading qmax uitdelen. De wsi -waarden duiden aan welke

klanten in eenzelfde subroute liggen. Het optellen van hun individuele goederenvraag moetdan kleiner zijn dan de laadcapaciteit van het voertuig.

Elke klant ligt in een correcte subroute

n∑s=1

wsi = 1 ∀i ∈ [1, n] (2.4)

De routering moet zodanig opgesteld zijn dat elke klant juist eenmaal een wsi -waarde heeft

die 1 is. De klant is dan opgenomen in juist een subroute. Deze subroute loopt dan ook opeen correcte manier terug naar het depot. In totaal betekent dit dat vanuit de klant op juisteen manier het depot bereikt wordt via een subroute.

Figuur 2.12: Slechte routering want v2 en v4 niet opgenomen.

Deze wsi -restricties dienen vooral om het zoekproces vlugger te sturen. Zodanig kan men

vermijden dat er lussen voorkomen, dat voertuigen niet terugkeren, dat klanten niet in eencorrecte subroute zitten, ... In bovenstaand voorbeeld zijn v2 en v4 niet verbonden met hetdepot. De enige restrictie die dit zou duidelijk maken is dat het niet mogelijk is om tegelijky4 > y2 en y2 > y4 te bekomen. Doordat voor geen enkele s-waarde ws

2 en ws4 gelijk zijn aan

1, heeft het GA vlugger door dat er iets mis is met de xi-waarden van klant 2 of 4.

Binnenkomst subroute

(xi == n+ 1) = (zi)+ ∀i ∈ [1, n] (2.5)

Hoofdstuk 2. Probleem formulering 21

De klanten waarbij xi 6= n + 1 zijn niet de laatste klanten in een subroute. Voor hen wordtzi = 0 gesteld. Enkel voor de laatste klanten in een subroute, xi = n + 1, moet bepaaldworden wat er gebeurd na binnenkomst in het depot. Dit kan het opstarten zijn van eennieuwe route of het eindigen van de Multi Tour. In beide gevallen zal de waarde van zi > 0.

Voorafgaande subroute

n∑j=1

(zj == i) ≤ (xi)+ ∀i ∈ [1, n] (2.6)

Indien een subroute opgevolgd wordt door een andere subroute dan wordt via zi de linkgemaakt tussen de laatste klant van de aankomende subroute en de eerste klant van de uit-gaande subroute. De variabelen zi mogen dus enkel waarden aannemen van klanten die eerstliggen in een nieuwe subroute. Het kleiner of gelijk aan teken, houdt er rekening mee datde eerste klant in de eerste subroute van een Multi Tour niet gelinkt wordt aan een vorigesubroute.

Volgorde service starttijden voor traject dat vanuit depot vertrekt

(xi)+[yi − yi − g0 − t0i] ≥ 0 ∀i ∈ [1, n] (2.7)

Wanneer een voertuig uit het depot vertrekt richting een klant i, xi > 0, dan moet hetservice starttijdstip aan klantzijde groter zijn dan het service starttijdstip aan de zijde vanhet depot vermeerderd met de laad- en reistijd.

Hoofdstuk 2. Probleem formulering 22

Volgorde service starttijden voor traject dat vanuit klant vertrekt

1. for each i ∈ [1, n] do

2. if (xi 6= n+ 1) then

3. [yxi − gi − tixi − yi] ≥ 0

4. else

5. if (zi = n+ 1)then

6. [YTH − gi − ti n+1 − yi] ≥ 0

7. else

8. [yzi − gi − ti n+1 − yi] ≥ 0

9. end if

10. end if

11. end for

Via deze for-lus worden n voorwaarden opgesteld in verband met de volgorde van servicestarttijdstippen.

Als xi 6= n+1 dan worden trajecten beschouwd van klant naar klant. Het service starttijdstipvan de laatste klant moet dan groter zijn dan dat van de eerste klant vermeerderd met delaad- en rusttijd.

Als xi = n + 1 dan worden de voorwaarden opgesteld voor trajecten van een klant naar hetdepot. Het service starttijdstip van de volgende subroute moet dan groter zijn dan dat vande klant vermeerderd met de laad- en rusttijd. In het geval het de laatse subroute betreft vande Multi Tour, dan moet gekeken worden of deze subroute aankomt voor YTH .

Hoofdstuk 3

Het Iteratieve Multi Tour Opbouw-

en Verbeteringsalgoritme

Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme (IMTOV) dat in deze thesisgebruikt wordt, is sterk gebaseerd op datgene uitgewerkt door Miguel Andres Figliozzi in zijnartikel “An iterative route construction and improvement algorithm for the vehicle routingproblem with soft time windows” (6). De kern van het Iteratieve Multi Tour Opbouw- enVerbeteringsalgoritme bestaat uit een constructie algoritme waar Multi Tours sequentieelworden opgebouwd en verbeterd. De oplossingsmethode wordt opgedeeld in twee fasen: MultiTour constructie en Multi Tour verbetering.

De Multi Tour constructiefase gebruikt twee algoritmes: een ‘Ondersteunend Multi Tour Op-bouwalgoritme’ Hr en een ‘Multi Tour Opbouwalgoritme’ Hc . De verbeteringsfase gebruikthet ‘Multi Tour Verbeteringsalgoritme’ Hv . Door gebruik te maken van een bottom upapproach worden de algoritmes in de volgorde Hr , Hc en Hv geıntroduceerd. De m-files diede programmering in Matlab beschrijven, vindt u terug in de appendices B, C en D.

De denkpistes die gevolgd worden in de constructiefase bij de algoritmes Hr en Hc zijn schat-plichtig aan de algoritmes beschreven in het werk van Figliozzi. De beschrijvende paragrafenlijken sterk op deze in Figliozzi’s paper. Het grootste werk bestond er dan ook uit om dezealgoritmes te programmeren en om te vormen tot het model uit deze paper met Multi Toursdie herbervoorrading toepassen. Het Hc algoritme stond als pseudo algoritme uitgewerkt inFigliozzi’s paper. Het Hr algoritme daarentegen stond slechts beschreven in enkele regels,waardoor dit nog helemaal uitgewerkt diende te worden.

In hoofdstuk 4 worden deze algoritmes nog verder uitgewerkt zodat ze voldoen aan de rij- enrusttijdreglementering.

Het Multi Tour Verbeteringsalgoritme Hv is van eigen makelij. Dit algoritme verwijdert debeste Multi Tour uit de routering en kijkt na of een herroutering van de overige Multi Tour

23

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 24

een betere oplossing oplevert. Als dit zo is, wordt deze routering bijgehouden. Indien niet,wordt de oude routering behouden. Vervolgens wordt dit algoritme herhaald waarbij nu eenMulti Tour meer uit het verbeteringsproces gehouden wordt. Dit proces gaat zo door tot alleMulti Tours weerhouden worden van het verbeteringsproces.

3.1 Het Ondersteunend Multi Tour Opbouwalgoritme Hr

Dit algoritme is er op gericht een routering te vervolledigen op een vereenvoudigde manier.Gegeven de laatst bezochte klant in een partiele routering, een reeds bepaalde volgende tebezoeken klant en een verzameling van klanten die nog niet opgenomen zijn in een MultiTour vervolledigt algoritme Hr de routering zodanig dat alle klanten bezocht worden. Degegenereerde routering voldoet aan alle restricties.

In dit onderzoek is Hr(Routering, vi, vj , Qi, C,∆ ) een ‘generalized nearest neighbor heuristic’(GNNH). Deze GNNH heeft vijf inputparameters: Routering stelt de 4n variabelen voor diereeds een partiele routering beschrijven; vi stelt de laatste klant voor die reeds door Routeringbezocht is; vj beschrijft de reeds bepaalde eerstvolgende klant die bezocht gaat worden; Qi

stelt de hoeveelheid lading voor die overblijft in het voertuig na het bedienen van klant vi; Cis een verzameling die de klanten bevat die nog niet in een Multi Tour opgenomen zijn.

3.1.1 Klant vj opnemen in de routering

Het GNNH start eerst door vast te leggen dat na klant vi klant vj opgenomen wordt inRoutering. Deze opvolging kan zich op drie manieren voltrekken. yj stelt hierbij het tijdstipvoor waarop de service start bij een klant vj (j ∈ C), waarbij yj = max(aj , ej). Hierdoorwordt verzekerd dat de service pas aanvat als het Service Time Window open is. In wat volgtwordt boven de horizontale lijn een overzicht gegeven van de nodige voorwaarden per scenario.Onder de lijn wordt op basis van dit scenario de toewijzing van de variabelen bepaald. Enkelde variabelen die een waarde verschillend van nul krijgen, worden weergegeven. De scenario’sworden doorlopen met een if-functie. Eerst wordt gekeken of er aan de voorwaarden voor avoldaan is, is dat niet het geval wordt er naar de voorwaarden voor b gekeken, is dat niet hetgeval dan wordt c uitgevoerd.

a. Volgende klant in zelfde subroute

VoorwaardenQi − qj ≥ 0 De vrachtwagen heeft nog voldoende voorraad na klant vi om klant

vj te bedienen.yj ≤ lj De service bij klant vj kan starten voor het sluiten van het Time

Window.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 25

yj + gj + tjn+1 ≤ YTH Na het leveren bij klant vj is er nog voldoende tijd om tijdig hetdepot te bereiken alvorens de dagelijkse Time Horizon YTH over-schreden wordt.

Toewijzingenxi = j Vanuit klant vi wordt rechtstreeks naar klant vj gereisd.yj Het tijdstip waarop de service start bij klant vj wordt vastgelegd.Qi = Qi − qj De vraag van klant vj wordt verminderd van de lading van de

vrachtwagen.C = C \ vj vj wordt verwijderd uit de verzameling van ongerouteerde klanten.

Als scenario a niet geldig is, wordt gekeken naar de voorwaarden van scenario b.

b. Volgende klant in nieuwe subroute na herbevoorrading

VoorwaardenQi − qj ≤ 0 De vrachtwagen heeft niet voldoende voorraad meer om klant vj

te bevoorraden.yj ≤ lj De service bij klant vj kan starten voor het sluiten van het Time

Window. yj wordt hier berekend rekening houdend met een pas-sage langs het depot.

yj + gj + tjn+1 ≤ YTH Na het leveren bij klant vj is er nog voldoende tijd om tijdig hetdepot te bereiken alvorens de dagelijkse Time Horizon YTH over-schreden wordt.

Toewijzingenxi = n+ 1 Vanuit klant vi wordt naar het depot gereisd om te herbevoorra-

den.yj Het tijdstip waarop in het depot de service start om de subroute

naar klant vj voor te bereiden, wordt vastgelegd.yj Het tijdstip waarop de service start bij klant vj wordt vastgelegd.zi = j De subroute komt binnen in het depot na klant vi, maar vertrekt

na herbevoorrading richting klant vj .Qi = qmax − qj De heraangevulde voorraad qmax wordt verminderd met de vraag

van klant vj . Het heraanvullen tot qmax is afhankelijk van deresterende hoeveelheid lading bij binnenkomst in het depot.

C = C \ vj vj wordt verwijderd uit de verzameling van ongerouteerde klanten.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 26

Als scenario b niet geldig is, wordt overgaan op scenario c.

c. Volgende klant wordt door nieuw voertuig bediend in een nieuwe Multi Tour

Hier geen voorwaarden omdat alle klanten feasible moeten zijn wat lading en bereikbaarheidbetreft. Dit betekent dat het voor elke klant mogelijk moet zijn deze klant te bereiken binnenzijn Time Window, een hoeveelheid af te leveren die kleiner is dan qmax, en vervolgens tijdigterug te kunnen keren naar het depot alvorens YTH overschreden wordt.

Toewijzingenxi = n+ 1 Vanuit klant vi wordt naar het depot gereisd om de Multi Tour te

beeindigen.yj Het tijdstip waarop in het depot de service start om de nieuwe

Multi Tour naar klant vj voor te bereiden, wordt vastgelegd.yj Het tijdstip waarop de service start bij klant vj wordt vastgelegd.zi = n+ 1 De subroute komt binnen in het depot na klant vi en de Multi

Tour wordt beeindigd.Qi = qmax − qj De laadcapaciteit qmax wordt verminderd met de vraag van klant

vj .C = C \ vj vj wordt verwijderd uit de verzameling van ongerouteerde klanten.

3.1.2 Routering vervolledigen met Nearest Neighbor algoritme

Dat klant vj de eerstvolgende klant wordt in de routering, ligt vast via de inputparameters. Derest van de ongerouteerde klanten in C moet nu nog bezocht worden. De eerstvolgende klantwordt gevonden door de ongerouteerde klant te vinden met de kleinste gegeneraliseerde kost.Voor elke volgende iteratie zoekt de heuristiek naar de volgende klant onder de ongerouteerdeklanten met de kleinste gegeneraliseerde kost. De gegeneraliseerde kostenfunctie die gebruiktwordt in dit algoritme houdt rekening met:

• nabijheid in afstand

• nabijheid in reistijd

• de resterende lading in het voertuig

• de dringendheid alvorens het Service Time Windows sluit

• het inzetten van een nieuw voertuig wanneer de volgende klant onbereikbaar is.

De waarde voor de gegeneraliseerde kost g(∆, i, j) om na klant vi klant vj op te nemen inde routering is afhankelijk van hoe klant vj bereikt wordt. Wederom wordt gebruik gemaakt

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 27

van de hierboven beschreven scenario’s a, b en c. Indien scenario a mogelijk is dan stelt meng = ga. Is dit niet het geval dan wordt nagegaan of scenario b mogelijk is zodat g = gb. Alsbeide voorgaande scenario’s niet kunnen toegepast worden dan stelt men g = gc.

ga(∆, i, j) = δ1dij + δ2(yj − yi) + δ3(lj − aj) + δ4(Qi − qj)gb(∆, i, j) = δ1(di n+1 + d0j) + δ2(yj − yi) + δ3(lj − aj) + δ4(qmax − qj)gc(∆, i, j) = δ5 + δ1(di n+1 + d0j) + δ2[(yj − yj) + (gi + ti n+1)] + δ3(lj − aj) + δ4(qmax− qj)

De parameter δ1 bepaalt het gewicht toegekend aan de afstand tussen klant vi en klant vj .Parameter δ2 houdt rekening met de tijdspanne tussen het aanvangen van de service bijklant vi en het eerst mogelijke tijdstip waarop de service kan starten bij klant vj . De papervan M. M. Solomon (14) volgend, geeft δ3 gewicht aan de dringendheid waarmee klant vj

bediend dient te worden. Deze dringendheid wordt uitgedrukt door de tijdspanne tussen deaankomsttijd aj en het laatst mogelijke tijdstip waarop bediend kan worden lj . In deze zelfdepaper van Solomon wordt gesteld dat δ1 + δ2 + δ3 = 1. Parameter δ4 houdt rekening metde overblijvende lading in het voertuig na het bedienen van klant vj . Navraag bij MiguelFigliozzi leerde dat deze δ4 van dezelfde grootorde is als de voorgaande δ-waarden. Wanneereen nieuwe Multi Tour opgestart wordt voor klant vj dan wordt via δ5 een kost gerekend voorhet nieuwe voertuig.

3.1.3 Algoritme Hr(Routering, vi, vj, Qi, C, ∆)

De geprogrammeerde m-files voor dit algoritme zijn opgenomen onder appendix B. Een een-voudige voorstelling in pseudo algoritme wordt hieronder weergegeven.

Gegevens:

∆ Set van de vijf δ-gewichten.Routering Een vector met reeds partieel toegekende 4n variabelen: xi, yi, yi en zi.Scenario Functie die nakijkt volgens welk scenario a, b of c een klant kan toegevoegd

worden aan de routering.vi Laatst bediende klant.vj Eerstvolgende te bedienen klant.Qi De voorraad in het voertuig na levering aan klant vi.C Verzameling van ongerouteerde klanten.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 28

Start Hr(Routering, vi, vj, Qi, C, ∆)

1. scenario← Scenario(vi, vj , Qi)

2. Routering ← Routering ∪ vj(scenario)

3. Qi ← Qi(scenario)− qj

4. C ← C \ vj

5. vi ← vj

6. while (C 6= ∅) do

7. besteWaarde←∞

8. besteKlant←∞

9. for each vj ∈ C

10. scenario∗ ← Scenario(vi, vj , Qi)

11. if (g(vi, vj , scenario∗) ≤ besteWaarde)

12. besteKlant← vj

13. besteWaarde← gj

14. scenario← scenario∗

15. q ← qj

16. end if

17. end for

18. Routering ← Routering ∪ besteKlant(scenario)

19. Qi ← Qi(scenario)− q

20. C ← C \ besteKlant

21. vi ← besteKlant

22. end while

23. return Routering

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 29

In regels 1-5 wordt vj in de routering opgenomen, zoals beschreven in paragraaf 3.1.1. Dewaarde scenario legt vast of de routering gebeurd via scenario a, b of c. Deze waarde be-paalt dan mee hoe Qi en Routering hun waarden toegewezen krijgen. In regels 6-22 wordtbeschreven hoe onder de niet-gerouteerde klanten gezocht wordt naar de klant met de kleinsteg-waarde. Deze klant, genoteerd als besteKlant wordt dan als eerstvolgende gerouteerd. Alsuiteindelijke output wordt de totale Routering gegeven.

3.2 Het Multi Tour Opbouwalgoritme Hc

In dit algoritme worden Multi Tours sequentieel opgebouwd. Gegeven een partiele routeringen een verzameling ongerouteerde klanten zal dit algoritme op zoek gaan naar de Multi Tourmet de kleinste kost. Hierbij maakt Hc gebruik van de Klantordenfunctie w(vi, C,W ). Dezefunctie genereert een verzameling van W ongerouteerde klanten die de kleinste gegenerali-seerde kost g(∆, vi, vj) hebben als vj als eerstvolgende in de routering opgenomen wordt. Devolledige routering wordt voor elk van de W klanten afgewerkt via het Ondersteunend Rou-teopbouwalgoritme Hr. Zodoende kan men deze ‘eenvoudig’ afgewerkte routes vergelijken ophun kost.

3.2.1 De Klantordenfunctie w(vi, C, W )

Deze functie heeft als input de laatst gerouteerde knoop vi, de verzameling C van onge-routeerde klanten en de waarde W die aangeeft hoeveel klantknopen gegenereerd dienen teworden als output. Zoals in vorige paragraaf wordt wederom voor elke ongerouteerde knoopgekeken wat de gegeneraliseerde kost g is om deze klant als eerstvolgende te routeren. Vooralle ongerouteerde klanten uit C wordt deze waarde bijgehouden. Op basis daarvan wordteen ranking gemaakt volgens deze gegeneraliseerde kosten. De W klantknopen met de minstekost vormen de output van deze functie. Indien er minder dan W klanten aanwezig zijn inverzameling C, dan worden er slechts | C | klanten als output gegeven.

De geprogrammeerde m-file om deze functie in Matlab op te roepen, is terug te vinden in deappendices onder sectie C.2.

3.2.2 Routering met behulp van Hr

De hierboven beschreven w-functie selecteert dus de knopen die volgens de generaliserendekostenfunctie g het meest geschikt zijn om als volgende klant gerouteerd te worden. Voorelk van deze min(W, | C |) knopen vervolledigt men de routering waarbij elke w-knoop eensals eerstvolgende knoop na de partiele Routering gerouteerd wordt. De resterende klantenna de routering van zo’n w-knoop worden dan gerouteerd met het Ondersteunend MultiTour Opbouwalgoritme Hr(Routering, vi, vj , Qi, C,∆ ) dat het principe van nearest neighbortoepast met behulp van de generalisernde kostenfunctie g.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 30

Er wordt dus een totale routering bekomen voor elke w-knoop die bestaat uit de reeds partieleRoutering die als input gegeven is, aangevuld met de routering van de w-knoop. Dit geheelwordt dan vervolledigd met behulp van het Ondersteunend Multi Tour Opbouwalgoritme Hr.

Zodoende bekomt men voor elk van deze w-knooppunten een volledige routering waarvaneen totale kostprijs berekend kan worden. De w-knoop waarvan de routering de kleinsterouteringskost heeft, wordt dan geselecteerd om als eerstvolgende in de initiele Routeringopgenomen te worden, waarna deze w-knoop verwijderd wordt uit de verzameling C vanongerouteerde klanten. (Opgelet, de totale routeringskost 6= generaliserende kost). De totalerouteringskost berekent men door rekening te houden met volgende kosten:

• cv, de dagelijkse kost per voertuig.

• cv, de kost per afgelegde kilometer.

• cv, de kost per minuut dat een Multi Tour duurt.

Dit principe om de beste klant te zoeken wordt toegepast tot de verzameling C van ongerou-teerde klanten leeg is. Dan zullen alle klanten opgenomen zijn in de routering.

3.2.3 Algoritme Hc(Wi, Routeringi, vi, Qi, Ci)

De geprogrammeerde m-files die de werking van dit algoritme verzekeren, kunnen teruggevon-den worden in appendix C. Hieronder volgt een eenvoudige voorstelling als pseudo algoritme.

Gegevens:

Ω Set van ∆’s die elk vijf δ-gewichten beschrijven.n Het aantal klanten.Routeringskost Functie die de kost berekent van een totale routering.W Parameter die aangeeft hoeveel knopen de functie w zal genereren.Ci Verzameling van ongerouteerde klanten.Qi Initiele hoeveelheid lading in het voertuig.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 31

Start Hc(Wi, Routeringi, vi, Qi, Ci)

1. Prijs←∞

2. for each ∆ ∈ Ω

3. besteOpvolger ← 0

4. Q← Qi

5. C ← Ci

6. start← vi

7. while(C 6= ∅)

8. W = min(W, | C |)

9. C∗ ← w(start, C,W )

10. laagsteKost←∞

11. for each vj ∈ C∗

12. if [Routeringskost(Hr(Routering, start, vj , Q,C,∆ ))) < laagsteKost]

13. laagsteKost←Routeringskost(Hr(Routering, start, vj , Q,C,∆ )))

14. besteOpvolger ← vj

15. end if

16. end for

17. C ← C \ besteOpvolger

18. Routering∗ ← Routeringi ∪ besteOpvolger(scenario)

19. start← besteOpvolger

20. Q← Q(scenario)− qj

21. end while

22. if (Routeringskost(Routering∗) < Prijs)

23. Prijs← Routeringskost(Routering∗)

24. Routering ← Routering∗

25. end for

26. return Routering

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 32

Op regel 2 start een for-lus die ervoor zorgt dat er meerdere ∆’s doorlopen worden, zodanigdat voor elke iteratie van deze lus de Routering gebeurt met een verschillende generaliserendefunctie g. Vervolgens zorgen regels 3-6 ervoor dat voor elke nieuwe set δ-waarden de initielecondities terug hersteld worden. De while-lus in regels 7-21 beschrijft de routeringsprocedurezoals ze in voorgaande paragrafen beschreven werd. Telkenmale genereert de w-functie eenaantal klanten die het best geschikt zijn om als volgende klant te routeren. Afhankelijkvan de totale routekost die routering met Hr oplevert, wordt dan beslist welke vj men alseerstvolgende routeert.

De input data kunnen een lege Routering bevatten waarbij startknoop vi gelijkgesteld wordtaan het depot en de vrachtwagen leeg verondersteld wordt. In dat geval wordt van ’niets’een hele routering opgebouwd. Het is echter ook mogelijk, zoals zal blijken in sectie 3.3, datRoutering reeds een gedeeltelijke routering bevat en dat Hc deze verder moet uitbouwen.

3.3 Het Multi Tour Verbeteringsalgoritme Hv

Het Multi Tour Verbeteringsalgoritme is er op gericht de minst goede Multi Tours te ver-beteren. Met behulp van de Multi Tour Ordenfunctie k worden de Multi Tours geordendvolgens bepaalde criteria. De beste Multi Tour behoudt men. De klanten die in de overigeMulti Tours zitten, worden dan opnieuw gerouteerd met algoritme Hc. Is deze herrouteringgoedkoper dan de oorspronkelijke routering, dan wordt deze routering behouden. Anderswordt er verder gegaan met de oorspronkelijke routering. In elke volgende iteratie wordende Multi Tours wederom gerangschikt door de k -functie. Telkens weerhoudt men een MultiTour meer van het herrouteringsproces. In de eerste iteratie wordt er dus getracht r-1 MultiTours te herrouteren (met r het aantal Multi Tours in de routering), in de tweede iteratie r-2(met r het aantal Multi Tours in die routering), ... Dit proces gaat door tot men uiteindelijkeen Multi Tour overhoudt. Dan stop het algoritme. Het uiteindelijke doel is om door deverschillende iteraties een goedkopere routering te bekomen.

De afbeelding hieronder weergegeven beeldt de werking van het algoritme uit. Onder deafbeelding wordt het proces nog eens beschreven.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 33

Figuur 3.1: Voorbeeld van de werking van Hv. Multi Tours in rood weergegeven zijn niet meerbeschikbaar voor herroutering.

Stel dat er 6 Multi Tours zijn: a, b, c, d, e & f. Deze worden door de k-functie geordendvolgens bepaalde criteria. Het resultaat wordt weergegeven in box 2. De beste presterendeMulti Tour is e. Deze wordt uit het herrouteringsproces gehouden (in rood weergegeven).De overige 5 Multi Tours worden wel geherrouteerd wat resulteert in box 3. Nu zijn er tweemogelijkheden: als de nieuwe routering goedkoper is dan de oorspronkelijke wordt lijn a-lijngekozen, in het andere geval lijn b. Na deze keuze start een nieuwe iteratie van het Hv-algoritme. De k-functie ordent wederom de niet-rode Multi Tours. Na deze ordening wordtde best presterende Multi Tour ook rood gemaakt, wat dus een tweede rode Multi Touroplevert. De vier overige Multi Tours worden geherrouteerd... waarbij de cyclus dus opnieuwdoorlopen wordt.

Bij de overgang van 5b naar 6b zien we dat het herrouteringsproces zodanig verlopen is dater een Multi Tour verdwenen is. Dit houdt in dat er een vrachtwagen minder moet rijden. Inde overgang erna zal dan moeten blijken of deze herroutering goedkoper is dan de vorige.

3.3.1 De Multi Tour Ordenfunctie k(Routering −R)

De functie heeft als input de routering ‘Routering’ waarvan de verzameling niet-herrouteerbareklanten R verminderd wordt. Uit de Multi Tours die de overige klanten vormen wordt dan

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 34

een ordening gemaakt volgens bepaalde criteria. De beste presterende Multi Tour wordt alsoutput terug gegeven.

Zoals hierboven vermeld is, worden de Multi Tours geordend volgens bepaalde criteria. Dezecriteria moeten weergeven dat een Multi Tour nog mogelijkheden heeft tot verbetering. Vol-gende criteria worden beschouwd:

• routeduur

• aantal klanten in een Multi Tour

•∑

(ladingsoverschot in voertuig na subroute)/klanten in Multi Tour

• (routeafstand)−1

• geografische nabijheid

Uit talrijke experimenten bleek dat de beste resultaten bekomen werden met routeduur. Vrijlogisch, omdat als een lege vrachtwagen door herbevoorrading terug de baan op kan, is het bestdat een Multi Tour zolang mogelijk klanten blijft bevoorraden. Hierdoor kan een vrachtwagendie al na 1uur leveren leeg is, toch nog terug de baan op. Doel is dan ook de routeduur zo langmogelijk te maken, zodanig dat het gebruik van extra vrachtwagens vermeden kan worden.Lange routes hebben een hogere routeduurkost, maar door de g-functie wordt verzekerd datde duur van de route nuttig besteed wordt.

Een rangschikking waarbij rekening gehouden wordt met de geografische middelpunten vande Multi Tours leek mij niet geschikt. Multi Tours kunnen zodanig opgesteld zijn dat eenbepaalde subroute zich afspeelt in een geografische zone en de andere subroute van dezelfdeMulti Tour zich in een totaal verschillende geografische zone afspeelt. Het geografische mid-delpunt van deze twee subroutes levert dan niet veel informatie op.

Ordenen volgens omgekeerde routeafstand wordt eveneens niet toegepast. Een zeer functioneleMulti Tour die enkele ‘verre’ klanten heeft, zou dan steeds in het herrouteringsproces vallen,hoewel deze Multi Tour heel efficient werkt.

3.3.2 Algoritme Hv(Routering, W )

De m-files ‘k.m’ en ‘Hv.m’ die instaan voor het Multi Tour Verbeteringsalgoritme zijn terugte vinden in appendix D.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 35

Hieronder volgt een eenvoudige voorstelling als pseudo algoritme.

Gegevens:

Routering Een volledig opgestelde Routering.n Het aantal klanten.Routeringskost Functie die de kost berekent van een totale routering.W Parameter die aangeeft hoeveel knopen de functie w zal genereren.C Verzameling van klanten geschikt voor herroutering.R Verzameling van Multi Tours die niet meer voor herroutering in aan-

merking komen.| Routering | Aantal Multi Tours in de routering Routering.S Multi Tour die best presteert.

Start Hv(Routering, W )

1. C ← 1, ..., n

2. Routering∗ ← Routering

3. Prijs← Routeringskost(Routering)

4. R←

5. while (| Routering \R |> 1)

6. S ← k(Routering \R)

7. C ← C \ S

8. R← R ∪ S

9. Routering∗ ← Hc(W,Routering, 0, 0, C)

10. if(Routeringskost(Routering∗) < Prijs)

11. Prijs← Routeringskost(Routering∗)

12. Routerings← Routerings∗

13. end if

14. end while

In regel 1 zijn alle klanten nog beschikbaar voor herroutering. De while-lus blijft lopen zolanger meer dan een Multi Tour geherrouteerd kan worden. Een Mulit Tour wordt dus niet

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 36

meer geherrouteerd. In regel 6 zal de output van de k-functie de Multi Tour zijn die hetbest presteert op de criteria. In regel 7 worden de klanten uit deze Multi Tour vrijgesteldvan herroutering. Regel 9 zorgt ervoor dat de klanten die nog in aanmerking komen voorherroutering opnieuw in het Hc-algoritme gestoken worden. De if -voorwaarde kijkt dan naof de herroutering een goedkoper resultaat gegenereerd heeft. Zoja, dan wordt de herrouteringdefinitief aangepast en start een volgende run van de while-lus.

3.4 Resultaten

Figliozzi past zijn model toe op de databanken van Solomon (14). Deze databanken bevatten6 soorten problemen waarbij gevarieerd wordt met Time Windows en met de klantlocaties(Random verspreide tegenover klanten die in cluster liggen). Solomons model minimaliseerdeenkel de afstand. Het model in deze thesis met tijdsafhankelijke reistijden, Multi Tours eneen andere kostenfunctie tracht andere doelstellingen te bereiken. Vergelijkingen zijn danook zeer moeilijk te maken. Bijvoorbeeld, het model in deze thesis maakt herbevoorradingmogelijk, daarom kan de maximumcapaciteit van de vrachtwagens kleiner gekozen wordendan in Solomons model. Maar hoe klein? Hoe kunnen de tijdstipafhankelijke reistijden in ditmodel vergeleken worden met de niet-tijdstipafhankelijke reistijden in Solomons werk?

Daarom wordt ervoor gekozen een eigen, levensecht voorbeeld uit te werken in volgendeparagrafen, gebaseerd op het distributienet van winkelketen Colruyt ®.

3.4.1 Gegevens

Klantlocaties

Er wordt gekozen voor de winkelketen Colruyt. Deze succesvolle onderneming heeft vesti-gingen in heel het land. Om de oplossing overzichtelijk te houden wordt gekozen voor dewinkels in Oost- en West-Vlaanderen. Deze 55 winkels worden in onderstaande afbeeldingweergegeven.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 37

Figuur 3.2: De verspreiding van de winkels van Colruyt in Oost- en West-Vlaanderen.

Colruyt beschikt over drie distributiecentra in Belgie die gelegen zijn in Halle, Gellingenen Beersel. Deze drie centra liggen rond Brussel, zodat ze centraal genoeg liggen om hethele land te bevoorraden. Omdat dit een Single Depot Vehicle Routing Problem betreftwordt er gekozen voor een centrum, namelijk dat in Gellingen. Deze depot is voornamelijkgespecialiseerd in de verdeling van allerlei soorten dranken. Het depot wordt weergegeven opbovenstaande afbeelding door het logo van Colruyt.

De exacte posities van de winkels werden achterhaald via de Belgische Lambert 72-coordinatendie beschikbaar waren via de website http://geo-vlaanderen.agiv.be/geo-vlaanderen/

kleurenortho/ (1).

Time Windows

Colruyt herbevoorraadt zijn winkels voornamelijk ’s nachts. De wegen zijn dan rustiger enfiles kunnen zo vermeden worden. In winkels in een stedelijke omgeving wordt wel overdaggeleverd om de buurtbewoners geen hinder te bezorgen (2). In deze opgave wordt er welvanuit gegaan dat er overdag geleverd kan worden.

Redenen voor Time Windows zijn o.a. strikte levertijden in stedelijke omgevingen, leverenvoor 10u, leveren na 16u, drukte spreiden over heel de dag, ... Er wordt in deze opdracht

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 38

vanuit gegaan dat de Service Time Windows zeer gevarieerd zijn, zoals blijkt uit tabel 3.5.

Er wordt nagekeken of de Time Windows wel feasible zijn. Het moet dus mogelijk zijn ommet een vrachtwagen de klant te bedienen binnen zijn Time Window en tijdig terug te kunnenzijn in het depot alvorens dit sluit op tijdstip YTH . Het Time Window mag dus niet te vroegsluiten, of te laat openen. Voor het depot geldt Y0 = 420′ en YTH = 1005.

Vraag

De vraag van de klanten wordt random bepaald. Deze hoeveelheden zijn terug te vinden intabel 3.5.

De waarde qmax hangt nauw samen met de qi-waarden. Om het principe van Multi Tourste benadrukken, wordt de waarde van de maximale laadcapaciteit niet te groot genomen,namelijk qmax = 50.

Parameters

Voor de δ-waarden heb ik contact opgenomen met M. Figliozzi om te zien welke waarden ikals richtlijn kan gebruiken. Zoals reeds verteld moet δ1 +δ2 +δ3 = 1 en is δ4 van dezelfde ordeals de voorgaande δ’s. δ5 daarentegen is hoog, want een extra voertuig in de routering trachtmen te vermijden. Het algoritme Hc is zondanig opgesteld dat het meermaals doorlopenwordt voor verschillende ∆-sets.

De kostenfunctie wordt bepaald door drie parameters. Hiervoor heb ik contact opgenomen metde dienst Logistiek van Colruyt. De heer Guy Walravens liet mij weten welke kostparametersze hanteren bij Colruyt.

• Kost per kilometer: cd = e 1, 5/km

• Bruto uurloon chauffeur: ct = (e 10, 58+ e 1, 09)/uur = e 0, 1945/min

• Dagelijkse kost om vrachtwagen in te zetten: cv = e 470

De e 1, 09 in de loonkost bedraagt de ARAB-vergoeding. Deze wordt uitgekeerd aan niet-sedentaire werknemers om hen tegemoet te komen in kosten die ze maken doordat ze nietbeschikken over sanitair en eetgelegenheid (wasplaats, refters, toiletten, dranken, ...).

De W -waarde bepaalt hoe uitgebreid de algoritmes te werk gaan in hun zoektocht naar devolgende klant om te routeren. De invloed van deze W wordt weergegeven in de oplossingen.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 39

1 2 3 4 5 6 7 8 9 10 11

ei 400 800 650 700 820 500 500 420 420 420 620li 525 900 655 1000 840 600 800 600 905 1005 1005qi 16 10 8 3 10 5 12 50 6 12 14

12 13 14 15 16 17 18 19 20 21 22

ei 420 420 820 420 420 400 720 800 420 420 420li 1005 705 1005 605 1005 1005 1005 1005 905 1005 1005qi 21 7 14 3 9 8 7 16 13 18 11

23 24 25 26 27 28 29 30 31 32 33

ei 420 720 720 620 420 420 420 420 420 420 420li 1005 1005 780 905 1005 1005 1005 1005 1005 1005 1005qi 11 9 9 15 8 19 9 6 1 12 4

34 35 36 37 38 39 40 41 42 43 44

ei 520 420 750 420 420 420 420 420 420 420 700li 1005 705 1005 705 1005 905 1005 600 680 1005 1000qi 4 9 19 19 12 41 18 22 6 21 30

45 46 47 48 49 50 51 52 53 54 55

ei 420 420 420 440 320 520 620 420 420 500 420li 605 600 1000 1005 1005 905 1005 805 900 600 800qi 12 32 46 12 14 21 7 4 13 9 8

Tabel 3.5: Overzicht van de Time Windows en hoeveelheid vraag voor de 55 winkels.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 40

3.4.2 Oplossingen

Nu worden er via Hc oplossingen gegenereerd voor verschillende W -waarden. Vervolgenswordt getracht deze oplossingen te verbeteren door middel van Hv(Hc, W )). Dit verbete-ringsalgoritme wordt toegepast voor een W -waarde van 6 omdat uit de Hv-runs bleek datdit goede resultaten levert. Onder de kosten van de routering staat de tijd weergegeven dienodig is om de oplossing te bekomen. De runs werden uitgevoerd op een MacBook Pro met2.2 GHz Intel Core 2 Duo processor.

W 1 3 5 7 9

Hc(W ) e 13812 e 12523 e 12350 e 12316 e 12477(0’47”) (2’09”) (3’32”) (4’58”) (6’22”)

Hv(Hc(W ), 6) e 12490 e 12374 e 12322 e 12275 e 12265(4’06”) (6’49”) (7’06”) (7’17”) (7’03”)

Tabel 3.6: Kosten van de routeringen Hc(W ), en hun verbeteringen Hv(W )

De beste oplossing wordt bekomen na verbetering van de herroutering van Hc(9). Als Wgroter wordt, wordt er uitgebreider gezocht, en stijgt de looptijd van het algoritme. Toch valtte zien aan de kostfunctie dat een hogere W -waarde niet steeds een betere oplossing oplevert.Voor runs op andere routeringsproblemen met 50-100 klanten bleek steeds dat een W -waardevan 5 tot 7 de beste resultaten levert.

Bij Hc(1) wordt slechts 1 w-knoop verder onderzocht. Deze knoop zal dan steeds gekozenworden. Dit komt dus neer op de oplossing met het Nearest Neighbor algoritme. De waardenbekomen met hogere W -waarden leveren dus duidelijk betere resultaten op.

Details van de beste oplossing Hv(Hc(9), 6)worden afgebeeld in volgende figuur. Het Collect-commando geeft een matrixvoorstelling van de Multi Tours. Elke rij stelt een Multi Tourvoor. Een grafische voorstelling van de routering volgt in de figuur erna.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 41

Figuur 3.3: Printscreen van de oplossing in Matlab.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 42

Figuur 3.4: Grafische voorstelling van de routering.

Hoofdstuk 3. Het Iteratieve Multi Tour Opbouw- en Verbeteringsalgoritme 43

Door de zeer varierende Time Windows is de routering zeer hectisch en worden er veel kilo-meters gereden.

Routeringen met veel Multi Tours na Hc hebben een grotere kans om met flinke stappen teverbeteren tijdens Hv omdat de kans groter is dat twee of meerdere Multi Tours versmeltentot een Multi Tour.

Hoofdstuk 4

Model onderworpen aan rij- en

rusttijdreglementering

4.1 Rij-en rusttijden

4.1.1 Doel van de rij- en rusttijden

De invoering van de digitale tachograaf baseert zich op vier doelstellingen:

• de verkeersveiligheid verhogen

• de arbeidsvoorwaarden van de bestuurders verbeteren

• de eerlijke concurrentie bevorderen

• het beheer van de ondernemingen vereenvoudigen

4.1.2 Rij- en rusttijdreglementering

De rij- en rusttijdreglementering is door de Europese Unie gewijzigd op 15 maart 2006.Deze wetswijziging is terug te vinden in Verordening (EG) nr. 561/2006 van het EuropeesParlement en de Raad (11). Deze verordening trad in werking op 11 april 2007. Hier-onder wordt de wetgeving weergegeven zoals beschreven op de site van Digitach, http:

//www.digitach.be/NL/PDF/presn.pdf, opgericht door de Federale Overheidsdienst Mo-biliteit en Vervoer (5).

De bepalingen inzake rij- en rusttijden van Verordening (EG) 561/2006 zijn van toepassing opiedere verplaatsing die geheel of gedeeltelijk plaatsvindt op wegen die voor openbaar gebruiktoegankelijk zijn, zowel in lege als in geladen toestand door een voertuig bestemd voor:

• vervoer van goederen waarbij de toegestane maximummassa van de voertuigen, aan-hangwagens en opleggers inbegrepen, meer dan 3,5 ton bedraagt.

44

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 45

• vervoer van personen door voertuigen die zijn gebouwd of permanent zijn toegerust ommeer dan 9 personen, bestuurder inbegrepen, te kunnen vervoeren en daartoe bestemdzijn.

Dagelijkse rijtijd

Dagelijkse rijtijd is de totale bij elkaar opgetelde rijtijd tussen het einde van de ene dagelijkserusttijd en het begin van een volgende dagelijkse rusttijd of tussen een dagelijkse rusttijd eneen wekelijkse rusttijd. Deze mag niet meer bedragen dan 9 uur. Tweemaal per week magdeze verlengd worden tot 10 uur.

Vervolgens zijn er ook nog restricties op de wekelijkse en tweewekelijkse rijtijd. Deze zijn nietvan toepassing op dit VRP probleem met een Time Horizon van een werkdag. Daarom zijndeze niet opgenomen in deze paragraaf.

Onderbreking van de rijtijd

Na een rijperiode van 4 uur 30 minuten moet de chauffeur een aaneengesloten onderbrekingvan tenminste 45 minuten in acht nemen, tenzij hij aan een rusttijd begint.

Rijperiode: De bij elkaar opgetelde rijtijden vanaf het ogenblik dat een be-stuurder begint te rijden na een rusttijd of een onderbreking totdat hij eenrusttijd of onderbreking neemt. Een rijperiode kan al dan niet onderbrokenworden.

Onderbreking: Elke periode waarin de bestuurder niet mag rijden en ookgeen andere werkzaamheden mag verrichten en die uitsluitend dient om te rus-ten. Dit betekent dus dat laden en lossen niet als onderbreking beschouwdworden.

Rusttijd: Elke periode waarin de bestuurder zijn dagtaak gedaan is, en hetvoertuig voor een langere tijd aan de kant laat. Een werkdag start na een russ-tijd en eindigt met een rusttijd.

Hieronder worden enkele correcte werkschema’s afgebeeld. Wanneer een onderbreking 45 mi-nuten of langer duurt, vindt er na deze onderbreking een ‘reset’ plaats. De rijduur wordtterug op 0 minuten geplaatst. Na deze ‘reset’ kan er in principe terug 4 uur en 30 minuten

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 46

ononderbroken gereden worden (op voorwaarde dat de 9 uur dagelijkse rijtijd niet overschre-den wordt.) Zo’n ‘reset’ wordt aangeduid door een dikke, rode streep in de afbeeldingenhieronder. Tussen elke twee rode strepen mag er maximaal 4 uur en 30 minuten rijtijd zitten.

Figuur 4.1: Voorbeeld van enkele reguliere rij- en rusttijden met gehele onderbreking.

De aaneengesloten onderbreking van 45 minuten kan evenwel vervangen worden door eeneerste onderbreking van TEN MINSTE 15 minuten, gevolgd door een tweede onderbrekingvan TEN MINSTE 30 minuten. Beide onderbrekingen moeten elk zodanig tijdens de peri-ode worden ingelast dat na een rij-periode van 4 uur 30 een onderbreking van ten minste 45minuten in acht genomen is. Bij de opsplitsing in twee onderbrekingen moet de laatste onder-breking zeker langer duren dan 30 minuten. Wanneer de eerste onderbreking 30 minuten zoubedragen (correct, want langer dan 15 minuten) dan moet de tweede onderbreking nog steeds30 minuten bedragen (correct, want langer dan 30 minuten). De gecumuleerde onderbrekingbedraagt dan wel 60 minuten.

Wederom volgen nu enkele correcte werkschema’s. (Gecumuleerde) ‘resets’ worden wederommet een dikke, rode streep aangegeven.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 47

Figuur 4.2: Voorbeeld van enkele reguliere rij- en rusttijden met gesplitste onderbreking.

Hieronder volgen nog enkele niet-reguliere werkschema’s. De fouten in het schema zijn devolgende:

1. De tweede onderbreking is 25 minuten te kort.

2. De eerste twee rijperiodes overschrijden de 4 uur en 30 minuten alvorens de tweedeonderbreking aanbreekt.

3. De twee rijperiodes na de laatste reset overschrijden de 4 uur en 30 minuten met hungecumuleerde waarde van 7 uur en 30 minuten.

4. Er is geen tweede opgesplitste onderbreking die minstens 30 minuten bedraagt.

Figuur 4.3: Voorbeeld van enkele NIET-reguliere rij- en rusttijden.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 48

4.1.3 Tachograaf

De naleving van de wetgeving wordt gecontroleerd door middel van een digitale tachograaf.Dit toestel met de grootte van een autoradio is verbonden met een bewegingsopnemer. Het isuitgerust met een geheugen, een leesvenster, een connector voor gegevensoverbrenging, tweekaartenlezers en een printer.

Het toestel werkt in combinatie met digitale tachograafkaarten. Het registreert de rij- enrusttijden van de bestuurder, die ogenblikkelijk in het leesvenster af te lezen zijn. Driegeheime sleutels verzekeren de beveiliging van de registratie en de bewaring van de gegevens.

Elke digitale tachograaf is volkomen interoperabel. Alle tachograafkaarten kunnen in elkapparaat gebruikt worden, wat ook het merk ervan weze.

De tachograaf dient tot het registreren van verschillende gegevens: rij- en rusttijden, snelheidvan het voertuig en afgelegde afstand. De gegevens worden opgeslagen in het geheugen van hetapparaat; dit geheugen bewaart de gegevens van tenminste 365 kalenderdagen met betrekkingtot het voertuig en alle opeenvolgende bestuurders van dit voertuig tijdens deze periode.

De bestuurderskaart bewaart de gegevens betreffende de rij- en rusttijden van de chauffeurover een minimale periode van 28 dagen.

De digitale tachograaf bevat eveneens een snelheidsmeter die toelaat de door het voertuigontwikkelde snelheid per seconde en over de laatste 24 uur te registreren (deze meting kan vanbelang zijn voor, bijvoorbeeld, een ongevalanalyse) evenals de registratie van de overschrijdinggedurende meer dan een minuut van de instelsnelheid van de snelheidsbegrenzer.

Het vervoersbedrijf kan, met behulp van de eigen bedrijfskaart, alle in het geheugen van dedigitale tachograaf opgeslagen gegevens downloaden of uitprinten teneinde een gegevensbe-stand te vormen die interne controles moet toelaten. Dergelijke gegevensbank kan eveneenseen belangrijk hulpmiddel voor een efficient bedrijfsbeheer zijn (9).

4.2 Aanpassen yj en aj aan de rij-en rusttijden

4.2.1 Benamingen

Voor de aanpassing van de algoritmes wordt er uitgegaan van maximaal 9u rijtijd per dag.Deze 9 uren vereisen de nodige onderbreking(en). Laten we voor het model ervan uit gaan datde werkdag start om 7u00 (Y0) en eindigt om 16u45 (YTH). De chauffeur kan dan maximaal9u reglementair rijden.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 49

Gecumuleerde Rijtijd (GRT)

Tussen twee resets worden alle rijtijden opgeteld. De rijtijd na een knooppunt vi wordt bere-kend door voor dit knooppunt de servicetijd gi en de reistijd tij op te tellen. De GecumuleerdeRijtijd (GRT) op een tijdstip t telt de rijtijden op tussen de laatste reset en het tijdstip t.Zodanig kan door middel van de GRT nagekeken worden dat de 270’-grens voor rijtijd nietoverschreden wordt. Wanneer er een volgende reset plaatsvindt, wordt de waarde GRT terugop 0 gesteld.

Gecumulueerde Onderbrekingstijd (GOT)

Hierboven werd reeds aangehaald dat onderbrekingen opgesplitst mogen worden. De regelsdaarvoor zijn beschreven in paragraaf 4.1.2. Er moet dus bijgehouden worden hoeveel onder-brekingstijd al reglementair opgenomen is. De Gecumuleerde Onderbrekingstijd (GOT) opeen tijdstip t telt de reglementair opgenomen onderbrekingstijden op tussen de laatste reseten het tijdstip t.

Verplichte Onderbreking (VO)

Een chauffeur kan geconfronteerd worden met twee soorten onderbrekingen. Een daarvanis de Verplichte Onderbreking (VO) die tijdens of na het transport plaatsvindt en die moetvermijden dat de 4 uren en 30 minuten Gecumuleerde Rijtijd niet overschreden wordt. Dezeonderbrekingen hebben dus als functie een ‘reset’ te creeeren zodanig dat er geen overtredingenworden gemaakt.

Wachtonderbreking (WO)

Een tweede soort oponthoud vindt plaats op klantlocatie. De chauffeur moet bij een klantwachten tot het Service Time Window opengaat.

Deze wachttijden kunnen meetellen als onderbreking op twee manieren:

• een eerste wachtonderbreking na een reset die langer duurt dan 15 minuten.

• een wachtonderbreking na een geslaagde eerste wachtonderbreking duurt langer dan 30minuten. (waarbij de eerste wachtonderbreking (< 45′) nog geen reset heeft kunnenbereiken)

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 50

Figuur 4.4: Schema dat de weergeeft hoe een reset bereikt kan worden.

Hierboven wordt weergegeven hoe een ‘reset’ bereikt kan worden. VO stelt een verplichteonderbreking voor en WO een wachtondebreking. Een verplichte onderbreking treedt enkelop in laatste instantie om rijtijdoverschrijding te vermijden.

In hoofdstuk 2, paragraaf 2.3, werd ervoor gezorgd dat bij de eerste klant van een subroutenooit gewacht moest worden op de opening van het Service Time Window. De wachttijdwerd niet opgenomen op klantlocatie, maar wel in het depot. Zodoende kon de chauffeur zichnuttig bezighouden in het depot in plaats van nutteloos op klantlocatie te staan wachten.

In dit hoofdstuk geldt dit enkel nog voor de allereerste klant van een Multi Tour, want zowordt de rijtijd van de Multi Tour automatisch verkort. De Multi Tour start dan op tijdstipyj = max(ej − t0j − g0, Y0), waardoor bij sommige Time Windows tijd bespaard kan worden.

Voor de eerste klant na een herbevoorrading is dit niet meer geldig. De reden hiervoor isdat de wachttijden zeer flexibel moeten zijn, zodat zo efficient mogelijk gereden kan worden.Het principe dat hier toegepast wordt is: ”neem een reset zoveel mogelijk naar achteren in detijd op”. Een reset die later valt heeft meer kans om de resterende rijtijd te coveren, terwijl

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 51

bij een vroegere reset de mogelijkheid bestaat dat de rijtijd toch nog de 4u30’ overschrijdt.Figuur 4.2.1 toont dit aan. In de bovenste, foute versie wordt de wachttijd opgenomen inhet depot. Hierdoor is er later op de dag nog een VO nodig om te voldoen aan de rij- enrusttijdreglementatie. In het onderste, correcte geval wordt de wachttijd doorgeschoven naarde klantlocatie. Doordat de reset nu later valt, is het niet meer nodig een extra VO in telassen.

Figuur 4.5: Verduidelijking van de startprocedure uit het depot. De donkergroene balk stelt hetTime Window voor van klant vj .

4.2.2 Werking van het T ijd-algoritme

Er wordt gebruik gemaakt van het algoritme T ijd om het voorgaande model aan te passenaan het model met rij- en rusttijden. De algoritmes beschreven in hoofdstuk 3 maken allengebruik van de variabelen aj en yj . In het nieuwe model worden deze waarden berekend,rekening houdend met de GRT en GOT die voor knooppunt vj gelden.

Het T ijd-algoritme is in geprogrammeerde vorm terug te vinden in de appendix E. Bijgevoegdzit een aanpassing van de Hr.m file aan dit T ijd-algoritme. Enkele andere algoritmes hebbengelijkaardige aanpassingen als Hr.m nodig, maar deze aangepaste m-files zijn niet opgenomenin de appendices.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 52

Hieronder wordt in een schema de werking van het algoritme weergegeven. Als input wordter gebruik gemaakt van GRTi en GOTi op het tijdstip yi. Daaruit worden dan het aankomst-tijdstip aj en het service starttijdstip yj berekend. GRTj en GOTj op tijdstip yj vormen hetandere deel van de output.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 53

Figuur 4.6: Schema dat de werking van het Tijd-algoritme weergeeft.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 54

De verschillende mogelijkheden uit het schema worden nu overlopen:

• GRTi + gi + tij ≥ 270′

In eerste instantie wordt er nagegaan of er tijdens de reistijd tij reeds een overschrijding vande GRT -grens plaatsvindt. Is dit het geval dan moet deze overschrijding vermeden wordendoor een Verplichte Onderbreking op het moment dat GRT = 270′. Een eerst reistijd t∗ijstart op yi + gi en eindigt op het moment dat GRT = 270′. Vervolgens vindt een VO plaatsdie afhankelijk van GOTi 30 of 45 minuten bedraagt. Na deze VO wordt de resterendeafstand tussen vi en vj afgelegd. De reistijd t∗∗ij is tijdstipafhankelijk van het startmomentyi + gi + t∗ij + V O. De afbeelding hieronder geeft een schets van de overtreding. Links wordtde overtreding afgebeeld, rechts worden de twee GOT -afhankelijke oplossingen weergegeven.

Figuur 4.7: Verduidelijking indien GRT-grens overschreden wordt gedurende tij .

Na de reistijd t∗∗ij kan het nog voorvallen dat er een wachttijd yj−aj plaatsvindt. Afhankelijkvan de grootte van die wachttijd worden GRT en GOT bepaald.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 55

• (yj − aj ≥ 45′) ∨ [(yj − aj ≥ 30′) ∧ (GOTi = 15′)]

Indien de eerste GRT -overtreding niet van toepassing is wordt er verder gekeken naar dewachttijd yj − aj . Deze wachttijd vindt plaats omdat er gewacht moet worden op de openingvan het Service Time Window. De wachtonderbrekingen in de twee bovenstaande disjunctenleiden allebei tot een reset.

Figuur 4.8: Een wachtonderbreking vindt plaats omdat gewacht moet worden op de opening van hetTime Window.

• GRTi + gi + tij + gj ≥ 270′

Indien de voorgaande gevallen niet van toepassing zijn, is het niet meer mogelijk dat eenwachttijd in staat is een reset uit te voeren. De nog niet nader bekeken (wachttijd-GOTi)combinaties zijn enkel in staat om de GOTj aan te passen. Daarom wordt een VO ingeroepenom te vermijden dat de GRT groter wordt dan 270 minuten .

Figuur 4.9: Verduidelijking indien GRT-grens overschreden wordt tijdens servicetijd gj .

In bovenstaande figuur wordt links een routering getoond waarin de 270 minuten grens over-schreden wordt terwijl men bezig is het voertuig te lossen op locatie vj . Nu is het zeeronprofessioneel om een rustpauze in te lassen terwijl men aan het lossen is bij de klant. Dusom te vermijden dat er gerust wordt tijdens het lossen bij de klant, moet de reset plaatsvindenvoor er aan de service bij de klant wordt begonnen. De Verplichte Onderbreking wordt danopgenomen na de reistijd tij . Dit is te zien rechts in bovenstaande afbeelding.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 56

• yj − aj ≥ 15′

Als alle voorgaande gevallen niet van toepassing zijn, wordt uiteindelijk rekening gehoudenmet de overige (wachttijd-GOTi) combinaties. Indien yj − aj ≥ 15′ dan wordt GOTj = 15′,anders blijft GOTj = 0′.

4.3 Voorbeeld

‘Hc1.m’ is een versie van ‘Hc.m’ aangepast aan de rij- en rusttijden. Het algoritme wordthieronder uitgevoerd voor 10 klanten. In onderstaande print screen uit Matlab ziet u onderTimeWindows een matrix die de onder- en bovengrens van de windows weergeven. Demandstelt de vraag voor van de klanten. qmax is in deze voorbeeldoefening gelijkgesteld aan 50.Vervolgens wordt het algoritme opgeroepen, waarbij W = 4 en Route een lege routeringvoorstelt.

De oplossing A wordt bekomen. De eerste rij stelt de indices i van de klanten voor, de tweederij stelt xi voor, de derde rij yi, de vierde rij yi en de vijfde rij stelt zi voor.

Collect stelt de oplossing voor onder matrixvorm waarbij elke rij een Multi Tour voorstelt.

Figuur 4.10: Oplossing van Hc1.m voor n = 10.

De Multi Tour startend naar klant v1 wordt van nabij bekeken in onderstaande tabel. Er vindt

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 57

een reset plaats wanneer klant v3 bezocht wordt. Dit omwille van de wachtonderbreking dielanger duurt dan 45 minuten.

i 1 3 6 11

ai 496.6667 564.4013 777.8668 850.6924yi 496.6667 650 800 850.6924yi − ai 0 85.5987 22.1332 0GRTi 76.6667 0 127.8668 178.5592GOTi 0 0 15 15

Vervolgens wordt een volgende Multi Tour bekeken. Bij klant v9 loopt de wachtonderbrekingop tot 41.9764 minuten. Hierdoor wordt GOT = 15. Tijdens de reistijd t10 2 wordt GRTgelijk aan 270’ op het tijdstip 749.0738. Omdat GOT op dat moment 15 minuten bedraagt,moet er een verplichte onderbreking gehouden worden van 30 minuten. Vervolgens wordt ophet tijdstip 779.0738 de tijdstipafhankelijke reistijd t∗∗10 2 berekend voor de resterende afstand.Na aankomst bij klant v2 moet nog 15.7030 minuten gewacht worden alvorens de service kanstarten. Vandaar dat GRT wederom 15’ bedraagt.

i 7 9 5 10 2 11 4 11

ai 500 528.0236 607.2008 685.8926 784.2970 910.8202 954.4541 1001.8000yi 500 570 607.2008 685.8926 800 910.8202 954.4541 1001.8000yi − ai 0 41.9764 0 0 15.7030 0 0 0GRTi 62.9026 90.9262 128.1270 206.8188 0 110.8202 154.4541 201.8148GOTi 0 15 15 15 15 15 15 15

Onderstaande figuur toont hoe de drie Multi Tours verlopen. Elke kleur stelt een Multi Tourvoor.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 58

Figuur 4.11: Grafiche voorstelling van de oplossing voor n = 10.

4.4 Resultaten

W 5 7

Hc(W ) e 12350 e 12316(3’32”) (4’58”)

Hc1(W ) e 12990 e 13129(20’09”) (22’53”)

Hv(Hc(W ), 6) e 12322 e 12275(7’06”) (7’17”)

Hv1(Hc(W ), 6) e 12862(39’32”)

Tabel 4.1: Kosten van de routeringen en hun verbeteringen met en zonder reglementering

Hetzelfde probleem als in paragraaf 3.4.2 over de Colruyt-winkels wordt hier ook behandeld.Er wordt gekeken wat de kostprijs is van een routering, nu rekening houdend met de rij- enrusttijden. Normaal gezien zou door de extra restricties een duurdere routeringskost gevondenmoeten worden, wat ook het geval is. Door de lange loopttijd worden de pogingen beperkt

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 59

tot de beste oplossingen uit vorige hoofdstuk. Tabel 4.1 toont de runs zonder reglementering(Hc&Hv) en met reglementering (Hc1&Hv1).

Het berekenen van GRT , GOT , aj en yj om de reistijden en onderbrekingen te berekenen,verzwaart het oplossen van het probleem overduidelijk. De runtims voor gereglementeerdeoplossingen zijn veel langer dan die voor niet-gereglementeerde.

Details van de beste oplossing Hv1(Hc1(5), 6) worden afgebeeld in volgende figuur. HetCollect-commando geeft een matrixvoorstelling van de Multi Tours. Elke rij stelt een MultiTour voor. Een grafische voorstelling van de routering volgt in de figuur erna.

Figuur 4.12: Printscreen van de oplossing in Matlab.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 60

Figuur 4.13: Grafische voorstelling van de routering.

Hoofdstuk 4. Model onderworpen aan rij- en rusttijdreglementering 61

Ten opzichte van de oplossing in vorig hoofdstuk die 9 vrachtwagens nodig had, valt op datdeze oplossing 10 vrachtwagens nodig heeft. De reglementering verzwaart het probleem dusduidelijk, wat leidt tot een hogere kost.

Hoofdstuk 5

Genetisch algoritme

Zoals reeds aangehaald in hoofdstuk 1 & 2 werd het wiskundig model opgesteld met het oogop zowel het IMTOV-algoritme als een Genetisch Algoritme. De aanpak met een GenetischAlgoritme betreft een project voor het vak ‘Applied Combinatorial Optimization & Heuris-tics’. Ter volledigheid zal het projectverslag toegevoegd worden aan deze thesis. Het betreftde versie zoals deze is afgeleverd voor het vak. In het kader van mijn thesis heb ik geen verderonderzoek meer verricht naar de Genetische Algoritmes. De resultaten in dit hoofdstuk zijndan ook niet diepgaand.

In dit hoofdstuk wordt een Genetisch Algoritme opgesteld voor het beschreven wiskundig ba-sismodel uit hoofdstuk 3. In een eerste fase wordt kort de werking van Genetische Algoritmesuitgelegd (12). Vervolgens wordt aan de hand van de handleiding opgesteld door H. Pohlheim(12) het Genetisch Algoritme gedefinieerd. Tot slot laten we dit Genetisch Algoritme lopenvoor enkele experimenten. Aan de hand van de resultaten wordt getracht de parameterscorrect af te stellen.

5.1 Werking Genetisch Algoritme

Evolutionaire algoritmen zijn stochastische zoekmethodes die het proces volgen van natuur-lijke evolutie. Deze algoritmen opereren op een populatie mogelijke oplossingen waarop hetprincipe van survival of the fittest wordt toegepast. Wanneer geen van de individuen in depopulatie aan de criteria voldoet voor een optimale oplossing, dan creeert men een nieuwegeneratie. Deze nieuwe generatie ontstaat uit recombinatie van de individuen uit de oorspron-kelijke generatie die de beste fitness hebben. Vervolgens wordt de nieuwe populatie vastgelegdbestaande uit een deel van de oude generatie en een deel van de nieuwe generatie. Deze cycluswordt herhaald tot voldaan is aan de optimalisatie criteria. Hierna worden enkele typischekenmerken en procedures van het GA beschreven.

62

Hoofdstuk 5. Genetisch algoritme 63

Multiple subpopulations

Wanneer meerdere subpopulaties worden gebruikt, verkrijgt men meestal een beter resultaat.Elke subpopulatie evolueert dan geısoleerd over een paar generaties alvorens een of meerdereindividuen worden uitgewisseld tussen de subpopulaties. Dit principe komt meer overeen methoe evolutie plaatsvindt in de natuur.

Selection

Selectie wordt gebruikt om te kiezen welke individuen gekozen dienen te worden voor re-productie. Voor de selectie maakt men gebruik van fitness toekenning aan elk individu.Vervolgens worden ouders gekozen volgens hun fitness. Dit kan gebeuren op verschillendemanieren: roulette-wheel selection, stochastic universal sampling, local selection, ...

Recombination

Recombinatie produceert nieuwe individuen door informatie van de ouders te combineren.Voor dit model met integer beslissingsvariabelen is binary valued recombination van toepas-sing: single-point crossover, double-point crossover, multi-point crossover, shuffle crossover...

Mutation

Mutatie is de stap die plaatsvindt na recombinatie. Hierbij kan men instellen dat er muta-ties plaatsvinden op sommige nakomelingen. Dit komt er op neer dat variabelen binnen denakomeling een kleine kans hebben om gewijzigd te worden.

Reinsertion

Door middel van een reinsertion schema wordt bepaald welke individuen van de originelepopulatie vervangen zullen worden door nakomelingen.

5.2 Opstellen Genetisch Algoritme

5.2.1 Variabelen en VLUB

De y-variabelen die in vorige hoofdstukken nog reele waarden voorstelden, worden hier af-gerond naar gehele waarden. Dit om te vermijden dat de probleembeschrijving zowel gehelewaarden als reele waarden bevat. Op die manier maakt het beschreven model gebruik vanvier soorten integer variabelen. Door middel van de VLUB-vector definieert men de onder-en bovengrens van de variabelen. Deze grenzen bepalen dan de intervalgrenzen waarbinnende variabelen waarden kunnen aannemen. De variabelen worden opgeslagen in een Chrom-vector. Voor n klanten vindt men:

Hoofdstuk 5. Genetisch algoritme 64

• xi

Chrom 1 2 ... nLB 2 1 ... 1UB n+1 n+1 ... n+1

Hierbij kan er voor de eerste variabele x1 direct ingesteld worden dat x1 6= 1. Voor de overigevariabelen is dit niet mogelijk.

• yi

Chrom n+1 ... 2nLB max(Y0, e1 − t01 − g0) ... max(Y0, en− t0n− g0)UB l1 − t01 − g0 ... ln − t0n − g0

• yi

Chrom 2n+1 ... 3nLB e1 ... e4

UB l1 ... l4

• zi

Chrom 3n+1 ... 4nLB 0 ... 0UB n+1 ... n+1

5.2.2 Doelfunctie

De doelfunctie 2.6.1 wordt voorgesteld door ObjV al.

De restricties worden in het Genetisch Algoritme gedefinieerd door middel van bijkomende

Hoofdstuk 5. Genetisch algoritme 65

doelfuncties. Restricties waar niet aan voldaan is, krijgen de waarde toebedeeld van deovertreding. Het Genetisch Algoritme zal dan proberen deze overtreding van de restrictieste minimaliseren naar 0, zodat de toebedeelde overtredingswaarde verkleint. Wanneer deovertredingswaarde 0 wordt, is voldaan aan de restrictie. De omzetting van restrictie naardoelfunctie gebeurt als volgt:

G1 ≥ 0 =⇒ ObjAdd1 = 0(G1 >= 0)−G1(G1 < 0) (5.1)

G2 ≤ 0 =⇒ ObjAdd2 = 0(G2 <= 0) +G2(G2 > 0) (5.2)

G3 = 0 =⇒ ObjAdd3 = 0(G3 = 0) +G3(| G3 |> 0). (5.3)

Het opgestelde model bevat 7 soorten restricties, namelijk 2.2, 2.3, 2.4, 2.5, 2.6, 2.7 en 2.8.Elke soort komt n keer voor. Deze 7n restricties worden omgezet naar 7n ObjAdd-waarden≥0. Een restrictie is voldaan als zijn ObjAdd-waarde 0 is. Per restrictiesoort wordt nu degewogen som genomen van de n restricties. Het aantal ObjAdd daalt nu van 7n naar 7:ObjAdd1, ObjAdd2, ObjAdd3, ObjAdd4, ObjAdd5, ObjAdd6 en ObjAdd7.

De restricties van de vorm ObjAdd kunnen in Genetische algoritmes op twee manieren inrekening gebracht worden:

Multi-objective optimization

Hierbij worden de ObjAdd-waarden als afzonderlijke doelfuncties beschreven, wat resulteert in8 doelfuncties: [ObjV al ObjAdd1 ObjAdd2 ObjAdd3 ObjAdd4 ObjAdd5 ObjAdd6 ObjAdd7].Op deze doelfuncties wordt dan ranking toegepast. Bij ranking worden alle elementen gescoredmaar op evenwaardige basis (i.e. het aantal restricties dat overtreden is, en niet de waardevan de overtreding). Een mogelijk nadeel hiervan is dat je een vlakke kostenfunctie krijgt.Het voordeel is dat je geen probleem hebt met het bepalen van de gewichten (zie paragraafPenaltyterm). In de eerste fase van de ontwikkeling van mijn GA werd gewerkt met deMulti-objective optimization methode. Ik bekwam wel goede resultaten, maar op een zeertrage wijze. Dit doordat ik de werking van het ranken niet volledig onder de knie had... .Toch volgen hier nog de bekomen resultaten voor een run van het GA met multi-objectiveoptimization:

Hoofdstuk 5. Genetisch algoritme 66

Figuur 5.1: Voorbeeld van multi-objective plotting.

Doelfunctie met penaltyterm

Deze werkwijze wordt toegepast in de verdere beschrijving. Hierbij wordt van de restrictiesObjV ali met i = 1 : n twee gewogen sommen genomen met gewichten 1. Een som TR vande tijdsrestricties en een tweede som XR van de overige restricties. De opdeling in twee som-men is doordat de overtredingen van de tijdsrestricties een grotere waarde aannemen dan debinaire overtredingswaarde van de niet-tijdrestricties. Dit doordat de y-waarden een groterdomein hebben. Deze twee gewogen sommen worden toegevoegd aan de primaire doelfunctievoorzien van penaltyfactoren αt en αx:

ObjFun = ObjV al + αtTR+ αxXR (5.4)

De keuze van de penaltyfactoren α is zeer belangrijk om tot een optimaal resultaat te komen.De factor α moet voldoende hoog zijn, want het voldaan zijn van de restricties heeft voorrangop het minimaliseren van de primaire doelfunctie. Daarom moet de hoogte van de α factorenafgewogen worden tov de primaire doelfunctie. De α waarden mogen ook niet te groot zijnomdat anders het zoekproces belemmerd wordt. Door de hoge penaltykost gaat het GAvermijden dat reeds voldaan restricties terug niet-voldaan worden. Het zoekproces wordt indat geval vlug richting voldane restricties gestuurd, maar dit ten koste van een brede zoektochtin de zoekruimte van de primaire kostenfunctie.

In deze primaire doelfunctie wordt de grootste kost bepaald door het aantal voertuigen.

Hoofdstuk 5. Genetisch algoritme 67

Het huren van een voertuig kost namelijk cv = 470EUR per dag. De α-factor wordt hieraan afgewogen. 1 foutje aanwezig in de restrictiesom XR moet meer doorwegen dan hetminimaliseren van de primaire kostenfunctie. Daarom moet αt een waarde aannemen diegroter is dan cv. Er werd nu een grafiek opgesteld door voor een aantal combinaties (αx, αt)de bijhorende ObjFun uit te rekenen. Volgende figuur wordt bekomen:

Figuur 5.2: De functiewaarde uitgezet tov αx en αt

Hierbij werd voor elke (αx, αt)-combinatie het gemiddelde genomen van tien runs. De tweekoppels die het sterkst naar voor komen zijn (10, 500) en (10, 1000). Met de eerstgenoemdecombinatie wordt verder gerekend. Voor αt = 1 werden non-feasible oplossingen bekomen.Dit duidt er dus op dat deze factor te klein is om de tijdsrestricties te laten gelden.

5.2.3 Selectie, Recombinatie en Mutatie

Bij de representatie van de variabele werd gekozen voor tbx3int. Deze functie definieerteen aantal standaard parameters voor de optimalisatie van integer variabelen. Volgendeinstellingen worden standaard gekozen door tbx3int:

• ’Recombination.Name’, ’recdis’ ...

• ’Mutation.Name’, ’mutint’ ...

• ’Mutation.Range’, [0.1, 0.03, 0.01, 0.003, 0.001, 0.0003] ...

Hoofdstuk 5. Genetisch algoritme 68

• ’Mutation.Precision’, 16 ...

De GEATbx bevatte echter al een basismodel voor VRP. Dit is verschillend aan dat van mij,maar er zijn ook overeenkomsten. Vandaar dat ik sommige parametersettings gelijk liet lopenaan deze van het VRP-model:

• ’Recombination.Name’, ’recsh’ ...

• ’Recombination.Rate’, 0.8 ...

• ’Mutation.Rate’, 0.6 ...

• ’Mutation.Range’, 1 ...

• ’Selection.GenerationGap’, 0.85 ...

Het grootste verschil is dat het GEATbx-VRP-model alle klanten reeds bevat, dus daar ispermutatie mogelijk. In mijn model zitten niet alle klanten, omdat ik er vanuit ga datontbrekende klanten in de Chrom-vector bereikt worden via een traject van het depot naarde bewuste klant. Daardoor zijn instellingen zoals ’mutswap’, ’mutrandperm’, ’recgp’, ... nietrechtstreeks toepasbaar op mijn model.

Kleine aanpassingen van bovenstaande parameters bracht weinig veranderingen teweeg van-daar dat op deze parameters niet dieper wordt ingegaan.

Vervolgens wordt gekeken naar de invloed van het aantal subpopulaties. Hoe meer subpo-pulaties, hoe vlugger de streefwaarde bereikt wordt. Zoals in het begin van dit hoofdstukreeds vermeld werd, zal de aparte ontwikkeling per subpopulatie het genetisch proces tot eenbetere oplossing doen leiden. In de afbeelding is dit ook te zien voor subpopulaties die 1, 2of 3 bedragen.

Hoofdstuk 5. Genetisch algoritme 69

Figuur 5.3: Invloed van het aanral subpopulaties op ObjFun.

Opmerking

Dit model heeft nood aan mutaties en recombinaties die kennis van het model gebruiken omgoede oplossingen te ontwikkelen. Deze zijn niet ontwikkeld in dit hoofdstuk. Wel wordt nueven aangehaald hoe betere recombinaties en mutaties opgesteld kunnen worden. Algemeenkan gesteld worden dat het mutatieproces belangrijk is om nieuwe informatie in de oplossingente krijgen. Recombinaties zijn belangrijk om goede informatie van de ouderparen door tegeven aan de nakomelingen. Een mogelijkheid voor het recombinatieproces bestaat erin omvia de eerder beschreven k-functie de beste Multi Tours te selecteren uit een oplossing. Deknooppunten die in deze Multi Tours zitten kunnen dan hun waarden behouden. De overigeklanten kunnen dan via een mutatieproces aangepast worden zodat gewijzigde Multi Toursgegenereerd worden.

5.3 Toepassing Genetisch Algoritme

Tot slot geef ik een voorbeeld van een gegenereerde oplossing voor n=6 met parameters inge-steld zoals hierboven vermeld. De kostenparameters zijn hier veschillend van vorige hoofdstuk-ken omdat bij het schrijven van dit hoofdstuk de informatie van Colruyt nog niet beschikbaarwas: ct= e 0.5/min, cv= e 800/voertuig en cd= e 0.2/km. Volgende uitkomst wordt ge-vonden rekening houdend met tijdstipafhankelijke reistijden en een laadcapaciteit van 70. Na200 generaties (0,35 minuten) bekomt men onderstaande voorstelling waarin 1 voertuig tweesubtours aandoet. Men ziet hier duidelijk dat aan alle voorwaarden is voldaan: service tijden,laadcapaciteit, elke klant bezoeken, ...

Hoofdstuk 5. Genetisch algoritme 70

Gegevens:

i 1 2 3 4 5 6

xi 7 3 1 2 7 5yi 556 789yi 736 647 689 619 953 876zi 6 0 0 0 7 0

qi 8 18 22 6 11 10

Figuur 5.4: Voorstelling van de oplossing.

Hoewel de recombinatie- en mutatieprocessen niet op punt staan, bevat deze heuristiek tochnog enige interne kennis die er voor zorgt dat het GA betere resultaten genereert dan eenrandom search. De kost van vorige routering bedroeg e 1109. De waarden (inclusief pe-naltytermen) gevonden voor 10000 random search pogingen, liggen minsten een factor 10hoger.

Hoofdstuk 5. Genetisch algoritme 71

Figuur 5.5: Vergelijking met een randomsearch.

Hoofdstuk 6

Besluit

6.1 Conclusies

Het basismodel van deze thesis was gebaseerd op het werk van Figliozzi. Het Multi TourOpbouwalgoritme werd letterlijk overgenomen uit zijn paper Hc. De overige twee algoritmesHr en Hv steunen wel op zijn beschrijvingen maar moesten nog volledig opgesteld en gepro-grammeerd worden met de Multi Tours-problematiek geıntegreerd in het model. Dit leiddeuiteindelijk tot algoritmes die correcte oplossingen genereerden.

Het principe om de routering nog te verbeteren, komt ook voor in Figliozzi’s paper. HetMulti Tour Verbeteringsalgoritme in deze thesis pakt dit echter op een andere manier aan.Het betreft een iteratief proces waarbij telkens een Multi Tour minder geherrouteerd wordt.Doordat in het begin van het algoritme een groot aantal Multi Tours geherrouteerd worden,zorgt dit wel voor lange looptijden.

Het hele basismodel leek correct te werken. Toch had het misschien nuttig geweest indiener vergelijkend onderzoek was uitgevoerd naar andere Multi Tour algoritmes. Dit was echterminder voor de hand liggend omdat dan een benchmark gevonden moet worden die hetzelfdeprobleem beschrijft (tijdstipafhankelijke reistijden, Multi Tours, Time Windows, ...).

De rij- en rusttijden die in het model verwerkt werden, zorgden voor een creatieve inbreng.De hele problematiek werd van niets uitgewerkt. De resultaten die hieruit bekomen werden,leken op een correcte manier het probleem op te lossen.

Het Genetische Algoritme was een geval apart. Dit werd voornamelijk opgenomen in dezethesis voor de volledigheid. Het wiskundig model was nu eenmaal opgebouwd voor beideaanpakken, dus was het logisch dat hoofdstuk 5 deze oplossingsmethode ook even aanhaalde.Goede resultaten werden niet bereikt met het GA. Voornamelijk omdat het mutatie- enrecombinatieprocessen meer probleemspecifieke informatie nodig hadden om op een slimme

72

Hoofdstuk 6. Besluit 73

manier tot goede resultaten te komen. Zonder deze probleemspecifieke processen was heteerder een ‘slimme’ randomsearch.

6.2 Perspectieven

De drie algoritmes hierboven worden wel beperkt door de reistijdberekening. De afstanden diehiervoor gebruikt worden, zijn gerekend in vogelvlucht en bevatten geen informatie over desoort wegen die men gebruikt. Op autostrades wordt nu eenmaal een andere snelheid gehan-teerd dan in een dorpskern. Een aanpassing zou eruit kunnen bestaan om tussen alle klantende wegen door middel van een routeplanner te bestuderen. Zo kan men enerzijds de cor-recte afstand gebruiken. Dus niet in vogelvlucht. Anderzijds kan een routeplanner informatiegeven over de wegenonderverdeling op het traject. Op die manier kunnen de tijdstipafhan-kelijke reistijden nauwkeuriger berekend worden door gebruik te maken van snelheidsfunctieper soort van weg. Een andere mogelijkheid is om voor alle trajecten de data op te zoeken viahttp://www.start-sitter.be. Zo kan men de gemiddelde snelheden te weten komen voorverschillende tijdsintervallen. Probleem hierbij is dat enkel de autostrades van meetpuntenvoorzien zijn.

Een volgend perspectief ligt bij de Genetische Algoritmes. Indien het huidig GA behoudenwordt, dient er kennis geınjecteerd te worden in de recombinatie- en mutatieprocessen. Eenandere strategie is om een bestaand GA dat rond VRP handelt aan te passen aan de rij- enrusttijdreglementering.

Tot slot wordt het oorspronkelijke thema van deze thesis even bekeken. In een eerste fasevan de masterproef was het de bedoeling om deze thesis rond het Inventory Routing Problem(IRP) te laten handelen. Maar de ingeving van de rij-en rusttijdreglementering zorgde vooreen wijziging van het onderwerp. Desalniettemin zou het hier voorgestelde model perfectverder uitgebouwd kunnen worden voor IRP. Onderstaande figuur geeft een idee hoe dit inzijn werk zou kunnen gaan.

Het IRP probleem moet beslissen op welke dagen er aan welke klanten geleverd wordt volgenshun Service Time Windows zodanig dat deze klanten nooit zonder voorraad vallen. Zo bekomtmen voor een werkweek vijf afzonderlijke VRP-problemen die samen met de inventory holdingcosts instaan voor de wekelijkse IRP kostenfunctie.

Hoofdstuk 6. Besluit 74

Figuur 6.1: Basisidee voor het IRP-model.

Bijlage A

Algoritme W (X, n)

Het doel van dit algoritme is om uitgaande van de Xi-variabelen de wsi -waarden te bepalen.

X [x1 x2 ... xn x1 x2 ... xn]n Aantal klanten in het VRP probleem.

De wsi -waarden worden verzameld in een vector W, waarvoor geldt: ws

i = W (in+ s).

75

Bijlage A. Algoritme W (X,n) 76

Start W (X, n)

1. W ← zeros(1 : n(n+ 1))

2. i← 0

3. for each s ∈ [n+ 1, 2n] do

4. if (X(s) = n+ 1) then

5. W ((s− n)(n+ 1))← 1

6. i← s− n

7. k ← 0

8. while (W (s− n) = 0) ∧ (k 6= n+ 1) do

9. k ← find(X = i)

10. if size(k, 2) = 1 then

11. if (k > n) then

12. k ← k − n

13. else if (k > 0) then

14. k ← 0

15. else

16. k ← n+ 1

17. end if

18. i← k

19. W (kn+ (s− n))← 1

20. else

21. k = n+ 1

22. end if

23. end while

24. end if

25. end for

Bijlage B

Hr(Route, vi, vj, Qi, C, ∆)

B.1 Hr.m

function Route = Hr(Qheden,Route,vi, vj,C,Delta)

% Inladen van de gegevens(T, Q, qmax, D, E, L, n, ∼, ∼, cq, ∼, qstop, ∼, Y0, YTH, ∼, ∼)=degegevens();Qi=Qheden;

% Verbinding van vi naar vj vastleggen als vi gelijk is aan nulif (vi==0)

yjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(vj),T);Route(n+vj)=yjdepot;Route(2*n+vj)=yj;Qi=qmax-Q(vj);

% Verbinding van vi naar vj vastleggen als vi niet gelijk is aan 0

77

Bijlage

B.

Hr (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

78else

yjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*(qmax-Qi),Route(2*n+vi) +qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T));

yj=max(E(vj),Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+vj),T));yjj=yjdepot+qstop+cq*(qmax-Qi)+TTT(yjdepot+qstop+cq*(qmax-Qi),D(vj),T);if((Qi-Q(vj)≥0)&&(yj+qstop+cq*Q(vj)+TTT(yj+qstop+cq*Q(vj),D(vj*(n+1)+(n+1)),T)≤YTH)&&(yj≤ L(vj)))

t=1;elseif((yjj+qstop+cq*Q(vj)+TTT(yjj+qstop+cq*Q(vj),D(vj*(n+1)+n+1),T)≤YTH)&&(yjj≤L(vj)))

yj=yjj;t=2;

elseyjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(vj),T);t=3;

end

% Afhankelijk van welke type ’t-waarde’ wordt de Route verder benoemdif(t==1)

Route(2*n+vj)=yj;Route(vi)=vj;Qi=Qi-Q(vj);

elseif(t==2)Route(vi)=n+1;Route(n+vj)=yjdepot;Route(2*n+vj)=yj;Route(3*n+vi)=vj;Qi=qmax-Q(vj);

elseif(t==3)Route(vi)=n+1;Route(n+vj)=yjdepot;

Bijlage

B.

Hr (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

79Route(2*n+vj)=yj;Route(3*n+vi)=n+1;Qi=qmax-Q(vj);

endend

% Gegevens instellen voor de rest van de ongerouteerde klanten te routeren.vi=vj;type=Inf;lowestNext=vj;y=Inf;ydepot=Inf;C=setdiff(C,vj);

% Verder verloop van het Nearest Neighbor Algorithmwhile(∼ isempty(C))

bestValue=inf;for j=1:size(C,2)

yjdepot=max(E(C(j))-TTTomg(E(C(j)),D(C(j)),T)-qstop-cq*(qmax-Qi),Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T));

aj = Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+C(j)),T);yj = max(E(C(j)),aj);yjj=yjdepot+qstop+cq*(qmax-Qi)+TTT(yjdepot+qstop+cq*(qmax-Qi),D(C(j)),T);if((Qi-Q(C(j))>0)&&(yj+qstop+cq*Q(C(j))+TTT(yj+qstop+cq*Q(C(j)),D(C(j)*(n+1)+(n+1)),T)≤YTH)&&(yj≤L(C(j))))

g=Delta(1)*D(vi*(n+1)+C(j)) + Delta(2)*(yj-(Route(2*n+vi))) + Delta(3)*(L(C(j))-aj) + Delta(4)*(Qi-Q(C(j)));t=1;

elseif((yjj+qstop+cq*Q(C(j))+TTT(yjj+qstop+cq*Q(C(j)),D(C(j)*(n+1)+n+1),T)≤YTH)&&(yjj≤L(C(j))))yj=yjj;aj = Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T) + qstop + cq*qmax+

+TTT(Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T) + qstop + cq*qmax,

Bijlage

B.

Hr (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

80D(C(j)),T);

g=Delta(1)*(D(vi*(n+1)+n+1)+D(C(j))) + Delta(2)*(yj-Route(2*n+vi)) + Delta(3)*(L(C(j))-aj) + Delta(3)*max(E(C(j))-aj,0)+Delta(4)*(qmax-Q(C(j)));

t=2;else

yjdepot=max(E(C(j))-TTTomg(E(C(j)),D(C(j)),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(C(j)),T);aj= Y0 + qstop + cq*qmax + TTT(Y0 + qstop + cq*qmax,D(C(j)),T);g=Delta(5) + Delta(1)*(D(vi*(n+1)+n+1)+D(C(j))) + Delta(2)*( yj-yjdepot + qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop

+cq*Q(vi),D(vi*(n+1)+n+1),T)) + Delta(3)*(L(C(j))-aj) + Delta(3)*max(E(C(j))-aj,0) + Delta(4)*(qmax-Q(C(j)));t=3;

endif (g<bestValue)

bestValue=g;lowestNext=C(j);type=t;y=yj;ydepot=yjdepot;

endendif(type==1)

Route(2*n+lowestNext)=y;Route(vi)=lowestNext;Qi=Qi-Q(lowestNext);

elseif(type==2)Route(vi)=n+1;Route(n+lowestNext)=ydepot;Route(2*n+lowestNext)=y;

Route(3*n+vi)=lowestNext;Qi=qmax-Q(lowestNext);

Bijlage

B.

Hr (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

81elseif(type==3)

Route(vi)=n+1;Route(n+lowestNext)=ydepot;Route(2*n+lowestNext)=y;Route(3*n+vi)=n+1;Qi=qmax-Q(lowestNext);

endvi=lowestNext;C=setdiff(C,lowestNext);

endd=find(Route==0);Route(d(1))=n+1;Route(3*n+d(1))=n+1;

B.2 TTT.m

function x = TTT(tstart, d, TI)k=TI(3,TI(1,:)≤tstart&(tstart-60)<TI(1,:));tt=tstart+d/TI(2,k);while (tt≥TI(1,k+1))

d=d-(TI(1,k+1)-max(tstart,TI(1,k)))*TI(2,k);tt=TI(1,k+1)+d/TI(2,k+1);k=k+1;

endx=tt-tstart;

B.3 TTTomg.m

function x = TTTomg(teind, d, TI)

Bijlage

B.

Hr (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

82k=TI(3,TI(1,:)≥teind&(teind-60)<TI(1,:));tt=teind-d/TI(2,k);while (tt≤TI(1,k))

d=d-(min(teind,TI(1,k+1))-TI(1,k))*TI(2,k);tt=TI(1,k)-d/TI(2,k-1);k=k-1;

endx=teind-tt;

B.4 degegevens.m

Dit bestand wijzigde voortdurend van gegevens. De versie die hier afgebeeld wordt, is niet de data gebruikt voor het Colruyt-probleem.

function (T, Q, qmax, D, E, L, n, cd, ct, cq, cv, qstop, Delta, Y0, YTH, Xco, Yco)=degegevens()

% Parametersn=50;% Aantal klantenDelta=[[3 7 2 0.1 500]];

% GegevensT(1,:)=0:60:2040; % Tijdsintervallen snelheidsfunctieT(2,:)=[1.5 1.5 1.5 1.5 1.5 1.5 1.3 1 0.9 1 1.2 1.2 1.2 1.2 1.2 1.2 1 0.9 0.8 1 1.2 1.3 1.4 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5];T(3,:)=1:35;

% Kostparameterscd=0.2; % Verbruikprijs 1kilometercv=800; % Huurprijs voor een vrachtwagenct=0.5; % Brutouurloon per minuut voor chauffeur

% R101num = xlsread(’R101.xls’);

Bijlage

B.

Hr (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

83Xco(1:101)=num(:,2); % Basis ligt op (35,35)Yco(1:101)=num(:,3);Xco(n+2)=Xco(1);Yco(n+2)=Yco(1);D=Dcal(Xco, Yco,n);E=num(2:101,5);L=num(2:101,6);Q=num(2:101,4);cq=0;qstop=10;qmax=50;Y0=0;YTH=230;

B.5 Dcal.m

function D = Dcal(Xco,Yco,n)D=zeros((n+1)∧2,1);Xco(n+2)=0; % Omdat n+1 terug gelijk is aan de oorsprong overschrijf je de waarden van Xco dat meer waarden bevat dan nYco(n+2)=0;for i=0:n

for j=1:n+1D(i*(n+1)+j)=sqrt((Xco(i+1)-Xco(j+1)∧2+(Yco(i+1)-Yco(j+1)∧2);% Doordat index 0 niet mag moet elke i +1

endend

Bijlage C

Hc(W1, Route, vi, Qi, Ci)

C.1 Hc.m

function Route2 = Hc(W1, Route, vi, Qi, Ci)(∼, ∼, ∼, ∼, ∼, ∼, n, ∼, ∼, ∼, ∼, ∼, Delta, ∼, ∼, ∼, ∼)=degegevens();hRoute(1:4*n)=Route;hPrijs=Inf;for j=1:size(Delta,1)

start=vi;vRoute(1:4*n)=Route;C=Ci;Q=Qi;lowestNext=0;W=W1;while(∼isempty(C))

W=min(W,size(C,2));CC=w(W, vRoute, C, start, Delta(j,:), Qi);lowestCost=Inf;

84

Bijlage

C.

Hc (W

1,R

ou

te,vi,

Qi,

Ci)

85for i=1:size(CC,2)

unie=Hr(Q,vRoute, start, CC(i),C,Delta(j,:));if (Kost(unie)<lowestCost)

lowestCost=Kost(unie);lowestNext=CC(i);

endendC=setdiff(C,lowestNext);B=AddCustom(Q, vRoute, start, lowestNext);vRoute=B(2:4*n+1);start=lowestNext;Q=B(1);

endvRoute(start)=n+1; % Laatste klant nog afsluitenvRoute(3*n+start)=n+1;vPrijs=Kost(vRoute);if (vPrijs<hPrijs)

hPrijs=vPrijs;hRoute=vRoute;

endendRoute2(1,1:n)=1:n;Route2(2,1:n)=hRoute(1:n);Route2(3,1:n)=hRoute(n+1:2*n);Route2(4,1:n)=hRoute(2*n+1:3*n);Route2(5,1:n)=hRoute(3*n+1:4*n);end

C.2 w.m

Bijlage

C.

Hc (W

1,R

ou

te,vi,

Qi,

Ci)

86

function F = w(W, Route, C, vi, Delta, Qi)(T, Q, qmax, D, E, L, n, ∼, ∼, cq, ∼, qstop, ∼, Y0, YTH, ∼, ∼)=degegevens();F(1:2,1:size(C,2))=Inf;if (vi==0)

for j=1:size(C,2)yjdepot= max(E(C(j))-TTTomg(E(C(j)),D(C(j)),T)-qstop-cq*qmax,Y0);yj= yjdepot + qstop + cq*qmax + TTT(yjdepot+qstop+cq*qmax, D(C(j)) ,T);aj= Y0 + qstop + cq*qmax + TTT(Y0 + qstop + cq*qmax,D(C(j)),T);g=Delta(5) + Delta(1)*(D(C(j))) + Delta(2)*(yj-yjdepot) + Delta(3)*(L(C(j))-aj) + Delta(3)*max(E(C(j))-aj,0)

+ Delta(4)*(qmax-Q(C(j)));M=[F(1,F(1,:)¡g) g F(1,F(1,:)¿=g)];M(2,:)=[F(2,F(1,:)¡g) C(j) F(2,F(1,:)¿=g)];F=M(1,:);F(2,:)=M(2,:);

endF=F(2,1:W);

elsefor j=1:size(C,2)

yjdepot = max( E(C(j))-TTTomg(E(C(j)),D(C(j)),T)-qstop-cq*(qmax-Qi) , Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T));

aj = Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+C(j)),T);yj = max(E(C(j)),aj);yjj = yjdepot+qstop+cq*(qmax-Qi)+TTT(yjdepot+qstop+cq*(qmax-Qi),D(C(j)),T);if((Qi-Q(C(j))≥0)&& (yj+qstop+cq*Q(C(j))+TTT(yj+qstop+cq*Q(C(j)),D(C(j)*(n+1)+(n+1)),T)≤YTH)&&(yj≤L(C(j))))

g = Delta(1)*D(vi*(n+1)+C(j)) + Delta(2)*(yj-(Route(2*n+vi))) + Delta(3)*(L(C(j))-aj) + Delta(4)*(Qi-Q(C(j)));elseif((yjj+qstop+cq*Q(C(j))+TTT(yjj+qstop+cq*Q(C(j)),D(C(j)*(n+1)+n+1),T)≤YTH)&&(yjj≤L(C(j))))

yj = yjj;aj = Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T) + qstop + cq*qmax

+ TTT(Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T) + qstop+ cq*qmax,D(C(j)),T);

Bijlage

C.

Hc (W

1,R

ou

te,vi,

Qi,

Ci)

87g=Delta(1)*(D(vi*(n+1)+n+1)+D(C(j))) + Delta(2)*(yj-Route(2*n+vi)) + Delta(3)*(L(C(j))-aj) + Delta(4)*(qmax-Q(C(j)));

elseyjdepot=max(E(C(j))-TTTomg(E(C(j)),D(C(j)),T)-qstop-cq*qmax,Y0);yj= yjdepot + qstop + cq*qmax + TTT(yjdepot+qstop+cq*qmax, D(C(j)),T);aj= Y0 + qstop + cq*qmax + TTT(Y0 + qstop + cq*qmax,D(C(j)),T);g=Delta(5) + Delta(1)*(D(vi*(n+1)+n+1)+D(C(j))) + Delta(2)*( yj-yjdepot + qstop+cq*Q(vi)+TTT(Route(2*n+vi)

+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T)) + Delta(3)*(L(C(j))-aj) + Delta(4)*(qmax-Q(C(j)));endM=[F(1,F(1,:)<g) g F(1,F(1,:)≥g)];M(2,:)=[F(2,F(1,:)<g) C(j) F(2,F(1,:)≥g)];F=M(1,:);F(2,:)=M(2,:);

endF=F(2,1:W);

endend

C.3 AddCustom.m

function A = AddCustom(Qheden,Route,vi, vj)% Laad de gegevens in(T, Q, qmax, D,E,L, n, ∼, ∼, cq, ∼, qstop, ∼, Y0, YTH, ∼, ∼)=degegevens();Qi=Qheden;if (vi==0)

yjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(vj),T);Route(n+vj)=yjdepot;Route(2*n+vj)=yj;Qi=qmax-Q(vj);

else

Bijlage

C.

Hc (W

1,R

ou

te,vi,

Qi,

Ci)

88% Check hoe vj verbonden kan worden aan het laatste punt vi in Route

yjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*(qmax-Qi),Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+n+1),T));

yj=max(E(vj),Route(2*n+vi)+qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop+cq*Q(vi),D(vi*(n+1)+vj),T));yjj=yjdepot+qstop+cq*(qmax-Qi)+TTT(yjdepot+qstop+cq*(qmax-Qi),D(vj),T);if((Qi-Q(vj)≥0)&&(yj+qstop+cq*Q(vj)+TTT(yj+qstop+cq*Q(vj),D(vj*(n+1)+(n+1)),T)≤YTH)&&(yj≤L(vj)))

t=1;elseif((yjj+qstop+cq*Q(vj)+TTT(yjj+qstop+cq*Q(vj),D(vj*(n+1)+n+1),T)≤YTH)&&(yjj≤L(vj)))

yj=yjj;t=2;

elseyjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(vj),T);t=3;

end% Afhankelijk van welke type ’t-waarde’ wordt de Route verder benoemd

if(t==1)Route(2*n+vj)=yj;Route(vi)=vj;Qi=Qi-Q(vj);

elseif(t==2)Route(vi)=n+1;Route(n+vj)=yjdepot;Route(2*n+vj)=yj;Route(3*n+vi)=vj;Qi=qmax-Q(vj);

elseif(t==3)Route(vi)=n+1;Route(n+vj)=yjdepot;Route(2*n+vj)=yj;

Bijlage

C.

Hc (W

1,R

ou

te,vi,

Qi,

Ci)

89Route(3*n+vi)=n+1;Qi=qmax-Q(vj);

endendA=Qi;A(2:4*n+1)=Route;

C.4 Kost.m

function F cost=Kost(Route)% Laad de gegevens in(T, Q, ∼, D, ∼, ∼, n, cd, ct, cq, cv, qstop, ∼, ∼, ∼, ∼, ∼)=degegevens();% Construeer de vector XX(n+1:2*n)=Route(1:n);for s=1:n

if (sum((X(:)==s),2)==0)X(s)=s;

endend% Pas de service starttijden aan: service starttijd + service + terugkeer depotfor i=1:n

Route(2*n+i)=Route(2*n+i)+qstop+cq*Q(i)+TTT(Route(2*n+i)+qstop+cq*Q(i),D(i*(n+1)+n+1),T);end% Voorbereiding om multi tour starttijden te berekenenEE=zeros(1,n);for i=1:n

if (sum(Route(3*n+1:4*n)==i,2)==0)EE(i)=1;

endend

Bijlage

C.

Hc (W

1,R

ou

te,vi,

Qi,

Ci)

90% Bereken de kostcost=cv*sum((Route(3*n+1:4*n)==n+1),2)+cd*tot afstand(X,D,n)+ct*sum(Route(2*n+1:3*n).*(Route(3*n+1:4*n)==n+1)) -ct*sum(Route(n+1:2*n).*EE,2);

C.5 tot afstand.m

function d = tot afstand(X, D, n)d=(X(1:n)>0)*D(1:n);for i=1:n

d=d+D(i*(n+1)+X(i+n));endend

Bijlage D

Hv(Route, vi, vj, Qi, C, ∆)

D.1 Hv.m

function Route = Hv(Route,W)(∼,∼,∼,∼,∼,∼, n,∼,∼,∼,∼,∼,∼,∼,∼,∼,∼)=degegevens();Prijs=Kost(MtoV(Route,n));nRoute=Route;F=[];P=Collect(Route);while(size(P,1)>1)

S=ks(nRoute,size(P,1))C=S(end,S(end,:) =n+1);C=C(C =0);F=[F C]G=setdiff(1:n,F);R=Route;R(2:5,G)=0;vRoute=Hc(W, MtoV(R,n), 0, 0, G)

91

Bijlage

D.

Hv (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

92if (Kost(MtoV(vRoute,n))¡Prijs)

Prijs=Kost(MtoV(vRoute,n));Route=vRoute;

endnRoute=Route;nRoute(2:5,F)=0;nRoute(2,F)=F;P=Collect(nRoute);

endend

D.2 k.m

function P = ks(Route, s)(∼,∼,∼,∼,∼,∼, n,∼,∼,∼,∼,∼,∼,∼,∼,∼,∼)=degegevens();W=Collect(Route);

% Alle Q-indices met 1 omhoog, zodat Q1(1) gedefinieerd wordt als Q(0), Q1(2) als Q(1), ...Q1=[0; Q];S(1:size(W,1),1:4)=Inf;P(1:size(W,1),1:4)=Inf;grens=min(s,size(W,1));Q1(n+2)=0;

% Zet de gegevens van W om naar hun respectievelijke hoeveelheid vraag.G=zeros(size(W,1),size(W,2)+1);for i=1:size(W,1)

for j=1:size(W,2)G(i,j)=Q1(W(i,j)+1);

end

Bijlage

D.

Hv (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

93end

% Voorbereidingen om de afstand per routeX(n+1:2*n)=Route(2,:);for s=1:n

if (sum((X(:)==s),2)==0)X(s)=s;

endend

% Sorteren van de criteriafor i=1:size(W,1)

B=W(i,:);

% Routeduurj=W(i,find(B==n+1, 1, ’last’ )-1);P(i,1)=Route(4,j)+qstop+cq*Q1(j+1)+TTT(Route(4,j)+qstop+cq*Q1(j+1),D(j*(n+1)+n+1),T)-Route(3,W(i,1));% RoutenummerP(i,2)=i;

% Gemiddeld ladingsoverschot over Multi TourP(i,3)=(qmax*sum((B==n+1),2)-sum(G(i,:),2))/sum((B==n+1),2);

% Routeafstand geinverteerdA=B((B¿0));A=A((A¡n+1));C=setdiff(1:n,A);Z=X;Z(C)=0;Z(C+n)=C;

Bijlage

D.

Hv (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

94P(i,4)=1/tot afstand(Z,D,n);

% OrdenM=[S(S(:,1)<P(i,1),1); P(i,1); S(S(:,1)>=P(i,1),1)];M(:,2:4)=[S(S(:,1)<P(i,1),2:4); P(i,2:4); S(S(:,1)>=P(i,1),2:4)];S=M;

endS=S(1:grens,:);P=W(S(:,2),:);end

D.3 k.m

function W = Collect(Route)(∼,∼,∼,∼,∼,∼, n,∼,∼,∼,∼,∼,∼,∼,∼,∼,∼)=degegevens();C=1:n;

% Creeer de vector X die aanduidt naar waar de routes starten.X=zeros(1,2*n);X(n+1:2*n)=Route(2,:);for s=1:n

if (sum((X(:)==s),2)==0)X(s)=s;

endend

% Initialiseer matrix Wrt=0;for s=1:n

if ((X(s)==s)&&(sum(Route(5,:)==s,2)==0))

Bijlage

D.

Hv (R

ou

te,v

i ,v

j ,Q

i ,C

,∆)

95rt=rt+1;i=1;k=0;r=s;while (k =n+2)

W(rt,i)=r;if (X(n+r)==n+1)

i=i+1;W(rt,i)=n+1;r=Route(5,r);if (r==n+1)

k=n+2;end

elsek=Route(5,X(n+r));r=X(n+r);

endi=i+1;

endk=0;

endend

Bijlage E

T ijd(GRTi, GRTj)

E.1 Tijd.m

function [aj, yj, GRT, GOT] = Tijd(i, j, yi, GRT, GOT, Qwagen)

% Gegevens(T, Q, qmax, D, E, L, n, ∼, ∼, cq, ∼, qstop, ∼, Y0, YTH, ∼, ∼)=degegevens();

% Alle Q-waarden worden nu opgeroepen via index i+ 1. Q(1) stelt dan de hoeveelheid voor die aangevuld wordt bij herbevoorrading.Q=[qmax-Qwagen; Q];

% Berekenen van de nodige waardentij=TTT(yi+qstop+cq*Q(i+1), D(i*(n+1)+j), T);aj=yi+qstop+cq*Q(i+1)+tij;yj=max(E(j),aj);

% Nakijken van de voorwaardenif (GRT+qstop+cq*Q(i+1)+tij>=270)

96

Bijlage

E.

Tij

d(G

RT

i ,G

RT

j )97

limiet=270-GRT-cq*Q(i+1)-qstop;aj=yi+qstop+cq*Q(i+1)+limiet+45-15*(GOT==15)+TTT(yi+qstop+cq*Q(i+1)+limiet+45-15*(GOT==15),D(i*(n+1)+j)

-TTTvoor(yi+qstop+cq*Q(i+1),yi+qstop+cq*Q(i+1)+limiet,T),T);yj=max(E(j),aj);GRT=TTT(yi+qstop+cq*Q(i+1)+limiet+45-15*(GOT==15),D(i*(n+1)+j)-TTTvoor(yi+qstop+cq*Q(i+1),yi+qstop+cq*Q(i+1)

+limiet,T),T);if (yj-aj>=45)

GRT=0;GOT=0;

elseif (yj-aj>=15)GOT=15;

elseGOT=0;

endelseif (yj-aj>=45)

GRT=0;GOT=0;

elseif ((yj-aj>=30)&&(GOT==15))GRT=0;GOT=0;

elseif (GRT +qstop+cq*Q(i+1)+ tij +qstop+cq*Q(j+1)>=270)aj=aj+45-15*(GOT==15);yj=max(E(j),aj);GRT=0;GOT=0;

elseif (yj-aj>=15)GRT=GRT+qstop+cq*Q(i+1)+tij;GOT=15;

elseGRT=GRT+aj-yi;

Bijlage

E.

Tij

d(G

RT

i ,G

RT

j )98

endend

E.2 TTTvoor.m

Dit algoritme berekent hoeveel afstand is afgelegd in het de gedeeltelijke reistijd t∗∗ij .

function x = TTTvoor(tstart, teind, TI)eind=TI(3,TI(1,:)<=teind&(teind-60)<TI(1,:));start=TI(3,TI(1,:)<=tstart&(tstart-60)<TI(1,:));if (eind==start)

x=TI(2,eind)*(teind-tstart);elseif (start==eind-1)

x=TI(2,start)*(TI(1,start+1)-tstart);x=x+TI(2,eind)*(teind-TI(1,eind));

elsex=TI(2,start)*(TI(1,start+1)-tstart);x=x+TI(2,eind)*(teind-TI(1,eind));for i=start+1:eind-1

x=x+TI(2,i)*60;end

endend

E.3 Hr1.m

function Route = Hr(Qheden,Route,vi, vj,C,Delta, GRT, GOT)

% Inladen van de gegevens(T, Q, qmax, D, E, L, n, ∼, ∼, cq, ∼, qstop, ∼, Y0, YTH, ∼, ∼)=degegevens();

Bijlage

E.

Tij

d(G

RT

i ,G

RT

j )99

Qi=Qheden;

% Verbinding van vi naar vj vastleggen als vi gelijk is aan nulif (vi==0)

yjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(vj),T);Route(n+vj)=yjdepot;Route(2*n+vj)=yj;Qi=qmax-Q(vj);GRT=yj-yjdepot;GRT=0;

% Verbinding van vi naar vj vastleggen als vi niet gelijk is aan 0else

[∼, yj, GRTj, GOTj] = Tijd(vi, vj, Route(2*n+vi), GRT, GOT, Qi);[∼, yjdepot, GRTdepot, GOTdepot] = Tijd(vi, n+1, Route(2*n+vi), GRT, GOT, Qi);[∼, yjj, GRTjj, GOTjj] = Tijd(0, vj, yjdepot, GRTdepot, GOTdepot, Qi);if((Qi-Q(vj)≥0)&&(yj+qstop+cq*Q(vj)+TTT(yj+qstop+cq*Q(vj),D(vj*(n+1)+(n+1)),T)≤YTH)&&(yj≤ L(vj)))

t=1;GRT=GRTj;GOT=GOTj;

elseif((yjj+qstop+cq*Q(vj)+TTT(yjj+qstop+cq*Q(vj),D(vj*(n+1)+n+1),T)≤YTH)&&(yjj≤L(vj)))yj=yjj;GRT=GRTjj;GOT=GOTjj;t=2;

elseyjdepot=max(E(vj)-TTTomg(E(vj),D(vj),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(vj),T);GRT=yj-yjdepot;

Bijlage

E.

Tij

d(G

RT

i ,G

RT

j )100

GOT=0;t=3;

end

% Afhankelijk van welke type ’t-waarde’ wordt de Route verder benoemdif(t==1)

Route(2*n+vj)=yj;Route(vi)=vj;Qi=Qi-Q(vj);

elseif(t==2)Route(vi)=n+1;Route(n+vj)=yjdepot;Route(2*n+vj)=yj;Route(3*n+vi)=vj;Qi=qmax-Q(vj);

elseif(t==3)Route(vi)=n+1;Route(n+vj)=yjdepot;Route(2*n+vj)=yj;Route(3*n+vi)=n+1;Qi=qmax-Q(vj);

endend

% Gegevens instellen voor de rest van de ongerouteerde klanten te routeren.vi=vj;type=Inf;lowestNext=vj;y=Inf;ydepot=Inf;

Bijlage

E.

Tij

d(G

RT

i ,G

RT

j )101

C=setdiff(C,vj);

% Verder verloop van het Nearest Neighbor Algorithmwhile(∼ isempty(C))

bestValue=inf;for j=1:size(C,2)

[aj, yj, GRTj, GOTj] = Tijd(vi, C(j), Route(2*n+vi), GRT, GOT, Qi);[∼, yjdepot, GRTdepot, GOTdepot] = Tijd(vi, n+1, Route(2*n+vi), GRT, GOT, Qi);[ajj, yjj, GRTjj, GOTjj] = Tijd(0, C(j), yjdepot, GRTdepot, GOTdepot, Qi);if((Qi-Q(C(j))>0)&&(yj+qstop+cq*Q(C(j))+TTT(yj+qstop+cq*Q(C(j)),D(C(j)*(n+1)+(n+1)),T)≤YTH)&&(yj≤L(C(j))))

g=Delta(1)*D(vi*(n+1)+C(j)) + Delta(2)*(yj-(Route(2*n+vi))) + Delta(3)*(L(C(j))-aj) + Delta(4)*(Qi-Q(C(j)));t=1;

elseif((yjj+qstop+cq*Q(C(j))+TTT(yjj+qstop+cq*Q(C(j)),D(C(j)*(n+1)+n+1),T)≤YTH)&&(yjj≤L(C(j))))yj=yjj;aj = ajj

GRTj=GRTjj;GOTj=GOTjj;g=Delta(1)*(D(vi*(n+1)+n+1)+D(C(j))) + Delta(2)*(yj-Route(2*n+vi)) + Delta(3)*(L(C(j))-aj) + Delta(3)*max(E(C(j))-aj,0)

+Delta(4)*(qmax-Q(C(j)));t=2;

elseyjdepot=max(E(C(j))-TTTomg(E(C(j)),D(C(j)),T)-qstop-cq*qmax,Y0);yj=yjdepot+qstop+cq*qmax+TTT(yjdepot+qstop+cq*qmax,D(C(j)),T);GRTj=yj-yjdepot;GOTj=0;aj= Y0 + qstop + cq*qmax + TTT(Y0 + qstop + cq*qmax,D(C(j)),T);g=Delta(5) + Delta(1)*(D(vi*(n+1)+n+1)+D(C(j))) + Delta(2)*( yj-yjdepot + qstop+cq*Q(vi)+TTT(Route(2*n+vi)+qstop

+cq*Q(vi),D(vi*(n+1)+n+1),T)) + Delta(3)*(L(C(j))-aj) + Delta(3)*max(E(C(j))-aj,0) + Delta(4)*(qmax-Q(C(j)));t=3;

end

Bijlage

E.

Tij

d(G

RT

i ,G

RT

j )102

if (g<bestValue)bestValue=g;lowestNext=C(j);type=t;y=yj;ydepot=yjdepot;GRTv=GRTj;GRTv=GRTj;

endendGRT=GRTvGOT=GOTvif(type==1)

Route(2*n+lowestNext)=y;Route(vi)=lowestNext;Qi=Qi-Q(lowestNext);

elseif(type==2)Route(vi)=n+1;Route(n+lowestNext)=ydepot;Route(2*n+lowestNext)=y;

Route(3*n+vi)=lowestNext;Qi=qmax-Q(lowestNext);

elseif(type==3)Route(vi)=n+1;Route(n+lowestNext)=ydepot;Route(2*n+lowestNext)=y;Route(3*n+vi)=n+1;Qi=qmax-Q(lowestNext);

endvi=lowestNext;

Bijlage

E.

Tij

d(G

RT

i ,G

RT

j )103

C=setdiff(C,lowestNext);endd=find(Route==0);Route(d(1))=n+1;Route(3*n+d(1))=n+1;

Bibliografie

[1] Agiv. Middenschalige kleurenorthofoto’s. http://geo-vlaanderen.agiv.be/geo-vlaanderen/kleurenortho/ (laatst bekeken op 29 juli 2010), 2010.

[2] Colruyt. Op weg met een Colruyt-chauffeur. http://www.colruyt.be/colruyt/static/(laatst bekeken op 26 juli 2010), 2009.

[3] G. B. Dantzig and R.H. Ramser. The truck dispatching problem. Management Science6, pages 80–91, 1959.

[4] B. D. Dıaz. The vrp web. http://neo.lcc.uma.es/radi-aeb/WebVRP (laatst bekeken op16 juli 2010), 2007.

[5] Digitach. Presentatie Tachograaf. www.digitach.be/NL/PDF/presn.pdf (laatst bekekenop 7 juli 2010), 2007.

[6] M.A. Figliozzi. An iterative route construction and improvement algorithm for the vehiclerouting problem with soft time windows. Transport. Res., Part C, 2009.

[7] M.R. Garey and D.S. Johnson. Computers and Intractability: A Guide to the Theoryof NP-Completeness. W.H. Freeman and Company, 1979.

[8] S. Ichoua, M. Gendreau, and J.Y. Potvin. Vehicle dispatching with time-dependent traveltimes. European Journal of Operational Research, 144(2):379–396, 2003.

[9] Catherine Maheux. Digitale tachograaf verplicht ... VBO, 2005.

[10] Federale Overheidsdienst Mobiliteit-Vervoer. Samenwerkingsakkoord Federale Overheid- Gewesten - START/SITTER. http://www.start-sitter.be (laatst bekeken op 18 juni2010), 2010.

[11] Europees Parlement. Verordening (eg) nr. 561/2006. Publicatieblad van de EuropeseUnie, L 102/1:1–13, 2006.

[12] H. Pohlheim. GEATbx: Tutorial and Parameter Options, 2006.

104

Bibliografie 105

[13] M. Savelsberg. Local search in routing problems with time windows. Annals of OperationsResearch, 4:285–305, 1985.

[14] M. M. Solomon. Algorithms for the vehicle-routing and scheduling problems with timewindow constraints. Operations Research, 35(2):254–265., 1987.