Optimalisatiealgoritmen voor distributieproblemen

Maat: px
Weergave met pagina beginnen:

Download "Optimalisatiealgoritmen voor distributieproblemen"

Transcriptie

1 Vakgroep Toegepaste Wiskunde, Informatica en Statistiek Optimalisatiealgoritmen voor distributieproblemen Nathan Sinnesael Promotor: prof. dr. V. Fack Masterproef ingediend tot het behalen van de academische graad van master in de wiskunde Academiejaar

2

3

4

5 Vakgroep Toegepaste Wiskunde, Informatica en Statistiek Optimalisatiealgoritmen voor distributieproblemen Nathan Sinnesael Promotor: prof. dr. V. Fack Masterproef ingediend tot het behalen van de academische graad van master in de wiskunde Academiejaar

6

7 Toelating tot bruikleen De auteur geeft de toelating deze masterproef voor consultatie beschikbaar te stellen en delen van de masterproef te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze masterproef. Nathan Sinnesael, juni 2017 i

8 ii

9 Voorwoord Toen ik vorig jaar moest kiezen in welk gebied ik mijn masterproef wou maken, wist ik meteen dat ik iets wou programmeren. In mijn opleiding heb ik verschillende vakken gevolgd die een programmeercomponent hadden. Mijn bachelorproef heb ik geschreven bij prof. dr. Veerle Fack en is mij zeer goed bevallen. Daarom besloot ik om mijn masterproef ook bij haar te doen. Het programmeren verliep echter niet echt van een leien dakje. Dikwijls had ik een nieuw algoritme geschreven, maar telkens waren de resultaten niet echt wat ik verwachtte. Om het eerste probleem op te lossen, heb ik bijgevolg veel zitten zoeken naar een optimaal algoritme. Uiteindelijk is deze er gekomen en kon het tweede probleem snel opgelost worden. Ik wil ook enkele mensen bedanken die mij geholpen hebben bij het schrijven van deze thesis. Eerst en vooral bedank ik prof. dr. Veerle Fack om mij te begeleiden tijdens mijn thesis. Bovendien begreep ze dat het niet altijd mogelijk was om goed verder te werken aan de thesis tijdens de stage voor de lerarenopleiding. Ik wil ook mijn ouders bedanken, zowel voor het nalezen van mijn masterproef, als voor het geven van de mogelijkheid om te studeren aan de Universiteit Gent en mij te steunen gedurende mijn opleiding. Ik wil ook mijn vrienden bedanken die mij hebben gesteund en bij wie ik altijd terecht kon om te overleggen over de opbouw van mijn thesis of om even een pauze te nemen. Nathan Sinnesael iii

10 iv

11 Inhoudsopgave 1 Inleiding 1 2 Algoritmen voor integer programming Integer programming Linear programming Integer programming Backtracking Branch and bound Branch and bound met startoplossing Linear programming met Gomory cuts Facility location Probleemstelling Gretige benadering Gretige benadering: versie Gretige benadering: versie Branch and bound Mixed integer programming MIP op deelproblemen Local search Resultaten Conclusie Vehicle routing Probleemstelling Gretige benadering Branch and bound Mixed integer programming Local search Resultaten Conclusie v

12 vi INHOUDSOPGAVE 5 Algemene conclusie 57 A English summary 59

13 Hoofdstuk 1 Inleiding In de maatschappij zijn er verschillende bedrijven die goederen leveren, denk bijvoorbeeld aan online winkels. Voor deze bedrijven is het handig dat er op voorhand een bepaalde route met bepaalde klanten vastligt voor een bepaald voertuig. Het willekeurig vervoeren van deze goederen zou veel tijd kosten en een hoge kost voor het bedrijf met zich meebrengen. Beter zou zijn om aan de hand van de positie van deze klanten te bepalen bij welke vestiging een klant is aangesloten en samen met welke andere klanten de leveringen bij deze klant het best zouden gebeuren. In deze thesis wordt besproken op welke manieren we deze problemen, het facility location probleem en vehicle routing probleem, kunnen oplossen. Bij het facility location probleem worden er een aantal mogelijke locaties gegeven om een faciliteit te openen. Alle klanten moeten bediend worden door juist één faciliteit. Het doel van dit probleem is om de kost om deze klanten te bevoorraden zo laag mogelijk te houden, rekening houdend met de capaciteitsvoorwaarden van de faciliteiten. In Figuur 1.1 worden faciliteiten geopend in bepaalde delen van Engeland. Merk op dat er in de rechter benedenhoek nog een locatie voor een faciliteit aanwezig is waar geen faciliteit wordt geopend. Dit is blijkbaar goedkoper dan dit wel te doen, omwille van de kost om deze faciliteit te openen en uit te baten. Het vehicle routing probleem bepaalt de routes die een aantal voertuigen moeten rijden om een zo laag mogelijke afstand af te leggen, waarbij er rekening moet worden gehouden met de capaciteit van de voertuigen. De klanten die door een bepaald voertuig worden bevoorraad, moeten allemaal na elkaar worden bezocht, zonder het depot opnieuw aan te doen. Het voertuig moet dus kunnen voldoen aan de vraag van alle klanten op zijn route. In Figuur 1.2 zijn er vijf voertuigen die vijftien klanten moeten bevoorraden. Het depot is centraal gelegen, dit is de plaats waar alle voertuigen vertrekken en weer aankomen. Merk op dat de routes elkaar ook kunnen kruisen, terwijl de kost toch laag blijft. 1

14 2 HOOFDSTUK 1. INLEIDING Figuur 1.1: Voorbeeld van het facility location probleem ([1]) Figuur 1.2: Voorbeeld van het vehicle routing probleem Om te proberen om deze problemen op te lossen, worden verschillende algoritmen geschreven die op verschillende manieren worden aangepakt. Er worden telkens zowel exacte algoritmen als benaderingen voorgesteld. Bij sommige toepassingen kan het beter zijn om snellere benaderingsalgoritmen te gebruiken, bijvoorbeeld wanneer de klanten die moeten bevoorraad worden dagelijks veranderen. Soms is een benadering echter onvoldoende en moet er een betere, exacte oplossing worden gevonden. De benaderingsalgoritmen starten van een gretige aanpak. Deze eenvoudigste algoritmen kunnen bij sommige problemen al een goede benadering zijn. Deze worden nog

15 3 uitgebreid tot een local search algoritme, waarbij een gretige oplossing als startwaarde wordt genomen. Deze benaderingsalgoritmen zijn echter niet altijd voldoende, dus worden er ook exacte algoritmen voorgesteld. Deze omvatten backtracking (branch and bound) en mixed integer programming algoritmen. Deze algoritmen geven telkens de exacte oplossing van het probleem. Bij het facility location probleem wordt er ook nog een benaderingsalgoritme gegeven die gebruik maakt van mixed integer programming. Deze verschillende algoritmen worden nadien getest op enkele datasets. Hierbij worden de uitvoeringstijden en resultaten vergeleken. Het ligt voor de hand dat de exacte algoritmen meer tijd zullen vragen dan de benaderingen, maar we zijn vooral geïnteresseerd hoe de benaderingsalgoritmen zullen scoren ten opzichte van de exacte algoritmen. Om deze thesis te starten, wordt er in een eerste hoofdstuk besproken wat mixed integer programming juist inhoudt en worden verschillende methodes geïntroduceerd om deze problemen efficiënt op te lossen. Vervolgens worden de verschillende problemen besproken en worden de gebruikte algoritmen uitgelegd. Daarbij worden er testen gedaan naar de performantie van deze algoritmen. Deze thesis sluit dan ook af met een conclusie in verband met deze verschillende strategieën.

16 4 HOOFDSTUK 1. INLEIDING

17 Hoofdstuk 2 Algoritmen voor integer programming 2.1 Integer programming Linear programming Een linear programming probleem bestaat erin een lineaire doelfunctie te optimaliseren waarbij lineaire voorwaarden worden opgelegd. Een mogelijke vorm van een linear programming probleem is minimaliseer c 1 x c n x n onder de voorwaarden a 11 x a 1n x n b 1 a m1 x a mn x n b m. x i 0 i = 1,..., n, of in matrixnotatie: minimaliseer c x onder de voorwaarden Ax b, x 0 (A R m n en c, x R n ), waarbij de operator componentsgewijze werkt. Opmerkingen Als we een doelfunctie willen maximaliseren, kunnen we het probleem herleiden tot een minimalisatieprobleem door het tegengestelde van de doelfunctie te minimaliseren. Als een x i niet positief moet zijn in een probleem, kunnen we x i = x + i schrijven, met x + i 0 en x i 0. x i 5

18 6 HOOFDSTUK 2. ALGORITMEN VOOR INTEGER PROGRAMMING Als we een voorwaarde hebben van de vorm n j=1 a ijx j b i, dan kunnen we deze herschrijven naar n j=1 ( a ij)x j ( b i ). Als een voorwaarde een gelijkheidsvoorwaarde n j=1 a ijx j = b i is, kunnen we deze vervangen door de twee ongelijkheidsvoorwaarden n a ij x j b i, j=1 n a ij x j b i. j=1 Uit de lineariteit van de doelfunctie volgt dat de oplossing van een begrensd toegelaten probleem een hoekpunt van het convexe toegelaten gebied is. Een mogelijke methode om een linear programming probleem op te lossen is de simplexmethode. Voorbeeld: het transportprobleem Een bepaald goed wordt geproduceerd bij n producenten P 1,..., P n en moet worden geleverd aan m klanten C 1,..., C m. Een producent P i heeft een capaciteit s i, dit betekent dat hij s i eenheden van het goed in zijn bezit heeft. Een klant C j heeft een vraag van d j eenheden van het goed, dit betekent dat er minstens d j eenheden moeten worden vervoerd naar klant C j. Stel nu de kost om een goed te vervoeren van producent P i naar klant C j voor door b ij. Het doel van dit probleem is om de kost om de goederen te vervoeren naar de klanten zo laag mogelijk te houden. Dit probleem kunnen we modelleren a.d.h.v. een linear programming model. Hiervoor kiezen we eerst variabelen x ij, wat het aantal eenheden van het goed voorstelt die producent P i vervoert naar klant C j. De totale kost wordt dan gegeven door n m b ij x ij. i=1 j=1 We moeten nu nog de voorwaarden opstellen. Een klant moet een voldoende aantal goederen krijgen, dus moet er gelden dat n x ij d j j = 1,..., m. i=1 Bovendien kunnen er ook niet meer goederen worden vervoerd van een producent dan er aanwezig zijn in stock, dus krijgen we de voorwaarde m x ij s i i = 1,..., n. j=1

19 2.1. INTEGER PROGRAMMING 7 We krijgen dus volgend linear programming probleem om het transportprobleem op te lossen: minimaliseer onder de voorwaarden n m b ij x ij i=1 j=1 n x ij d j i=1 m x ij s i j=1 j = 1,..., m i = 1,..., n x ij 0 i = 1,... n; j = 1,..., m. We kunnen dit probleem omvormen naar het standaardprobleem door de aanpassingen in de opmerking aan te brengen en kunnen zo de oplossing x bepalen met het simplexalgoritme. We vinden dan een oplossing met reële waarden voor x ij. De oplossing van dit probleem kan goed geïnterpreteerd worden indien we bijvoorbeeld een vloeistof willen vervoeren. Dan kan er een fractie van een eenheid worden vervoerd (bv. een halve liter). Indien we echter bijvoorbeeld wagens, die altijd volledig moeten blijven, willen vervoeren, kunnen we geen reële componenten in de oplossing aanvaarden. Elke component moet hier geheel zijn. Dit kunnen we echter niet uitdrukken met linear programming, maar hiertoe biedt integer programming een oplossing Integer programming Integer programming is een variant van linear programming. Het verschil zit in de toegelaten waarden van de variabelen x i. Bij linear programming zijn de waarden van de variabelen x i die de doelfunctie optimaliseren reële getallen. Bij integer programming kunnen deze variabelen enkel gehele waarden aannemen. Het probleem kan dus als volgt geschreven worden: minimaliseer c 1 x c n x n onder de voorwaarden a 11 x a 1n x n b 1. a n1 x a nn x n b n x i 0 x i geheel i = 1,..., n. Een variant van integer programming is mixed integer programming (MIP). Hierbij moeten x i geheel zijn, voor i I, met een I een gegeven verzameling. Een deel van de

20 8 HOOFDSTUK 2. ALGORITMEN VOOR INTEGER PROGRAMMING variabelen kan dus reëel zijn, een deel moet geheel zijn. Het probleem vertaalt zich tot minimaliseer c 1 x c n x n onder de voorwaarden a 11 x a 1n x n b 1. a n1 x a nn x n b n x i 0 i = 1,..., n x i geheel i I. Voorbeeld: het transportprobleem (vervolg) We kunnen nu het transportprobleem (voor gehele eenheden) beschrijven met behulp van integer programming: minimaliseer onder de voorwaarden n m b ij x ij i=1 j=1 n x ij d j i=1 m x ij s i j=1 x ij 0 j = 1,..., m i = 1,..., n i = 1,... n; j = 1,..., m x ij geheel i = 1,... n; j = 1,..., m. Opmerking Alhoewel er veel minder mogelijkheden zijn voor de waarden van x i bij integer programming dan bij lineair programmeren, is het veel minder eenvoudig om de optimale waarden voor x i te vinden. In tegenstelling tot het symplexalgoritme bij linear programming, bestaat er geen polynomiaal algoritme om (mixed) integer programming problemen op te lossen. In het vervolg van dit hoofdstuk worden verschillende algoritmen besproken om mixed integer programming problemen op te lossen. Deze zijn hoofdzakelijk afkomstig uit [2]. 2.2 Backtracking We weten bij integer programming problemen, indien het toegelaten gebied begrensd is, wat de waarden zijn die de variabelen kunnen aannemen. Bovendien is dit aantal

21 2.3. BRANCH AND BOUND 9 waarden eindig. We kunnen dus exhaustief alle waarden overlopen die alle variabelen kunnen aannemen. Dit kunnen we doen met behulp van backtracking. Voor elke mogelijke oplossing die we krijgen, berekenen we de functiewaarde van de doelfunctie. Indien deze beter is dan de huidige beste waarde, vervangen we de huidige beste waarde door de nieuwe oplossing. Na alle mogelijkheden te hebben overlopen, weten we de optimale waarden voor x i en hebben we het optimum van de doelfunctie gevonden. Het hoeft weinig uitleg dat deze methode vrij tijdrovend is. Voor kleine problemen is dit algoritme haalbaar, maar met toenemende grootte zal de uitvoeringstijd zeer snel stijgen. Voor grote problemen zullen we dus een andere aanpak moeten hanteren. 2.3 Branch and bound Bij backtracking vullen we één voor één toegestane waarden in voor de variabelen. We kunnen ons afvragen of het op een bepaald moment nog de moeite is om de volgende variabelen in te vullen, bijvoorbeeld als we zien dat de functiewaarde van het objectief nooit meer beter kan worden dan de tot nu toe beste functiewaarde. Het probleem bestaat er nu in een goede snoeifunctie te vinden. Deze functie moet snel berekend kunnen worden en in elk deel van de backtracking-boom een betere waarde hebben dan de beste functiewaarde van de doelfunctie in dat gebied van de boom. Integer programming problemen hebben zo n functie, namelijk de waarde die een algoritme zal geven als we het probleem beschouwen als een linear programming probleem. Deze functie noemen we de lineaire relaxatie. Het simplexalgoritme is hier een voorbeeld van. Het simplexalgoritme is een polynomiaal algoritme, dus relatief snel te berekenen. Het simplexalgoritme zal altijd een betere of gelijke doelfunctiewaarde opleveren dan wat de doelfunctie kan zijn in het integer programming probleem. Dit is eenvoudig in te zien. Stel dat het linear programming probleem een oplossing x heeft waarbij alle x i geheel zijn. Dan is de doelfunctiewaarde van het lineair probleem dezelfde als deze van het integer probleem. Is minstens één van de x i niet geheel, dan zal de doelfunctiewaarde van het lineair probleem beter zijn dan deze van het integer probleem, want anders zou het simplexalgoritme de oplossing van het integer probleem gevonden hebben. Maar dan zijn alle x i geheel, een tegenstrijdigheid. We kunnen dus in elke stap nagaan wat de oplossing van het lineaire probleem is. Indien de functiewaarde van het lineaire probleem in dit geval beter is dan de best gevonden oplossing op dit moment, dan gaan we deze stap verder uitdiepen. Indien de

22 10 HOOFDSTUK 2. ALGORITMEN VOOR INTEGER PROGRAMMING functiewaarde van het lineaire probleem slechter is dan de best gevonden oplossing, dan hoeven we niet verder te gaan. We weten dat de oplossing van het lineaire probleem in de volgende stap niet beter kan worden dan die in deze stap. De oplossing van het integer programming probleem is nooit beter dan de waarde van de lineaire relaxatie, dus kan de optimale oplossing zich niet meer in die tak van het algoritme bevinden. 2.4 Branch and bound met startoplossing We passen bij dit algoritme ongeveer dezelfde strategie toe als bij het algoritme uit de vorige sectie, maar we starten hier van de oplossing van het lineaire probleem. We berekenen deze via de lineaire relaxatie. We hebben twee mogelijkheden: 1. Bij de oplossing x van het lineair probleem zijn alle x i geheel. In dit geval hebben we al meteen een oplossing van het integer probleem gevonden. 2. De oplossing x bevat niet-gehele componenten x i. Stel dat x k niet geheel is, voor een zekere k. We splitsen het probleem in twee deelproblemen: we lossen het probleem op waarbij x k = x k en het probleem waarbij x k = x k (waarbij x het grootste gehele getal is dat kleiner is dan of gelijk is aan x en x het kleinste gehele getal is dat groter is dan of gelijk is aan x). In het tweede geval hebben we dus een probleem gecreëerd van lengte 1 minder dan voorgaand probleem, waarbij we de waarde van x k vast houden. We passen opnieuw het algoritme toe op dit kleiner probleem. Zo kunnen we verder gaan en uiteindelijk telkens ons probleem verkleinen tot we enkel gehele waarden overhouden. We kunnen ook telkens kijken naar de functiewaarde die de oplossing van het lineair probleem heeft. Indien deze slechter is dan de huidige beste functiewaarde, dan hoeven we die oplossing niet verder uit te diepen omdat de lineaire relaxatie een betere oplossing heeft dan het niet-lineaire probleem. Voorbeeld: knapsack-probleem Veronderstel dat we een rugzak willen vullen met voorwerpen. We wensen dat de totale waarde van de voorwerpen in onze rugzak zo hoog mogelijk is. De voorwerpen hebben echter ook een gewicht, en onze rugzak heeft een bepaalde capaciteit. We kunnen niet alle voorwerpen meenemen. We moeten dus een keuze maken welke voorwerpen we willen meenemen. Dit is het knapsack-probleem. Dit probleem kan beschreven worden als een integer programming probleem. We willen de totale waarde van de voorwerpen in onze rugzak maximaliseren, onder de voorwaarde dat het gewicht van de voorwerpen de capaciteit van onze rugzak niet overstijgt.

23 2.4. BRANCH AND BOUND MET STARTOPLOSSING 11 Stel dat we N voorwerpen hebben, genoteerd door (v i, w i ), voor i = 1,..., n, met v i de waarde van voorwerp i en w i het gewicht van voorwerp i. De capaciteit van onze rugzak noteren we als K. Dan is het probleem te schrijven als maximaliseer onder de voorwaarden N v i x i i=1 N w i x i K i=1 x i {0, 1}, waarbij x i = 0 als voorwerp i niet moet worden toegevoegd aan de rugzak en x i = 1 als voorwerp i wel wordt toegevoegd. We zoeken eerst een lineaire relaxatie die kan gebruikt worden in het branch and boundalgoritme. Het lineaire probleem is dezelfde als het integer probleem; het enige verschil is dat er nu ook delen van voorwerpen in de rugzak mogen gestoken worden. Dit probleem is zeer snel op te lossen door de voorwerpen toe te voegen die een grootste verhouding waarde/gewicht hebben. We rangschikken die voorwerpen volgens deze verhouding en voegen deze toe in dalende volgorde, zolang het kan. Nadat het laatste volledige voorwerp is toegevoegd, kan de rest van de rugzak worden opgevuld met een deel van het volgende voorwerp. Stel dus dat we de voorwerpen rangschikken in dalende volgorde van verhouding waarde/gewicht. Dan zit in de rugzak een totale waarde ( K ) k i=1 V = v v k + w i v k+1, w k+1 met k de index van het laatste voorwerp dat nog volledig in de rugzak past. Nu we onze lineaire relaxatie gevonden hebben, kunnen we het branch and boundalgoritme toepassen. We bepalen eerst de oplossing van de lineaire relaxatie. Vervolgens maken we twee kleinere problemen door de niet-gehele waarde eenmaal te vervangen door 0, en eenmaal door 1. Zo gaan we verder tot alle waarden geheel zijn. Concreet voorbeeld Stel dat onze rugzak een capaciteit heeft van 10 kg. gegeven: We hebben vier voorwerpen Voorwerp w i v i e 10 e 5 e 8 e 20

24 12 HOOFDSTUK 2. ALGORITMEN VOOR INTEGER PROGRAMMING Na het sorteren van deze voorwerpen volgens de verhouding waarde/gewicht, zal de lineaire relaxatie voorwerpen 4, 3 en 1 (in deze volgorde) volledig in de rugzak steken. Dan is er nog 1 kg plaats over in de rugzak. Er kan dus nog één vijfde van voorwerp 2 mee in de rugzak. De vector x zal dan dus gelijk zijn aan x = (1, 0.2, 1, 1). De totale waarde van de rugzak is dan e 39. Zie ook Figuur 2.1 We zullen dus twee deelproblemen construeren: één waarbij x 2 = 0 en één waarbij x 2 = 1. Bij beide deelproblemen berekenen we nog eens de lineaire relaxatie. In het geval dat x 2 = 0 krijgen we als oplossing een vector met enkel gehele waarden: alle voorwerpen behalve voorwerp 2 worden in de rugzak weggestoken. De totale waarde van de rugzak is e 38. In het geval dat x 2 = 1 zal het algoritme enkel het voorwerp 4 nog volledig aan de rugzak met voorwerp 2 toevoegen. Dan is er 9 kg in de rugzak aanwezig, dus kan er nog 1 kg bij. Daarvoor zal het nog de helft van voorwerp 3 toevoegen. De waarde van de rugzak is op dat moment e 29. Deze lineaire relaxatie geeft echter een waarde die lager is dan de huidige beste waarde, e 38. We hoeven dus dit geval niet verder te onderzoeken. x = (1, 0.2, 1, 1) Waarde: e 39 Gewicht: 10 kg x 2 = 0 x 2 = 1 x = (1, 0, 1, 1) Waarde: e 38 Gewicht: 9 kg x = (1, 1, 0.5, 1) Waarde: e 29 Gewicht: 10 kg Figuur 2.1: Overzicht van het knapsack probleem De rugzak met maximale waarde met capaciteit 10 kg is dus de rugzak die voorwerpen 1, 3 en 4 bevat en is e 38 waard. 2.5 Linear programming met Gomory cuts De vorige twee methoden gebruiken allebei de lineaire relaxatie om de oplossing te vinden. Een andere methode die deze relaxatie gebruikt, is de methode die gebruik maakt van Gomory cuts. Een oplossing van een linear programming probleem bevindt zich altijd in een hoekpunt van het toegelaten gebied. Als we dus een oplossing zoeken met de lineaire relaxatie,

25 2.5. LINEAR PROGRAMMING MET GOMORY CUTS 13 zal deze oplossing op een hoekpunt liggen. Deze oplossing is over het algemeen reëel en is dus geen oplossing van het integer programming probleem. Een mogelijke manier om wel een gehele oplossing te vinden zou kunnen zijn om het gebied te verkleinen en er zo voor te zorgen dat het hoekpunt van de huidige optimale oplossing wordt weggesneden. Indien we nu opnieuw de oplossing van de lineaire relaxatie bepalen, komt deze oplossing in een hoekpunt van het nieuwe toegelaten gebied te liggen. Indien alle componenten van de coördinaat van dit hoekpunt geheel zijn, de oplossing heeft dan enkel gehele waarden, hebben we de oplossing van het integer programming probleem gevonden. Indien de oplossing van het lineaire probleem niet geheel is, kunnen we opnieuw dit hoekpunt wegsnijden en zo verder doen tot we een gehele oplossing hebben gevonden. Het wegsnijden van deze hoekpunten doen we door nieuwe voorwaarden op te leggen aan het probleem. Natuurlijk zijn niet alle voorwaarden mogelijk: we kunnen eventueel ook gehele oplossingen wegsnijden! De voorwaarden die we toevoegen moeten voldoen aan volgende eigenschappen: Elke mogelijke gehele oplossing van het oorspronkelijke probleem is ook een mogelijke oplossing van het nieuwe probleem; dit betekent dat er geen mogelijke gehele oplossingen worden weggesneden. De huidige (niet-gehele) oplossing is geen oplossing meer van het nieuwe probleem; dit betekent dat deze oplossing wordt weggesneden door de nieuwe voorwaarde. Let wel op dat in de slechtste gevallen er een exponentieel aantal van deze voorwaarden moet worden toegevoegd om een oplossing (of geen oplossing indien er geen gehele oplossing bestaat) te krijgen. De vraag blijft nu natuurlijk nog hoe we die voorwaarden, of cuts 1, kunnen bepalen. Veronderstel dat we de simplexmethode gebruiken om de oplossing van het lineaire probleem te bepalen, dan volgt in de tussenstappen, eventueel na hernummering van de variabelen: n x 1 + a 1i x i = b 1 (2.1) x m + i=m+1 n i=m+1. a mi x i = b m, waarbij we dan de oplossing krijgen door x i = 0 te stellen, voor i = m + 1,..., n. De oplossing van het lineaire probleem is dan dus x 1 = b 1,..., x m = b m, x m+1 = 0,..., x n = 0. 1 Van het Engelse cut: (weg)snijden.

26 14 HOOFDSTUK 2. ALGORITMEN VOOR INTEGER PROGRAMMING Indien alle b i geheel zijn, hebben we een oplossing van het integer probleem gevonden. Veronderstel dus dat minstens één b i niet geheel is, stel dat dit b 1 is. We weten dat n i=m+1 a 1i x i n i=m+1 a 1ix i. Er geldt dus: x 1 + n i=m+1 a 1i x i x 1 + n i=m+1 a 1i x i = b 1. Bovendien is het linkerlid geheel in het integer probleem, want daar is x 1 geheel, dus geldt er: x 1 + n i=m+1 We kunnen nu het volgende observeren: a 1i x i b 1. (2.2) Alle gehele oplossingen van het oorspronkelijke probleem voldoen nog steeds aan ongelijkheid (2.2), door de redenering hierboven gegeven. Bij de oplossing van het lineaire probleem was x 1 = b 1. Dit voldoet niet meer aan ongelijkheid (2.2), want we hebben verondersteld dat b 1 niet geheel is. Dit betekent dat dit een goede voorwaarde is om toe te voegen aan het probleem. Vervolgens bepalen we nogmaals de lineaire oplossing van dit probleem. Merk op dat onze oplossing niet meer toegelaten zal zijn, dus kunnen we het simplexalgoritme niet verder toepassen. We kunnen echter wel het algoritme toepassen op het duale probleem: daar zal de oplossing wel toegelaten zijn. Zo doen we verder tot we uiteindelijk een oplossing gevonden hebben, of er geen oplossing gegeven kan worden. We kunnen de voorwaarde (2.2) ook nog herschalen. We trekken daarvoor ongelijkheid (2.2) af van vergelijking (2.1) en we bekomen zo n i=m+1 (a 1i a 1i )x i b 1 b 1. (2.3) Voorbeeld Beschouw het volgende tweedimensionale probleem: maximaliseer x 2 onder de voorwaarden 4x 1 2x 2 1 4x 1 + 6x 2 19 x 1, x 2 0 x 1, x 2 geheel.

27 2.5. LINEAR PROGRAMMING MET GOMORY CUTS 15 We lossen dit probleem op met behulp van Gomory cuts, om deze methode te verduidelijken. Eerst en vooral schrijven we het probleem in de standaardvorm: minimaliseer x 2 onder de voorwaarden 4x 1 + 2x 2 1 4x 1 + 6x 2 19 x 1, x 2 0 x 1, x 2 geheel. We herschrijven vervolgens de ongelijkheden als gelijkheden door er spelingsvariabelen aan toe te voegen. We krijgen dan volgend probleem: minimaliseer x 2 onder de voorwaarden 4x 1 + 2x 2 + x 3 = 1 4x 1 + 6x 2 + x 4 = 19 x 1, x 2, x 3, x 4 0 x 1, x 2, x 3, x 4 geheel. We verkrijgen dan het volgende tableau behorend bij dit probleem, als we het lineaire probleem willen oplossen: of waarbij we in de oplossing rij 1 en 2 verwisseld hebben. Uit het tableau kunnen we aflezen dat het maximum wordt bereikt als x 1 = 1 en x 2 = 5 2. Dit kunnen we ook zien in Figuur 2.2; daar is het toegelaten gebied het gebied tussen de x 1 -as, x 2 -as en de twee rechten. In het tableau zien we nu dat in de tweede rij de waarde van b 2 niet geheel is. Aan de hand van deze rij stellen we een Gomory cut op. We gebruiken hiervoor de uitdrukking (2.3) en krijgen dus 1 8 x x (2.4) We weten dat x 3 = 1+4x 1 2x 2 en x 4 = 19 4x 1 6x 2, dus kunnen we deze substitueren in (2.4) en verkrijgen we 1 8 (1 + 4x 1 2x 2 ) (19 4x 1 6x 2 ) 1 2 x 2 2.

28 16 HOOFDSTUK 2. ALGORITMEN VOOR INTEGER PROGRAMMING x A x Figuur 2.2: Toegelaten gebied en reële oplossing In Figuur 2.3 is deze Gomory cut toegevoegd. We hebben nu een extra voorwaarde (2.4) die we toevoegen aan het tableau. We schrijven deze eerst in standaardvorm 1 8 x x 4 + x 5 = 1 2. We verkrijgen dan het volgende tableau, dat we oplossen via het duale simplexalgoritme: of In het tableau staat nu dat de optimale waarde bereikt wordt als x 1 = 7 4 en x 2 = 2. In Figuur 2.3 kunnen we dit ook zien; de eerste Gomory cut is er toegevoegd en het optimale punt is er aangeduid. In de tweede rij van het tableau is de waarde van b 2 niet geheel, dus daar kunnen we opnieuw een Gomory cut uithalen. We verkrijgen dan We hebben nog steeds dat x 4 = 19 4x 1 6x 2 en nu is ook 1 4 x x (2.5) x 5 = x x 4 = (1 + 4x 1 2x 2 ) (19 4x 1 6x 2 ) = 2 x 2,

29 2.5. LINEAR PROGRAMMING MET GOMORY CUTS 17 x B x Figuur 2.3: Toegelaten gebied met 1 Gomory cut en reële oplossing dus als we deze waarden voor x 4 en x 5 substitueren in (2.5), krijgen we 1 4 (19 4x 1 6x 2 ) (2 x 2) 3 4 x 1 + 2x 2 5. Deze Gomory cut is toegevoegd in Figuur 2.4. We kunnen nu opnieuw de voorwaarde (2.5) toevoegen aan het tableau. Ook deze schrijven we eerst in de standaardvorm 1 4 x x 5 +x 6 = 3 4. Het tableau wordt dan: of Nu zijn alle b i geheel, dus hebben we een oplossing gevonden van het integer probleem. We hebben x 1 = 1 en x 2 = 2, en als we kijken op Figuur 2.4, zien we dat dit inderdaad de hoogste gehele waarde voor x 2 is in het toegelaten gebied. We hebben dus telkens het toegelaten gebied verkleind zodanig dat de niet-gehele oplossing er niet meer toe behoorde en er geen enkel geheel punt in het toegelaten gebied werd verwijderd.

30 18 HOOFDSTUK 2. ALGORITMEN VOOR INTEGER PROGRAMMING x C x Figuur 2.4: Toegelaten gebied met 2 Gomory cuts en gehele oplossing

31 Hoofdstuk 3 Facility location 3.1 Probleemstelling Veronderstel dat een firma nieuwe faciliteiten wil openen in een bepaald gebied. Er zijn verschillende mogelijke locaties waar deze faciliteiten kunnen komen. Het bouwen en openen van een faciliteit brengt natuurlijk een kost met zich mee. Deze is op voorhand gekend. Elke faciliteit heeft ook een bepaalde capaciteit om goederen op te slaan (afhankelijk van de grootte van de te bouwen faciliteit). In het gebied zijn er klanten die willen gebruik maken van de faciliteiten van de firma. De klanten zitten reeds in een klantenbestand. De firma moet goederen vervoeren van hun faciliteit naar de klanten die bij die bepaalde faciliteit zijn aangesloten. Elke klant heeft een bepaalde vraag van aantal goederen dat moet geleverd worden. De bedoeling is dat elke klant bij één faciliteit is aangesloten. Het doel is nu om bepaalde faciliteiten te openen en bepaalde niet te bouwen, en vervolgens elke klant met een faciliteit te verbinden en zo de totale kost (openen van de faciliteiten plus de vervoerskosten) zo laag mogelijk te houden. Figuur 3.1: Visualisatie van het facility location probleem ([1]) 19

32 20 HOOFDSTUK 3. FACILITY LOCATION Wiskundige formulering Veronderstel dat er n faciliteiten gegeven zijn. Een faciliteit f i heeft een coördinaat (x i, y i ), een capaciteit cap i en een kost s i om de faciliteit te openen (i = 1,..., n). Hiernaast zijn er m klanten die elk met een faciliteit worden verbonden. Een klant c j heeft ook een coördinaat (x j, y j ) en een vraag d j van aantal goederen gegeven (j = 1,..., m). Stel A de verzameling van alle geopende faciliteiten. Stel bovendien voor elke faciliteit f i de verzameling C i met klanten die bij f i zijn aangesloten. Dan kunnen we de totale kost schrijven als n i=1 f i A ( s i + m d(f i, c j ) j=1 c j C i ), (3.1) waarbij d(f, c) de kost is om goederen te vervoeren van faciliteit f naar klant c. Dit probleem kan op verschillende manieren worden opgelost. In de volgende secties worden deze verschillende aanpakken besproken. 3.2 Gretige benadering De eenvoudigste, maar minder nauwkeurige, oplossing kunnen we vinden door het maken van een gretige benadering. We willen liefst hebben dat een klant bij een zo dicht mogelijke faciliteit is aangesloten. We overlopen dus alle klanten en voegen deze toe bij de dichtstbijzijnde faciliteit. Zie Algoritme 1 voor de pseudocode. De kost wordt berekend via de functie CalculateCost, die de som (3.1) berekent. Algoritme 1 FLGreedy1 Input: Lijst facilities met n faciliteiten, lijst customers met m klanten Output: De kost cost en oplossing solution 1: solution [ ] 2: for i from 0 to m 1 do 3: c customers[i] 4: j index van de dichtstbijzijnde faciliteit bij c waar c nog aan kan worden toegevoegd 5: solution[i] j 6: end for 7: cost CalculateCost Een probleem is dat dit algoritme geen rekening houdt met welke faciliteiten geopend moeten worden. Soms kan het beter zijn om een klant met een iets verdere faciliteit te verbinden die al geopend was om zo geen nieuwe faciliteit te openen en zo de kost lager te houden. Dit leidt tot het algoritme in de volgende sectie.

33 3.3. GRETIGE BENADERING: VERSIE Gretige benadering: versie 2 Een gretig algoritme om te bepalen welke faciliteiten moeten worden geopend en welke niet, bestaat erin om één voor één de faciliteiten te sluiten en een gretige oplossing te bepalen. De geopende faciliteiten van de oplossing met de beste kost behouden we. Bij deze open faciliteiten doen we dit nog eens over. Dit doen we zolang de capaciteit groot genoeg blijft voor de vraag, of tot er geen betere kost meer kan worden gevonden. Om dit algoritme uit te voeren, gebruiken we Algoritme 1, waarbij we de verzameling faciliteiten telkens verkleinen. In Algoritme 2 staat de pseudocode weergegeven. Algoritme 2 FLGreedy2 Input: Lijst facilities met n faciliteiten, lijst customers met m klanten Output: De kost cost en oplossing solution 1: best facilities open [1,..., 1] lijst met lengte n 2: facilities open [1,..., 1] lijst met lengte n 3: Bepaal cost en solution via FacilityLocationGreedy1 4: best cost cost 5: best solution solution 6: while best cost kan worden verbeterd do 7: facilities open best facilities open 8: for i from 0 to n 1 do 9: facilities open[i] 0 faciliteit i blijft gesloten 10: if Voldoende capaciteit voor vraag klanten then 11: Bepaal cost en solution via FacilityLocationGreedy1, met enkel de geopende faciliteiten 12: if cost < best cost then 13: best cost cost 14: best solution solution 15: best facilities open facilities open 16: end if 17: end if 18: facilities open[i] 1 faciliteit i weer open 19: end for 20: end while 21: return best cost, best solution

34 22 HOOFDSTUK 3. FACILITY LOCATION 3.4 Gretige benadering: versie 3 We kunnen nu nog een verbetering aanbrengen aan het algoritme: we kunnen de klanten op een bepaalde manier toevoegen aan de faciliteit. We kunnen ervoor kiezen om eerst alle klanten met de kleinste vraag toe te voegen, zodanig dat er zo veel mogelijk klanten bij de dichtstbijzijnde faciliteit kunnen worden toegevoegd. De klanten met een te grote capaciteit zullen dan naar een andere faciliteit worden doorgeschoven. Om dit eenvoudig en snel te kunnen bekijken, slaan we per klant een lijst op met alle faciliteiten, gesorteerd volgens oplopende afstand. De dichtste faciliteiten staan dus eerst in de lijst. Nadat we dit voor elke klant hebben gedaan, sorteren we de volledige lijst volgens opeenvolgende vraag van de klanten. Zo kunnen we eerst de klanten toevoegen met de kleinste vragen en kunnen er dus meer klanten bij de dichtste faciliteiten worden toegevoegd. Het hoofdalgoritme werkt nog steeds hetzelfde: we bepalen opnieuw door het sluiten van faciliteit per faciliteit wat de beste score oplevert en we kiezen dan die faciliteiten. Zo sluiten we telkens een faciliteit tot de score niet meer verbeterd wordt. Eerst wordt de benadering getoond voor de volledige lijst faciliteiten in Algoritme 3. Algoritme 3 FLApproximation Input: Lijst facilities met n faciliteiten, lijst customers met m klanten Output: De kost cost en oplossing solution 1: Maak een lijst list waarin per klant de faciliteiten gesorteerd zijn volgens afstand en de klanten gesorteerd zijn volgens vraag, in stijgende volgorde 2: solution [ ] 3: for i from 0 to m 1 do 4: c klant horende bij list[i] 5: if er een dichtstbijzijnde faciliteit bij de klant c bestaat waaraan c nog kan worden toegevoegd then 6: j index van deze faciliteit 7: solution[i] j 8: else 9: return +, [ ] geen oplossing gevonden 10: end if 11: end for 12: cost CalculateCost 13: return cost, solution Vervolgens kunnen we nog het volledige algoritme neerschrijven. Algoritme 4. Dit is gegeven in Dit algoritme is bijna overal gelijk aan Algoritme 2. Het enige verschil is dat er als benadering gebruik wordt gemaakt van Algoritme 3.

35 3.4. GRETIGE BENADERING: VERSIE 3 23 Algoritme 4 FLGreedy3 Input: Lijst facilities met n faciliteiten, lijst customers met m klanten Output: De kost cost en oplossing solution 1: best facilities open [1,..., 1] lijst met lengte n 2: facilities open [1,..., 1] lijst met lengte n 3: Bepaal cost en solution via FacilityLocationApproximation 4: best cost cost 5: best solution solution 6: while best cost kan worden verbeterd do 7: facilities open best facilities open 8: for i from 0 to n 1 do 9: facilities open[i] 0 faciliteit i blijft gesloten 10: if Voldoende capaciteit voor vraag klanten then 11: Bepaal cost en solution via FacilityLocationApproximation, met enkel de geopende faciliteiten 12: if cost < best cost then 13: best cost cost 14: best solution solution 15: best facilities open facilities open 16: end if 17: end if 18: facilities open[i] 1 faciliteit i weer open 19: end for 20: end while 21: return best cost, best solution Dit algoritme kan nog verder worden verfijnd door het aantal open faciliteiten nauwkeuriger te doen veranderen. In plaats van één voor één de faciliteiten te sluiten, kunnen we ervoor kiezen om enkele faciliteiten samen te beschouwen. We kiezen bijvoorbeeld vier faciliteiten die we willen openen of sluiten. We geven deze alle mogelijke waarden en voor elke waarde berekenen we dan de benadering. We behouden dan de opening en sluiting van deze vier faciliteiten en nemen daarna de volgende vier faciliteiten, om hier opnieuw hetzelfde te doen. Concreet kunnen we dus bij vier faciliteiten de volgende verdelingen hebben: [1, 1, 1, 1], [1, 1, 1, 0], [1, 1, 0, 1], [1, 1, 0, 0],..., [0, 1, 0, 0], [0, 0, 0, 0]. Deze verdelingen vervangen we telkens in de volledige verdeling van alle faciliteiten en we bepalen daarna de benaderde oplossing. Deze methode is nog iets nauwkeuriger omdat het bijvoorbeeld beter kan zijn om samen faciliteiten 3 en 4 te sluiten, terwijl Algoritme 4 misschien de sluiting van faciliteit 2 zal opdringen, omdat dit op dit moment de beste kost oplevert. Faciliteit 2 wordt

36 24 HOOFDSTUK 3. FACILITY LOCATION dan nooit meer geopend, dus kan het nooit meer faciliteit 3 en 4 sluiten en faciliteit 2 openen. De pseudocode wordt gegeven in Algoritme 5. Algoritme 5 FLGreedy4 Input: Lijst facilities met n faciliteiten, lijst customers met m klanten Output: De kost cost en oplossing solution 1: best facilities open [1,..., 1] lijst met lengte n 2: best cost 3: best solution [ ] 4: number of steps 4 kan worden veranderd 5: i 0 6: while i < n do 7: facilities open short lijst met alle 2 number of steps mogelijke combinaties van number of steps nullen en enen 8: for j from 0 to 2 number of steps do 9: facilities open best facilities open 10: facilities open[i,...,number of steps] facilities open short[j] 11: Bepaal cost en solution via FacilityLocationApproximation, met enkel de geopende faciliteiten 12: if cost < best cost then 13: best cost cost 14: best solution solution 15: best facilities open facilities open 16: end if 17: end for 18: end while 19: return best cost, best solution Merk op dat op regels 7-10 kan voorkomen dat er geen number of steps faciliteiten meer over zijn. Dan wordt enkel de rest van het aantal faciliteiten in rekening gebracht. Voor de eenvoud wordt dit niet in de pseudocode opgenomen. 3.5 Branch and bound Alle voorgaande algoritmen waren benaderingen voor het facility location probleem. In deze sectie en volgende secties bespreken we enkele exacte algoritmen om dit probleem op te lossen. Een mogelijkheid om dit probleem op te lossen, is exhaustief alle mogelijkheden uitproberen. We controleren telkens of onze oplossing nog kan, i.e. dat de capaciteiten van de faciliteiten de vraag van de klanten aan kan. Indien dit zo is, kunnen we verder gaan

37 3.5. BRANCH AND BOUND 25 in de recursie. Indien dit niet meer kan, kunnen we eens proberen of de klant bij de volgende faciliteit kan gezet worden. We kunnen ook de kost van de huidige oplossing in rekening brengen bij het bepalen of we de volgende recursiestap gaan uitvoeren. Als we een klant bij een faciliteit toevoegen, stijgt de kost. Deze kan nooit dalen. Indien we op een bepaald tijdstip een kost hebben die hoger is dan de huidige beste kost, dan kan de kost in dit deel van de recursie nooit meer kleiner worden dan de huidige beste kost en kunnen we dus geen optimale oplossing meer vinden. We hoeven in dit geval dus niet meer naar de volgende recursiestap te gaan. Algoritme 6 FLRecursive(j) Input: Lijst facilities met n faciliteiten, lijst customers met m klanten, lijst solution met de huidige oplossing, de huidige kost cost, de huidige beste oplossing best sol, de huidige beste kost best cost Output: De kost best cost en oplossing best sol 1: if j = m then 2: cost CalculateCost 3: if cost < best cost then 4: best sol solution 5: best cost cost 6: end if 7: else 8: for i from 0 to n 1 do 9: if voldoende capaciteit bij faciliteit i om klant j toe te voegen then 10: var cost cost 11: solution[j] i 12: Pas cost aan 13: if cost < best cost then 14: FacilityLocationRecursive(j + 1) 15: end if 16: cost var cost 17: end if 18: end for 19: end if 20: return best cost, best sol In Algoritme 6 is de pseudocode gegeven. Dit algoritme zal de juiste oplossing gegarandeerd verkrijgen, maar het hoeft geen betoog dat het zeer lang zal duren voor grote problemen. Het probleem heeft een exponentiële uitvoeringstijd.

38 26 HOOFDSTUK 3. FACILITY LOCATION 3.6 Mixed integer programming Het facility location probleem kan beschreven worden als een mixed integer programming probleem. Om dit te doen, moeten we eerst en vooral onze variabelen definiëren. We zullen ervoor kiezen om niet de indices van de faciliteiten te kiezen als variabelen. Een eenvoudigere keuze is om voor elke faciliteit met index i een variabele x i te nemen die 1 is als de faciliteit open is en die 0 is als de faciliteit gesloten is. Vervolgens kiezen we, voor elke faciliteit met index i en voor elke klant met index j, de variabele y i,j die 1 is als klant j verbonden is met faciliteit i en 0 als dit niet zo is. We kunnen nu de kost al schrijven met deze variabelen (vergelijk met (3.1)): n s i x i + i=1 n i=1 j=1 m d(f i, c j ) y i,j, waarbij s i de kost is om faciliteit i te openen en d(f i, c j ) de kost is om goederen te vervoeren van faciliteit i naar klant j. Voor deze kost wordt meestal de afstand gekozen tussen de klant en de faciliteit, vandaar de notatie d. We hebben nu al de kost kunnen herschrijven in termen van onze variabelen. hebben natuurlijk nog verschillende voorwaarden die moeten voldaan zijn. We 1. We moeten er rekening mee houden dat een klant enkel met een faciliteit kan verbonden worden als de faciliteit open is. Dit kunnen we als volgt uitdrukken in termen van de variabelen: y i,j x i, i = 1,..., n, j = 1,..., m. Als x i = 0, dan is de faciliteit gesloten en dan moet y i,j = 0, zodat klant j niet bevoorraad wordt door faciliteit i. Als x i = 1, dan is de faciliteit open en dan kan y i,j = 1 of y i,j = 0. Dan kan faciliteit i klant j bevoorraden of niet. 2. Elke klant moet verbonden zijn met juist één faciliteit. Dit betekent dat van alle mogelijke variabelen y i,j, voor een vaste klant j, er slechts één y i,j gelijk mag zijn aan 1. Een eenvoudige manier om dit te schrijven is: n y i,j = 1 j = 1,..., m. i=1 Als er, voor een vaste j, één y i,j = 1, dan moet de rest gelijk zijn aan 0. De som van deze variabelen moet gelijk zijn aan 1, dus indien er één gelijk is aan 1, moet de rest 0 zijn. Bovendien kunnen ze niet allemaal 0 zijn, want dan zou de som niet 1 kunnen zijn.

39 3.6. MIXED INTEGER PROGRAMMING Voorwaarden waaraan ook zeker moet worden voldaan, zijn de capaciteitsvoorwaarden. Bij elke faciliteit moet voldoende capaciteit zijn om aan de vraag van al haar klanten te voldoen. Dit betekent dat de som van de vragen van al de klanten kleiner dan of gelijk aan de capaciteit van de faciliteit moet zijn. Aan de hand van de variabelen kunnen we dit als volgt neerschrijven: m d j y i,j cap i i = 1,..., n. j=1 Als y i,j = 1, dan is klant j verbonden met faciliteit i en wordt de vraag van de klant in rekening gebracht. Voor al de klanten die bevoorraad worden door faciliteit i is y i,j = 1. Voor al deze klanten wordt hun vraag opgeteld en vergeleken met de capaciteit van faciliteit i. Voor de klanten j die niet bij faciliteit i zijn aangesloten is y i,j = 0, zodat de vraag van deze klanten niet wordt meegerekend. Nadat we al deze voorwaarden in beschouwing hebben genomen, kunnen we dus het mixed integer programming model opstellen. minimaliseer n i=1 s i x i + n m i=1 j=1 d(f i, c j ) y i,j onder de voorwaarden y i,j x i, i = 1,..., n, j = 1,..., m m y i,j = 1 i = 1,..., m j=1 m d j y i,j cap i j=1 x i {0, 1} i = 1,..., n i = 1,..., n y i,j {0, 1} i = 1,..., n, j = 1,..., m. Opmerkingen Als we een lijst met n faciliteiten en een lijst met m klanten hebben om het facility location probleem op toe te passen en we wensen dit op te lossen met mixed integer programming, dan krijgen we uiteindelijk n + m n = n(m + 1) variabelen die moeten worden bepaald. Het aantal voorwaarden bij dit probleem is gelijk aan m n + m + n, met daarbij ook nog n + m voorwaarden die zeggen dat de variabelen enkel waarden 0 en 1 kunnen aannemen. We zien dus dat het aantal variabelen en vergelijkingen snel toeneemt indien we het aantal faciliteiten en klanten vergroten. Aangezien het oplossen van een mixed integer

40 28 HOOFDSTUK 3. FACILITY LOCATION probleem slechts in exponentiële tijd kan, zal deze oplossingsmethode enkel bij kleine problemen goed werken. 3.7 Mixed integer programming op kleinere deelproblemen Voor grote problemen kunnen we mixed integer programming niet gebruiken om een exacte oplossing te bepalen. Kleinere problemen lukken dan weer wel. We kunnen dus proberen om het grote probleem op te splitsen in kleinere problemen en dan op deze kleinere problemen het mixed integer programming algoritme toe te passen. Dit algoritme wordt getoond in Algoritme 7. Algoritme 7 FLMIPAreas Input: Lijst facilities met n faciliteiten, lijst customers met m klanten Output: De kost cost en oplossing solution 1: solution [ ] 2: Verdeel het vlak met faciliteiten en klanten in kleinere deelgebieden 3: for all deelgebieden d do 4: Bepaal de oplossing van het facility probleem met de faciliteiten en klanten in d via MIP 5: Pas solution aan 6: end for 7: cost CalculateCost 8: return cost, solution Een mogelijk probleem met dit algoritme, is dat er geen faciliteiten liggen in een bepaald deelgebied, maar er wel klanten aanwezig zijn. Deze klanten kunnen dan niet bevoorraad worden door een faciliteit. Een mogelijke oplossing voor dit probleem is om twee aanliggende gebieden dan samen te bekijken en op dit groter gebied het mixed integer probleem op te lossen. Omdat in het kleine gebied geen faciliteiten gelegen zijn, is het aantal faciliteiten in het grotere gebied meestal ook nog niet te hoog om voor een problematische uitvoeringstijd van het algoritme te zorgen. Een andere oplossing bestaat erin het aantal deelgebieden te verkleinen, zodat er uiteindelijk wel faciliteiten aanwezig zijn in elk gebied waar er ook klanten aanwezig zijn. 3.8 Local search Een andere mogelijke benadering kan gebeuren door gebruik te maken van Local Search. Hierbij starten we van een benadering (bv. met Algoritme 3) en proberen we telkens

41 3.8. LOCAL SEARCH 29 om een betere oplossing te verkrijgen door een lokale verandering toe te passen op de huidige oplossing. Er zijn enkele verschillende lokale veranderingen die we kunnen maken: 1. We kunnen twee klanten verwisselen van plaats. Het kan gebeuren dat een klant niet bij zijn dichtstbijzijnde faciliteit zit, en kan verwisseld worden met een klant die beter bij deze faciliteit zit. Dit kan gebeuren indien een klant eerst wordt gekozen om bij een faciliteit te gaan, terwijl er een andere faciliteit is die dichter bij deze klant ligt dan bij de andere klant. In Figuur 3.2 wordt klant 1 (grijze bol) eerst toegevoegd bij zijn dichtstbijzijnde faciliteit, dit is faciliteit 2 (vierkant). Vervolgens wordt klant 2 toegevoegd bij faciliteit 1 omdat er geen plaats meer is in faciliteit 2. Dit is weergegeven door de rode lijnen. Beter zou zijn om deze klanten dan om te wisselen van faciliteit, zodat de groene, gestreepte verbindingen plaats vinden Figuur 3.2: Verwisselen van twee klanten 2. Een volledige faciliteit verwijderen en de klanten van die faciliteit bij hun dichtstbijzijnde, mogelijke faciliteit toevoegen die niet de te verwijderen faciliteit is. Indien een faciliteit een hoge kost heeft om te openen, kan het beter zijn om deze te sluiten en de klanten door een (redelijk) dichte faciliteit te laten bevoorraden. 3. Een faciliteit sluiten en de klanten allemaal naar eenzelfde andere faciliteit verplaatsen. In sommige gevallen kan dit handig zijn, bijvoorbeeld als er één faciliteit is die een zeer lage kost heeft en alle andere een zeer hoge kost hebben. Bijvoorbeeld worden in Figuur 3.3 bij aanvang de drie klanten door faciliteit 1 bediend, dit is weergegeven door de rode lijnen. Stel dat faciliteit 1 een kost 500 heeft om te openen, faciliteit 2 een kost 0 en faciliteit 3 een kost 450. Stel dat de som van de afstanden van de klanten naar faciliteit 2 kleiner is dan 450. Dan is het beter om alle klanten bij faciliteit 2 te stoppen, wat is weergegeven door de groene, gestreepte lijnen.

42 30 HOOFDSTUK 3. FACILITY LOCATION Figuur 3.3: Verwijderen van een faciliteit en alle klanten naar eenzelfde faciliteit brengen Met deze verschillende lokale stappen in het achterhoofd, kunnen we een algoritme opbouwen dat deze veranderingen implementeert. We willen dat deze veranderingen verschillende keren gebeuren, tot er een bepaalde tijd geen betere oplossing meer wordt gevonden. We gaan ook niet elke verandering even vaak laten gebeuren. We gaan een bepaalde kans meegeven dat een bepaalde verandering zich voordoet. De meeste kans geven we aan het verwisselen van twee klanten, stel 80%. Dan geven we 10% kans dat er een faciliteit wordt gesloten en de klanten naar de dichtstbijzijnde mogelijke faciliteit worden verplaatst en ook 10% aan het geval dat alle klanten van een faciliteit worden verplaatst naar eenzelfde andere faciliteit. Na deze veranderingen wordt telkens de score vergeleken met de score van de vorige oplossing. Indien de nieuwe score beter is, wordt de nieuwe oplossing aanvaard als huidige beste oplossing en werken we verder met deze oplossing. Indien de nieuwe score slechter is dan de vorige, dan behouden we de vorige oplossing als huidige oplossing. Er valt nu nog te bepalen welke klanten we zullen wisselen of welke faciliteit we zullen sluiten. We kiezen ervoor om deze random te bepalen. Indien we lang genoeg wachten op een nieuwe oplossing, zal een groot deel van het aantal mogelijkheden overlopen zijn en zal het algoritme redelijk goed presteren. Zie Algoritme 8 voor de pseudocode. Opmerking Aangezien het algoritme random klanten en faciliteiten kiest, kan het gebeuren dat de gevonden oplossingen telkens verschillend zijn als het algoritme opnieuw wordt uitgevoerd. Het kan dus goed zijn om dit algoritme een aantal keer uit te voeren en dan het beste resultaat te nemen.

43 3.9. RESULTATEN 31 Algoritme 8 FLLocalSearch Input: Lijst facilities met n faciliteiten, lijst customers met m klanten Output: De kost cost en oplossing solution 1: Bepaal solution en cost via FacilityLocationApproximation 2: while een tijd geen nieuwe oplossing gevonden do 3: p een random natuurlijk getal uit {0, 1,..., 9} 4: if p = 0 then 5: Sluit een random faciliteit die klanten heeft en verplaats alle klanten naar hun dichtstbijzijnde faciliteit waaraan ze kunnen worden toegevoegd 6: else if p = 1 then 7: Sluit een random faciliteit die klanten heeft en verplaats alle klanten naar eenzelfde random faciliteit die al deze klanten kan bevoorraden 8: else 9: Verwissel twee random klanten van faciliteit, indien de vraag van de klant de capaciteit niet overstijgt 10: end if 11: new cost CalculateCost 12: if new cost < cost then 13: solution deze nieuwe oplossing 14: cost new cost 15: end if 16: end while 17: return cost, solution 3.9 Resultaten In dit hoofdstuk zijn er verschillende algoritmen besproken, van benaderingen tot exacte. De exacte algoritmen zijn echter zeer traag voor grote problemen. We vragen ons nu af welke algoritmen alle problemen aankunnen. Daarvoor nemen we enkele datasets en bekijken we wat de algoritmen als oplossing geven. Deze algoritmen zijn uitgevoerd in Python 2.7, PyCharm Community Edition , op een 3.40 GHz Intel Core i CPU quad core computer, 16 GB RAM-geheugen, 8 GB CPU cache, besturingssysteem Windows 10. Eerst volgt een beschrijving van de datasets die gebruikt zijn om de algoritmen te testen. Dataset 1: een kleine dataset met 25 faciliteiten en 50 klanten. Dataset 2: een dataset met 100 faciliteiten en 100 klanten. Dataset 3: een dataset met 200 faciliteiten en 800 klanten.

44 32 HOOFDSTUK 3. FACILITY LOCATION Dataset 4: een grote dataset met 500 faciliteiten en 3000 klanten. Dataset 5: een zeer grote dataset met 2000 faciliteiten en 2000 klanten. We zullen enkele algoritmen uitvoeren op deze datasets. We zullen de resultaten bekijken van FLGreedy1 (Algoritme 1), FLGreedy4 (Algoritme 5), FLMIPAreas (Algoritme 7) en FLLocalSearch (Algoritme 8). FLGreedy1 zullen we in deze vorm gebruiken. Bij FLGreedy4 gebruiken we ook deze vorm met vier faciliteiten, i.e. het algoritme waarbij we vier faciliteiten samen beschouwen en alle mogelijkheden bekijken om deze faciliteiten te sluiten of te openen. Algoritme FLMIPAreas wordt op dataset 1 en 2 toegepast met een 1 1 opdeling van het gebied (dus het volledige gebied), wat betekent dat deze oplossingen optimaal zijn. Bij dataset 3 wordt een 3 3 opdeling gebruikt en bij dataset 4 en 5 is het gebied in 5 5 gebieden verdeeld. Het laatste algoritme, FLLocalSearch, voeren we vijf keer uit per dataset en we nemen de beste van deze vijf oplossingen. De tijd die gegeven wordt in Tabel 3.1 is de gemiddelde tijd van één uitvoering van het algoritme. We blijven naar een betere oplossing zoeken tot er gedurende een bepaalde tijd geen betere oplossing is gevonden. Bij dataset 1 is dit s, bij dataset 2 30 s, bij dataset s, bij dataset s en bij dataset 5 blijven we 600 s verder zoeken. In Tabel 3.1 worden de resultaten weergegeven van deze algoritmen. Dataset 1 Dataset 2 Dataset 3 Dataset 4 Dataset 5 FLGreedy1 FLGreedy4 FLMIPAreas FLLocalSearch s 0.57 s 0.74 s s s 8.37 s 4.14 s s s s s s s s s s s s s s Tabel 3.1: Resultaten van de verschillende algoritmen op de vijf datasets. Boven: resultaat, afgerond op 2 decimalen; onder: tijd. De bekomen resultaten kunnen op verschillende manieren worden vergeleken. We star-

45 3.9. RESULTATEN 33 ten met het vergelijken van de bekomen waarden die het algoritme uitkomt. Algoritme FLLocalSearch geeft bij bijna alle datasets de beste resultaten, gevolgd door FL- MIPAreas. Dit algoritme bekomt voor het grootste probleem het beste resultaat. Het eenvoudigste gretige algoritme, FLGreedy1, bekomt, zoals verwacht, de minste resultaten. Dit algoritme bekomt echter wel een goede start voor een local search algoritme. Deze resultaten kunnen we ook bekijken in een figuur. We kunnen de klanten verbinden met hun faciliteit waar ze toe behoren volgens het algoritme. De afbeeldingen van de verschillende algoritmen kunnen we dan vergelijken met elkaar. De faciliteiten kunnen we voorstellen door een zwarte stip. In Figuur 3.4 zijn de oplossingen gegeven voor dataset 1. In Figuur 3.4a is gebruik gemaakt van FLGreedy1, waarbij alle klanten bij de dichtstbijzijnde faciliteit waar nog plaats is, zijn toegevoegd. Dit kunnen we ook zien op de figuur (merk op dat de assen niet dezelfde schaal hebben). In Figuur 3.4b is FLGreedy4 gebruikt om de oplossing te bekomen. Alle algoritmen bekomen deze oplossing, behalve het eerste algoritme. Hier zien we dat de ene klant niet meer bij zijn dichtstbijzijnde faciliteit is aangesloten. Het was hier blijkbaar goedkoper om de faciliteit waar deze klant zat te sluiten en de klant iets verder bij een reeds geopende faciliteit te stoppen. Dataset 2 is ook interessant om te bekijken in Figuur 3.5. We zien al een verschil tussen 3.5a, waar alle klanten bij hun dichtstbijzijnde faciliteit worden toegevoegd, en 3.5b, waar er verschillende faciliteiten worden gesloten. Sommige klanten zijn verplaatst naar een andere faciliteit. Kijken we dan naar Figuur 3.5c, dan zien we dat de optimale oplossing wordt bekomen door alle klanten door één faciliteit te laten bevoorraden. Deze oplossing wordt bekomen door FLMIPAreas en FLLocalSearch. In Figuur 3.6 zijn de oplossingen weergegeven van de vier algoritmen, toegepast op dataset 5. De verschillende algoritmen leveren een verschillende kost, maar dit is niet meteen zo duidelijk op de figuur. Toch valt het op dat op sommige plaatsen de klanten met een andere faciliteit zijn verbonden. Merk op dat het zichtbaar is in Figuur 3.6c dat het gebied bij het oplossen van het probleem in 3 3 gebieden werd opgedeeld. De figuren van de overige datasets zijn niet gegeven omdat ze te groot zijn en de figuren niet meer overzichtelijk zijn. Als we kijken naar de tijd, dan is het gretige algoritme het snelst. Deze is ook het minst nauwkeurig, dus dit was ook te verwachten. Het nauwkeurigste algoritme, het local search algoritme, is het traagst. Het valt op dat het mixed integer programming algoritme veel sneller werkt dan het local search algoritme, terwijl de resultaten niet veel slechter zijn. Dit komt deels door

46 34 HOOFDSTUK 3. FACILITY LOCATION (a) FLGreedy1 (b) FLGreedy4 Figuur 3.4: Resultaten bij dataset 1, uitgevoerd met

47 3.9. RESULTATEN 35 (a) FLGreedy1 (b) FLGreedy4 (c) FLMIPAreas Figuur 3.5: Resultaten bij dataset 2, uitgevoerd met

48 36 HOOFDSTUK 3. FACILITY LOCATION (a) FLGreedy1 (b) FLGreedy4 (c) FLMIPAreas (d) FLLocalSearch Figuur 3.6: Resultaten bij dataset 3, uitgevoerd met

49 3.10. CONCLUSIE 37 het kiezen van de eindtijd van het local search algoritme. We zullen deze algoritmen nog eens vergelijken waarbij we de uitvoeringstijd maximaal 1000 s laten worden. De resultaten van dataset 1 t.e.m. 4 kunnen bij FLMIPAreas worden overgenomen, terwijl bij Algoritme FLLocalSearch deze van dataset 1 t.e.m. 3 gelijk blijven. Bij FLMIPAreas zullen we het gebied bij dataset 5 onderverdelen in 6 6 gebieden. Bij FLLocalSearch zullen we gewoon de uitvoeringstijd beperken tot 1000 s. Dataset 1 Dataset 2 Dataset 3 Dataset 4 Dataset 5 FLMIPAreas FLLocalSearch s s s s s s s s s s Tabel 3.2: Resultaten van twee ingekorte algoritmen op de vijf datasets. Boven: resultaat, afgerond op 2 decimalen; onder: tijd. In Tabel 3.2 hebben we dezelfde conclusie als bij de vorige tabel: het mixed integer programming algoritme heeft het beste resultaat voor de laatste dataset, terwijl de kosten van dataset 3 en 4 beter worden geminimaliseerd bij het local search algoritme Conclusie De gretige algoritmen zijn niet bruikbaar om het probleem in zijn totaliteit op te lossen. Ze zijn echter wel bruikbaar als startwaarde voor een local search algoritme, want ze werken snel (vooral dan FLGreedy1, Algoritme 1, en FLApproximation, Algoritme 3). Het local search algoritme FLLocalSearch, Algoritme 8, werkt over het algemeen het best. Enkel bij dataset 5 wordt een beter resultaat bekomen bij het mixed integer porgramming algoritme met verdeling van het gebied FLMIPAreas, Algoritme 7. Het exact oplossen van deze problemen is enkel mogelijk voor kleine datasets. Grotere datasets moeten worden opgelost met een benaderingsalgoritme. De benaderingen van

50 38 HOOFDSTUK 3. FACILITY LOCATION FLMIPAreas en FLLocalSearch voldoen goed en zijn van een veel betere kwaliteit dan de benaderingen verkregen door de gretige algoritmen.

51 Hoofdstuk 4 Vehicle routing 4.1 Probleemstelling Een bedrijf heeft een aantal klanten die moeten worden bevoorraad. Deze bevoorrading wordt georganiseerd door het bedrijf zelf. Deze zorgt voor een aantal gelijke voertuigen, allemaal met dezelfde capaciteit. De bestuurders van deze voertuigen krijgen een route die ze moeten volgen, zodanig dat alle klanten kunnen worden bevoorraad. Een klant heeft een bepaalde vraag van aantal goederen; deze kan verschillend zijn voor verschillende klanten. Het doel is om de kost om deze routes te rijden zo laag mogelijk te houden. Bovendien is het ook beter voor het milieu indien een bestuurder niet van het ene uiterste van de streek naar het andere uiterste moet rijden. Figuur 4.1: Visualisatie van het vehicle routing probleem ([3]) 39

52 40 HOOFDSTUK 4. VEHICLE ROUTING Wiskundige formulering Stel dat er een lijst is gegeven met n klanten, waarbij klant 0 een depot is. Dit is de plaats waar alle voertuigen moeten starten en weer aankomen. Elke klant i heeft een bepaalde vraag d i, waarbij d 0 = 0. Daarnaast heeft een klant ook een positie, gegeven door een x- en y-coördinaat. Stel dat er m voertuigen zijn gegeven, die elk een capaciteit cap hebben. Voor elk voertuig moet er dus een route worden opgesteld die start en eindigt in het depot (eventueel kunnen er ook geen klanten worden toegevoegd, zodat een voertuig niet hoeft te rijden). De kost om van een klant naar een volgende klant te rijden, wordt gegeven door de afstand tussen de opeenvolgende klanten. De kost voor één voertuig om de route te berijden wordt bijgevolg gegeven door de som van de afstanden tussen de opeenvolgende klanten die door het voertuig worden bevoorraad. De totale kost is dan de som van deze kosten. Stellen we de route van voertuig i voor als een lijst T i, waarbij T i,j de j-de klant is die voertuig i bevoorraadt, dan geldt dat T i,0 en T i, Ti 1 het depot zijn en wordt de totale kost gegeven door m 1 i=0 T i 2 j=0 dist(t i,j, T i,j+1 ), (4.1) waarbij dist(k, l) = (x k x l ) 2 + (y k y l ) 2 de Euclidische afstand is tussen k en l. In de volgende secties worden er verschillende algoritmen besproken die dit probleem kunnen oplossen. 4.2 Gretige benadering Een eerste gretige benadering kan worden gevonden door op elk ogenblik te kijken wat de beste positie is om de klant toe te voegen. Om te starten voegen we de eerste klant toe in het eerste voertuig, tussen de twee al aanwezige depots. Om de tweede klant toe te voegen, kunnen we nu kiezen tussen twee voertuigen. We kunnen ervoor kiezen om de klant toe te voegen in een nieuw voertuig, tussen de twee al aanwezige depots, ofwel kunnen we het toevoegen aan het eerste voertuig. Hier zijn er nu twee mogelijke plaatsen om de klant toe te voegen: tussen het depot en de eerste klant, ofwel na de eerste klant en voor het depot. In dit geval zal deze kost gelijk zijn (wegens symmetrie), maar naarmate we verder gaan in het algoritme zal de kost verschillen als we een klant op een andere plaats toevoegen in een voertuig. Zo meteen wordt een voorbeeld besproken, maar eerst wordt de pseudocode voor dit algoritme gegeven in Algoritme 9. De oplossing wordt voorgesteld in een lijst die m lijsten bevat. Lijst i stelt de route voor die voertuig i moet afleggen, voor i = 0,..., m 1.

53 4.2. GRETIGE BENADERING 41 Algoritme 9 VRGreedy Input: Lijst customers met n klanten, het aantal voertuigen m, de capaciteit cap van de voertuigen Output: De kost cost en oplossing solution 1: solution [ ] 2: cost 0 3: for i from 0 to m 1 do 4: solution[i] [customers[0],customers[0]] de depots toevoegen 5: end for 6: for i from 1 to n 1 do 7: j voertuig waar customers[i] best wordt toegevoegd, indien de vraag kleiner is dan de overblijvende capaciteit in het voertuig 8: k positie in voertuig j waar customers[i] best wordt toegevoegd 9: solution[j][k] customers[i] 10: Pas cost aan 11: end for 12: return cost, solution Voorbeeld Veronderstel dat er 5 klanten gegeven zijn, waarbij klant 0 het depot is, zie Figuur 4.2. Elke klant heeft een zelfde capaciteit 3. Stel dat er 2 voertuigen zijn met elk capaciteit 10. Om het algoritme te starten, stellen we voor elk voertuig de route voor als [0,0], wat betekent dat er, voor elk voertuig, een lus is die het depot met zichzelf verbindt. Dit is weergegeven in Figuur 4.2a, waarbij de rode lus hoort bij voertuig 0 en de blauwe lus bij voertuig 1. Indien we nu de eerste klant willen toevoegen, hebben we twee keuzes: ofwel voegen we die toe in (het lege) voertuig 0, ofwel in (het lege) voertuig 1. Beide keuzes zijn gelijk. We kiezen ervoor om deze in voertuig 1 toe te voegen. Stel nu dat klant 2 al geplaatst is in voertuig 1 (het algoritme zal dit zo doen) en we klant 3 willen plaatsen, zie Figuur 4.2b. De overgebleven capaciteit in voertuig 0 is nu 4, terwijl klant 3 vraag 3 heeft en er dus nog aan kan worden toegevoegd. Deze klant kan al op heel wat meer mogelijkheden geplaatst worden dan klant 1. Klant 3 kan tussen elke twee klanten geplaatst worden. Het algoritme berekent de kost op elke plaats waar de klant kan worden toegevoegd en voegt deze dan toe op de plaats met de laagste kost, dit zal in dit geval zijn na klant 2. Merk op dat er voor klant 4 geen plaats meer is in voertuig 0, dus zal deze in de volgende stap worden toegevoegd in voertuig 1, waar het alleen zal zitten. In Figuur 4.2c wordt de uitkomst van het algoritme gegeven.

54 42 HOOFDSTUK 4. VEHICLE ROUTING vt 0: vt 1: (a) De start van het gretige algoritme vt 0: vt 1: (b) Het algoritme wanneer klant 3 moet worden geplaatst vt 0: vt 1: (c) Het einde van het algoritme Figuur 4.2: Voorbeeld van een vehicle routing probleem, opgelost met het gretige algoritme

55 4.3. BRANCH AND BOUND Branch and bound De gretige methode besproken in de vorige sectie is niet ideaal om de ultieme oplossing van dit probleem te bepalen. In Figuur 4.2c is de oplossing voorgesteld die het algoritme zal geven. Deze is echter niet optimaal: de oplossing in Figuur 4.3 heeft een lagere kost. Het gretig algoritme is vooral een benadering die kan worden gebruikt aan het begin van een algoritme, als startwaarde vt 0: vt 1: Figuur 4.3: De optimale oplossing voor het probleem besproken in sectie 4.2 Om een exacte oplossing te vinden, kunnen we alle mogelijkheden exhaustief nagaan en de kost berekenen. We kunnen op elk ogenblik de oplossing bijhouden die correspondeert met de laagste kost. Dit zal echter veel tijd in beslag nemen door de exponentiële groei van het algoritme. Daarvoor zou het handig zijn indien er een aantal branch functions, functies waar er gesnoeid kan worden en het algoritme geen recursiestap dieper gaat, kunnen worden gevonden. 1. De voorwaarden die worden opgelegd in het probleem vormen al een snoeifunctie. Indien er geprobeerd wordt om een klant aan een voertuig toe te voegen, moet er gekeken worden of er nog voldoende capaciteit is in het voertuig om aan de vraag van de klant te voldoen. Indien de klant niet meer kan worden toegevoegd aan het voertuig, moet er niet verder worden gezocht in deze recursiestap waar de klant aan dat voertuig is toegevoegd. 2. Als we een klant toevoegen in een voertuig tussen twee opeenvolgende klanten, dan zal de kost enkel verhoogd worden of eventueel gelijk blijven. Dit betekent dat indien we een kost hebben op een bepaald ogenblik in de recursie, deze enkel nog kan stijgen. Indien de kost op dit moment al groter is dan de beste kost op dit moment, dan hoeven we niet verder te gaan in de recursie. De pseudocode van dit algoritme wordt gegeven in Algoritme 10.

56 44 HOOFDSTUK 4. VEHICLE ROUTING Algoritme 10 VRRecursive(j) Input: Lijst customers met n klanten, het aantal voertuigen m, de lijst met huidige capaciteiten capacities van de voertuigen, lijst solution met de huidige oplossing, de huidige kost cost, de huidige beste oplossing best sol, de huidige beste kost best cost Output: De kost best cost en oplossing best sol 1: if j = n then 2: if cost < best cost then 3: best cost cost 4: best sol sol 5: end if 6: else 7: c customers[j] 8: for i from 0 to m 1 do 9: if capacities[i] c.demand then 10: l aantal klanten in voertuig i 11: for k from 0 to l 2 do 12: cost var cost 13: Voeg c toe tussen klant k en k + 1 in solution[i], pas de kost cost aan 14: capacities[i] capacities[i] - c.demand 15: if cost < best cost then 16: VehicleRoutingRecursive(j + 1) 17: end if 18: Verwijder c terug uit solution[i] 19: cost cost var 20: capacities[i] capacities[i] + c.demand 21: end for 22: end if 23: end for 24: end if 25: return best cost, best sol Het uitvoeren van dit algoritme zal nog altijd lang duren. Indien de kost traag stijgt of we pas meer naar het einde van het algoritme een relatief goede kost vinden, dan zal er toch een groot aantal mogelijkheden moeten worden bekeken. 4.4 Mixed integer programming Het vehicle routing probleem kan worden voorgesteld als een mixed integer programming probleem. We moeten dus proberen om de kost en de voorwaarden op te stellen in functie van vooraf te kiezen variabelen. We kiezen ervoor om de formulering te nemen

57 4.4. MIXED INTEGER PROGRAMMING 45 uit [4]. De moeilijkheid bestaat erin om de variabelen goed te kiezen. We willen weten welke klanten we willen verbinden die uiteindelijk na elkaar zullen zitten in een voertuig. We willen dit voor elk voertuig doen. We kunnen dus de variabelen definiëren die een gerichte boog beschrijven tussen klant i en klant j in voertuig v, genoteerd als x v ij (v = 0,..., m 1; i = 0,..., n 1; j = 0,..., n 1). Als x v ij = 1, dan is er een boog die klant i met klant j verbindt in voertuig v. Dit betekent dat klant j wordt bevoorraad door voertuig v net nadat klant i is bevoorraad. Als x v ij = 0, dan is dit niet het geval. In Figuur 4.4 zijn alle bogen getekend die moeten beschouwd worden voor dit probleem. Elke boog correspondeert met een variabele, ook weergegeven in de figuur. 2 1 x v 3,2 x v 2,4 0 x v 1,3 x v 4,2 3 4 Figuur 4.4: Alle mogelijke bogen voor 1 voertuig, voorgesteld op een probleem met 5 klanten. De kost van het probleem is een vertaling van (4.1), geschreven in functie van de net gekozen variabelen: m 1 n 1 n 1 dist(c i, c j ) x v ij, v=0 i=0 j=0 waarbij dist(c i, c j ) de Euclidische afstand is tussen klant i en klant j. Als x v ij = 1, voor zekere i, j, v, dan wordt er van klant i naar klant j gereden door voertuig v. Dan wordt de afstand tussen klant i en klant j meegerekend in de kost. Is x i,j = 0, dan worden klant i en j niet na elkaar bediend en wordt de afstand dus niet meegerekend. Er moet ook aan een groot aantal voorwaarden worden voldaan. Deze worden hieronder één voor één opgelijst en besproken. 1. Elk voertuig heeft een capaciteit cap. De vraag van de klanten die door voertuig

58 46 HOOFDSTUK 4. VEHICLE ROUTING v worden vervoerd, mag cap niet overschrijden. Dit kunnen we noteren als d i x v ij cap v = 0,..., m 1. n 1 n 1 i=0 j=0 Als x v ij = 1, dan wordt klant i bediend door het voertuig en wordt de vraag van klant i meegerekend in deze som. 2. Een boog tussen twee klanten mag hoogstens 1 maal gebruikt worden, nl. indien de klanten na elkaar bevoorraad worden in een voertuig. Dit mag slechts gebeuren voor maximaal één voertuig. Dit kunnen we als volgt uitdrukken: m 1 v=0 x v ij 1 i, j = 0,..., n 1. Wanneer x v ij = 1, dan wordt klant j bevoorraad na klant i door voertuig v. De voorwaarde legt op dat klant j niet door een ander voertuig kan worden bediend na klant i. Als x v ij = 0, v = 0,..., m 1, dan wordt klant j niet bediend na klant i door een voertuig. Dan zal klant j na een andere klant worden bevoorraad. 3. Elke klant moet precies één maal bediend worden. Dit betekent dat precies één voertuig één keer moet toekomen in een klant én precies één voertuig één keer moet vertrekken van een klant. Vertaald naar bogen betekent dit dat er precies 1 boog is die binnenkomt bij klant i en er precies 1 boog is die vertrekt uit klant i. Dit kan geschreven worden als m 1 v=0 n 1 x v ji = 1, j=0 j i m 1 v=0 n 1 x v ij = 1 i = 1,..., n 1. (4.2) j=0 j i Merk op dat we x v ii niet in rekening brengen in de som. Deze mag nooit gelijk zijn aan 1, want dan zouden we een geïsoleerde klant hebben, wat niet toegelaten is. 4. Bij de voorwaarden (4.2) begint i pas te tellen vanaf 1. Indien we i vanaf 0 zouden laten lopen, moet er ook gelden dat m 1 n 1 v=0 j=1 xv 0i = 1, wat betekent dat er maar 1 boog mag vertrekken uit het depot voor alle voertuigen samen. Dit is echter fout: elk voertuig mag vertrekken uit en toekomen in het depot. Een logische voorwaarde die dan kan worden opgelegd is m 1 n 1 x v 0i m, v=0 j=1 m 1 n 1 x v i0 m. v=0 j=1 De eerste som drukt uit dat de som van alle bogen, bekeken over alle voertuigen en alle klanten, die vertrekken uit het depot hoogstens m, het aantal voertuigen, mag zijn. De tweede som zegt hetzelfde, maar dan voor het totaal aantal inkomende bogen.

59 4.4. MIXED INTEGER PROGRAMMING We hebben al uitgedrukt dat een klant precies één maal moet worden bediend, maar op dit moment kan dit nog door twee verschillende voertuigen (een binnenkomend en een ander uitgaand). We moeten dus nog stellen dat als een voertuig v een klant i binnenkomt, datzelfde voertuig ook die klant weer moet verlaten. Dit doen we als volgt: n 1 n 1 x v ij = x v ji i = 1,..., n 1; v = 0,..., m 1. j=0 j i j=0 j i Indien x v ij = 1, dan vertrekt voertuig v uit klant i, naar klant j. Door de voorwaarde moet er dan een k bestaan waarvoor x v ki = 1, zodat voertuig v dan klant i bezoekt na klant k. Indien x v ij = 0 voor j = 0,..., n 1, dan vertrekt voertuig v niet bij klant i en moet dit voertuig dus ook niet toekomen bij klant i. Voertuig v bevoorraadt klant i dan niet. 6. Een probleem bij het oplossen van deze opgave is dat er subroutes kunnen worden gecreëerd. Om dit tegen te gaan, kunnen we extra (positieve reële) variabelen u i (i = 0,..., n 1) invoeren. De voorwaarde die hiervoor moet worden voldaan luidt m 1 u i u j + n x v ij n 1 1 i j n 1. v=0 We kunnen dus uiteindelijk het mixed integer programming probleem beschrijven:

60 48 HOOFDSTUK 4. VEHICLE ROUTING minimaliseer onder de voorwaarden m 1 dist(c i, c j ) x v ij n 1 n 1 v=0 i=0 j=0 d i x v ij cap v = 0,..., m 1 n 1 n 1 i=0 j=0 m 1 v=0 m 1 n 1 x v ij 1 i, j = 0,..., n 1 x v ji = 1 i = 1,..., n 1 v=0 m 1 v=0 m 1 j=0 j i n 1 x v ij = 1 i = 1,..., n 1 j=0 j i n 1 x v 0i m v=0 j=1 m 1 n 1 x v i0 m v=0 j=1 n 1 n 1 x v ij = x v ji i = 1,..., n 1, v = 0,..., m 1 j=0 j i j=0 j i m 1 u i u j + n x v ij n 1 1 i j n 1 v=0 x v ij {0, 1} i, j = 0,..., n 1, v = 0,..., m 1 u i 0 i = 0,..., n 1. (4.3) Opmerkingen Als we het vehicle routing probleem willen oplossen op een lijst met n klanten en m voertuigen met capaciteit cap met behulp van mixed integer programming, dan krijgen we een probleem met n 2 m + n = n(n m + 1) variabelen. Om het probleem op te lossen met mixed integer programming, moet er worden voldaan aan m+n 2 +n+n+2+m n+n(n 1) = 2n 2 +n+m+m n+2 voorwaarden. Merk wel op dat sommige voorwaarden niet zullen worden meegerekend omdat de coëfficiënten van de variabelen soms 0 kunnen worden.

61 4.5. LOCAL SEARCH 49 Er moet ook nog voldaan zijn aan n 2 m voorwaarden die de waarden voor x v ij vastleggen en aan n positiviteitsvoorwaarden voor u i. Dit probleem heeft veel variabelen en voorwaarden nodig om opgelost te worden. Het zal daardoor dus niet bruikbaar zijn om het te gebruiken op grotere problemen. De pseudocode van dit algoritme is gegeven in Algoritme 11. Algoritme 11 VRMIP Input: Lijst customers met n klanten, het aantal voertuigen m, de capaciteit cap van de voertuigen Output: De kost cost en oplossing solution 1: Stel de variabelen en voorwaarden uit (4.3) op 2: Gebruik een MIP-solver om de kost cost en de routes solution te bepalen 3: return cost, solution Opmerking Mixed integer programming kan hier niet goed gebruikt worden als onderdeel van een benaderingsalgoritme. Wat eventueel mogelijk zou zijn, is het vlak opsplitsen in m delen (rond het depot), waarbij telkens is voldaan aan de capaciteitsvoorwaarde per gebied. Dan krijgen we bijvoorbeeld een onderverdeling als in Figuur 4.5. Dit zal echter ook niet altijd tot een optimale oplossing leiden, want het aantal voertuigen bij een optimale oplossing is niet altijd gelijk aan m. Bovendien is dit niet altijd een optimale verdeling, zoals ook uit Figuur 4.5 blijkt. In het rode gebied is er een grote afstand tussen bepaalde klanten die moet worden overbrugd. Het opdelen van de gebieden is ook sterk afhankelijk van waar het startpunt wordt gekozen. Er kunnen volledig andere gebieden worden gevormd indien we bijvoorbeeld starten met een rechte die vanuit het depot naar het noorden loopt, en vervolgens de andere gebieden bepalen. 4.5 Local search De exacte algoritmen zullen een lange tijd nodig hebben voor ze een oplossing hebben gevonden voor het probleem. Indien we sneller een benaderde oplossing willen verkrijgen, kunnen we een local search algoritme gebruiken. Hierbij starten we van een toegelaten oplossing (die voldoet aan de capaciteitsvoorwaarden) en zullen we deze iedere stap proberen te verbeteren, i.e. de kost proberen te verlagen. De verbeteringen zullen we proberen te verkrijgen door kleine veranderingen aan te brengen aan de huidige beste oplossing. De mogelijke (lokale) veranderingen zijn:

62 50 HOOFDSTUK 4. VEHICLE ROUTING Figuur 4.5: Onderverdeling van het vlak bij een dataset in 3 gebieden. 1. Een klant een nieuwe plaats geven. Dit kan zowel in het voertuig waar het reeds aanwezig is als in een ander voertuig. Wanneer we een voertuig hebben gekozen om de klant te plaatsen, bekijken we alle mogelijke posities in het voertuig en kiezen we vervolgens de positie met de beste kost. Merk wel op dat indien we de klant veranderen van voertuig, de capaciteitsvoorwaarden moeten behouden blijven. Als het andere voertuig al (zo goed als) vol zit, kan de klant niet verplaatst worden. Dit geeft aanleiding tot de volgende lokale verandering. 2. We kunnen twee klanten kiezen en deze wisselen van voertuig. Beide klanten zitten niet in hetzelfde voertuig. Als we de klanten verplaatsen, bekijken we alle mogelijke plaatsen die beide klanten kunnen aannemen in hun nieuwe voertuig. We berekenen de kost van alle mogelijkheden en nemen deze met de beste kost, indien deze kost lager is dan de vorige kost. Omdat we hier twee klanten wisselen van voertuig, is er meer kans dat deze stap zal gebeuren. We kiezen er opnieuw voor (zoals bij het local search algoritme bij het facility location probleem) om dit algoritme te randomiseren. We zullen met een bepaalde kans één van bovenstaande lokale veranderingen toepassen. De klanten en voertuigen worden dan random gekozen. Omdat er vooral stappen uit de tweede mogelijkheid zullen voorkomen (door de capaciteitsvoorwaarden), zullen we de tweede mogelijkheid een grotere kans geven op voorkomen. We stellen dat we in 80% van de gevallen twee (random) klanten wisselen van voertuig en dat we in 20% van de gevallen een (random) klant zullen verplaatsen naar een (random) voertuig, eventueel het voertuig waardoor de klant reeds wordt bevoorraad. Na elke verandering wordt de nieuwe kost vergeleken met de vorige kost. Is deze be-

63 4.5. LOCAL SEARCH 51 ter, dan nemen we de waarde na de lokale verandering als nieuwe huidige oplossing. Is de kost niet verbeterd, dan behouden we de vorige oplossing als huidige oplossing. We blijven verder zoeken naar een betere oplossing tot er een bepaalde tijd verstreken is waarbij er geen nieuwe oplossing meer werd gevonden. In Algoritme 12 wordt de pseudocode van dit algoritme weergegeven. Algoritme 12 VRLocalSearch Input: Lijst customers met n klanten, het aantal voertuigen m, de capaciteit cap van de voertuigen Output: De kost cost en oplossing solution 1: Bepaal solution en cost via VehicleRoutingGreedy 2: while een tijd geen nieuwe oplossing gevonden do 3: p een random natuurlijk getal uit {0, 1,..., 9} 4: c 1 een random klant 5: if p < 2 then 6: v een random voertuig 7: Verplaats c 1 naar de positie in v met de laagste kost 8: else 9: c 2 een random klant 10: v 1 het voertuig van c 1 11: v 2 het voertuig van c 2 12: Verplaats c 1 naar de positie in v 2 met de laagste kost 13: Verplaats c 2 naar de positie in v 1 met de laagste kost 14: end if 15: new cost CalculateCost 16: if new cost < cost then 17: solution deze nieuwe oplossing 18: cost new cost 19: end if 20: end while 21: return cost, solution Opmerking Het is opnieuw beter om dit random algoritme meerdere keren te laten lopen en dan de beste oplossing van deze uitkomsten te nemen als uiteindelijke oplossing.

64 52 HOOFDSTUK 4. VEHICLE ROUTING 4.6 Resultaten We bespreken in deze sectie de resultaten die we bekomen als we de algoritmen uit dit hoofdstuk uitvoeren op een aantal datasets. De algoritmen zijn opnieuw uitgevoerd in Python 2.7, PyCharm Community Edition , op een 3.40 GHz Intel Core i CPU quad core computer, 16 GB RAMgeheugen, 8 GB CPU cache, besturingssysteem Windows 10. We gebruiken de volgende datasets om de algoritmen te testen: Dataset 1: een kleine dataset met 4 klanten en 4 voertuigen. Dataset 2: een dataset met 15 klanten en 3 voertuigen. Dataset 3: een dataset met 29 klanten en 3 voertuigen. Dataset 4: een dataset met 100 klanten en 14 voertuigen. Dataset 5: een grote dataset met 255 klanten en 14 voertuigen. We zullen alle besproken algoritmen testen, dit zijn dus VRGreedy (Algoritme 9), VRRecursive (Algoritme 10), VRMIP (Algoritme 11) en VRLocalSearch (Algoritme 12). De eerste drie algoritmen zullen we gewoon uitvoeren zoals ze gegeven zijn in de pseudocode. Het algoritme VRLocalSearch zullen we vijf keer uitvoeren per dataset en vervolgens het beste resultaat van deze vijf nemen. We blijven verder zoeken naar een betere oplossing tot er gedurende een bepaalde tijd geen betere oplossing meer wordt gevonden. Voor dataset 1 is dit 9 s, voor dataset 2 19 s, voor dataset 3 33 s, bij dataset 4 zoeken we 115 s verder en bij dataset s. In Tabel 4.1 worden de resultaten weergegeven van de algoritmen. De tijd die wordt weergegeven bij VRLocalSearch is de gemiddelde tijd van de vijf uitvoeringen van het algoritme. Het algoritme met de beste resultaten is het local search algoritme VRLocalSearch. Bij dataset 1 en 2 is het resultaat optimaal, want het is gelijk aan het resultaat van de exacte algoritmen, VRRecursive en VRMIP. Het local search algoritme bekomt veel betere resultaten dan het gretige algoritme. Dit kunnen we ook zien indien we kijken naar figuren die de routes van de voertuigen weergeven. Deze zijn weergegeven in Figuren In figuur a is telkens de oplossing van het gretige algoritme gegeven en in figuur b deze van het local search algoritme. De oplossingen van het gretige algoritme zien er veel wanordelijker uit dan deze van het local search algoritme. Vooral Figuur 4.9a en 4.10a zijn meer chaotisch dan resp.

65 4.6. RESULTATEN 53 (a) VRGreedy (b) VRLocalSearch Figuur 4.6: Resultaten bij dataset 1, uitgevoerd met (a) VRGreedy (b) VRLocalSearch Figuur 4.7: Resultaten bij dataset 2, uitgevoerd met (a) VRGreedy (b) VRLocalSearch Figuur 4.8: Resultaten bij dataset 3, uitgevoerd met

66 54 HOOFDSTUK 4. VEHICLE ROUTING (a) VRGreedy (b) VRLocalSearch Figuur 4.9: Resultaten bij dataset 4, uitgevoerd met (a) VRGreedy (b) VRLocalSearch Figuur 4.10: Resultaten bij dataset 5, uitgevoerd met

Universiteit Utrecht Faculteit Wiskunde en Informatica. Examen Optimalisering op maandag 18 april 2005, uur.

Universiteit Utrecht Faculteit Wiskunde en Informatica. Examen Optimalisering op maandag 18 april 2005, uur. Universiteit Utrecht Faculteit Wiskunde en Informatica Examen Optimalisering op maandag 18 april 2005, 9.00-12.00 uur. De opgaven dienen duidelijk uitgewerkt te zijn en netjes ingeleverd te worden. Schrijf

Nadere informatie

1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist is. Kruis de juiste bewering aan. (2pt. per juist antwoord).

1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist is. Kruis de juiste bewering aan. (2pt. per juist antwoord). Tentamen Optimalisering (IN2805-I) Datum: 3 april 2008, 14.00 17.00. Docent: Dr. J.B.M. Melissen Naam: Studienummer: 1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist

Nadere informatie

Taak 2: LP: simplex en sensitiviteitsanalyse Voorbeeld uitwerking

Taak 2: LP: simplex en sensitiviteitsanalyse Voorbeeld uitwerking Taak 2: LP: simplex en sensitiviteitsanalyse Voorbeeld uitwerking. Sensitiviteitsanalyse (a) Als de prijs van legering 5 daalt, kan het voordeliger worden om gebruik te maken van deze legering. Als de

Nadere informatie

Branch-and-Bound en Cutting Planes

Branch-and-Bound en Cutting Planes Branch-and-Bound en Cutting Planes Vandaag: Er is nog geen algoritme om ILP s in polynomiale tijd op te lossen. Twee opties: 1 Exponentiëel algoritme dat optimale oplossing geeft 2 Polynomiaal algoritme

Nadere informatie

Samenvatting college 1-12

Samenvatting college 1-12 Samenvatting college 1-12 Probleemformulering Duidelijk definiëren van beslissingsvariabelen Zinvolle namen voor variabelen bv x ij voor ingrediënt i voor product j, niet x 1,..., x 20 Beschrijving van

Nadere informatie

Bijlage A Simplex-methode

Bijlage A Simplex-methode Dee bijlage hoort bij Beter beslissen, Bijlage A Simplex-methode Verreweg de meeste LP-problemen worden opgelost met behulp van het ogenoemde Simplex-algoritme, in ontwikkeld door G.B. Dantig. De meeste

Nadere informatie

Tie breaking in de simplex methode

Tie breaking in de simplex methode Tie breaking in de simplex methode Tijdens de Simplexmethode kan op een aantal momenten onduidelijk zijn wat je moet doen: 1. Variabele die de basis in gaat: Zoek de grootste coëfficiënt in de doelfunctie.

Nadere informatie

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 ) OI 2010 Finale 12 Mei 2010 Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub VOORNAAM :....................................................... NAAM :..............................................................

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 10 Leo van Iersel Technische Universiteit Delft 23 november 2016 Leo van Iersel (TUD) TW2020 Optimalisering 23 november 2016 1 / 40 Vraag Ik heb het deeltentamen niet

Nadere informatie

Optimalisering en Complexiteit, College 10. Begrensde variabelen. Han Hoogeveen, Utrecht University

Optimalisering en Complexiteit, College 10. Begrensde variabelen. Han Hoogeveen, Utrecht University Optimalisering en Complexiteit, College 10 Begrensde variabelen Han Hoogeveen, Utrecht University Begrensde variabelen (1) In veel toepassingen hebben variabelen zowel een ondergrens als een bovengrens:

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 2 Leo van Iersel Technische Universiteit Delft 14 september 2016 Leo van Iersel (TUD) TW2020 Optimalisering 14 september 2016 1 / 30 Modelleren van LP en ILP problemen

Nadere informatie

Geheeltallige programmering

Geheeltallige programmering Geheeltallige programmering In een LP probleem zijn alle variabelen reëel. In een geheeltallig probleem blijven doelfunctie en constraints lineair, maar zijn de variabelen geheeltallig. LP: IP: BIP: MIP:

Nadere informatie

Heuristieken en benaderingsalgoritmen. Algoritmiek

Heuristieken en benaderingsalgoritmen. Algoritmiek Heuristieken en benaderingsalgoritmen Wat te doen met `moeilijke optimaliseringsproblemen? Voor veel problemen, o.a. optimaliseringsproblemen is geen algoritme bekend dat het probleem voor alle inputs

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

1 Transportproblemen. 1.1 Het standaard transportprobleem

1 Transportproblemen. 1.1 Het standaard transportprobleem 1 Transportproblemen 1.1 Het standaard transportprobleem Dit is het eenvoudigste logistieke model voor ruimtelijk gescheiden vraag en aanbod. Een goed is beschikbaar in gekende hoeveelheden op verscheidene

Nadere informatie

Benaderingsalgoritmen voor discrete optimalisatieproblemen

Benaderingsalgoritmen voor discrete optimalisatieproblemen Masterproef ingedi tot het behalen van de academische graad van master in de wiskunde Benaderingsalgoritmen voor discrete optimalisatieproblemen Auteur: Margot Vanhoubroeck Promotor: Prof. Dr. Veerle Fack

Nadere informatie

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen 08-04-2005

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen 08-04-2005 Transport-, Routing- en Schedulingproblemen Wi4062TU / Wi487TU / a86g Uitwerkingen 08-04-2005 1 Transportprobleem Onderdeel a Fabriek 1 kan 120 ton staal fabriceren in 40 uur. Voor fabriek 2 is dit 150

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2008 2009, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees elke

Nadere informatie

Tentamen Optimalisering (IN2520) Datum: 5 november 2004, Docent: Dr. J.B.M. Melissen

Tentamen Optimalisering (IN2520) Datum: 5 november 2004, Docent: Dr. J.B.M. Melissen Tentamen Optimalisering (IN2520) Datum: 5 november 2004, 14.00 17.00. Docent: Dr. J.B.M. Melissen Veel succes! 1 Deze opgave bestaat uit 15 tweekeuzevragen. Per goed antwoord krijg je 2 punten. a. Dynamisch

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2014 2015, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 3 Leo van Iersel Technische Universiteit Delft 21 september 2016 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 1 / 36 LP: Lineair Programmeren min x 1 2

Nadere informatie

Exponentiële Functie: Toepassingen

Exponentiële Functie: Toepassingen Exponentiële Functie: Toepassingen 1 Overgang tussen exponentiële functies en lineaire functies Wanneer we werken met de exponentiële functie is deze niet altijd gemakkelijk te herkennen. Daarom proberen

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 13 Leo van Iersel Technische Universiteit Delft 9 december 2015 Leo van Iersel (TUD) TW2020 Optimalisering 9 december 2015 1 / 13 Vraag Wat moet ik kennen en kunnen voor

Nadere informatie

TU/e 2DD50: Wiskunde 2 (1)

TU/e 2DD50: Wiskunde 2 (1) TU/e 2DD50: Wiskunde 2 () Tussentoets 26 november, tijdens de instructies Zaal: paviljoen (study hub) Time: 90min Tentamenstof: colleges 4 (LP; Simplex; dualiteit; complementaire slackness) Oude tentamens:

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2012 2013, tweede zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Deel 2. Basiskennis wiskunde

Deel 2. Basiskennis wiskunde Deel 2. Basiskennis wiskunde Vraag 26 Definieer de functie f : R R : 7 cos(2 ). Bepaal de afgeleide van de functie f in het punt 2π/2. (A) f 0 ( 2π/2) = π (B) f 0 ( 2π/2) = 2π (C) f 0 ( 2π/2) = 2π (D)

Nadere informatie

Lineaire programmering

Lineaire programmering Lineaire programmering Hans Maassen kort naar Inleiding Besliskunde van J. Potters [Pot]. en Methods of Mathematical Economics van J. Franklin [Fra]. Lineaire programmering is het bepalen van het maximum

Nadere informatie

Elfde college algoritmiek. 21 april Dijkstra en Branch & Bound

Elfde college algoritmiek. 21 april Dijkstra en Branch & Bound Algoritmiek 011/11 College 11 Elfde college algoritmiek 1 april 011 Dijkstra en Branch & Bound 1 Algoritmiek 011/11 Kortste paden Gegeven een graaf G met gewichten op de takken, en een beginknoop s. We

Nadere informatie

Kosten. Computationale Intelligentie. Een zoekprobleem met stapkosten. Een voorbeeld: het vinden van een route. Zoeken met kosten.

Kosten. Computationale Intelligentie. Een zoekprobleem met stapkosten. Een voorbeeld: het vinden van een route. Zoeken met kosten. Kosten omputationale Intelligentie Zoeken met kosten Veel zoekproblemen omvatten kosten: een afstand in kilometers; een geldbedrag; een hoeveelheid tijd;... Voorbeelden van dergelijke problemen zijn: het

Nadere informatie

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University Discrete Wiskunde, College 12 Han Hoogeveen, Utrecht University Dynamische programmering Het basisidee is dat je het probleem stap voor stap oplost Het probleem moet voldoen aan het optimaliteitsprincipe

Nadere informatie

Optimalisering/Besliskunde 1. College 1 6 september, 2012

Optimalisering/Besliskunde 1. College 1 6 september, 2012 Optimalisering/Besliskunde 1 College 1 6 september, 2012 Algemene informatie College: donderdag 9:00-10:45: Gorlaeus C1/C2, Leiden vrijdag: werkcollege Leiden en Delft vragenuur Delft Vier verplichte huiswerkopgaven

Nadere informatie

Optimalisering/Besliskunde 1. College 1 3 september, 2014

Optimalisering/Besliskunde 1. College 1 3 september, 2014 Optimalisering/Besliskunde 1 College 1 3 september, 2014 Algemene informatie College: woensdag 9:00-10:45: Gorlaeus C1/C2, Leiden vrijdag: werkcollege Leiden en Delft Vier verplichte huiswerkopgaven Informatie

Nadere informatie

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Achtste college algoritmiek. 8 april Dynamisch Programmeren Achtste college algoritmiek 8 april 2016 Dynamisch Programmeren 1 Werkcollege-opgave Dutch Flag Problem Gegeven een array gevuld met R, W, en B. Reorganiseer dit array zo dat van links naar rechts eerst

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 1 Leo van Iersel Technische Universiteit Delft 7 september 2016 Leo van Iersel (TUD) TW2020 Optimalisering 7 september 2016 1 / 40 Opzet vak Woensdag: hoorcollege 13:45-15:30

Nadere informatie

n-queens Local Search met Conflict Minimalizatie

n-queens Local Search met Conflict Minimalizatie n-queens Local Search met Conflict Minimalizatie Efficient Local Search with Conflict Minimalization: A Case Study of the n-queens Problem, door Rok Sosič en Jun Gu. Sjoerd van Egmond svegmond@liacs.nl

Nadere informatie

(iii) Enkel deze bundel afgeven; geen bladen toevoegen, deze worden toch niet gelezen!

(iii) Enkel deze bundel afgeven; geen bladen toevoegen, deze worden toch niet gelezen! Examen Wiskundige Basistechniek, reeks A 12 oktober 2013, 13:30 uur Naam en Voornaam: Lees eerst dit: (i) Naam en voornaam hierboven invullen. (ii) Nietje niet losmaken. (iii) Enkel deze bundel afgeven;

Nadere informatie

Universiteit Utrecht Departement Informatica

Universiteit Utrecht Departement Informatica Universiteit Utrecht Departement Informatica Uitwerking Tussentoets Optimalisering 20 december 206 Opgave. Beschouw het volgende lineair programmeringsprobleem: (P) Minimaliseer z = x 2x 2 + x 3 2x 4 o.v.

Nadere informatie

K.0 Voorkennis. y = -4x + 8 is de vergelijking van een lijn. Hier wordt y uitgedrukt in x.

K.0 Voorkennis. y = -4x + 8 is de vergelijking van een lijn. Hier wordt y uitgedrukt in x. K.0 Voorkennis y = -4x + 8 is de vergelijking van een lijn. Hier wordt y uitgedrukt in x. y = -4x + 8 kan herschreven worden als y + 4x = 8 Dit is een lineaire vergelijking met twee variabelen. Als je

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2012 2013, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Hebzucht loont niet altijd

Hebzucht loont niet altijd Thema Discrete wiskunde Hoe verbind je een stel steden met zo weinig mogelijk kilometers asfalt? Hoe maak je een optimaal computernetwerk met kabels die maar een beperkte capaciteit hebben? Veel van zulke

Nadere informatie

Hoofdstuk 13: Integer Lineair Programmeren

Hoofdstuk 13: Integer Lineair Programmeren Hoofdstuk 13: Integer Lineair Programmeren Vandaag: Wat is Integer Lineair Programmeren (ILP)? Relatie tussen ILP en LP Voorbeeld 1: Minimum Spanning Tree (MST) Voorbeeld 2: Travelling Salesman Problem

Nadere informatie

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek Divide & Conquer: Verdeel en Heers vervolg Algoritmiek Algoritmische technieken Vorige keer: Divide and conquer techniek Aantal toepassingen van de techniek Analyse met Master theorem en substitutie Vandaag:

Nadere informatie

Lineaire Optimilizatie Extra sessie. 19 augustus 2010

Lineaire Optimilizatie Extra sessie. 19 augustus 2010 Lineaire Optimilizatie Extra sessie 19 augustus 2010 De leerstof Handboek: hoofdstuk 2 t.e.m. 8 (incl. errata) Slides (zie toledo) Extra opgaven (zie toledo) Computersessie: Lindo syntax en output Wat

Nadere informatie

Uitwerking tentamen Algoritmiek 9 juli :00 13:00

Uitwerking tentamen Algoritmiek 9 juli :00 13:00 Uitwerking tentamen Algoritmiek 9 juli 0 0:00 :00. (N,M)-game a. Toestanden: Een geheel getal g, waarvoor geldt g N én wie er aan de beurt is (Tristan of Isolde) b. c. Acties: Het noemen van een geheel

Nadere informatie

Examenvragen D0H45 (Lineaire optimalizatie)

Examenvragen D0H45 (Lineaire optimalizatie) Examenvragen D0H45 (Lineaire optimalizatie) Tijdstip: Vrijdag 3 februari 2012 vanaf 09.00 uur tot 12.00 uur Er zijn vier opgaven. Achter de opgaven zitten de bladzijden die u kunt gebruiken om uw antwoord

Nadere informatie

Elfde college algoritmiek. 16 mei Dijkstra, Gretige algoritmen en Branch & Bound

Elfde college algoritmiek. 16 mei Dijkstra, Gretige algoritmen en Branch & Bound Algoritmiek 013/11 College 11 Elfde college algoritmiek 1 mei 013 Dijkstra, Gretige algoritmen en Branch & Bound 1 Algoritmiek 013/11 Voorbeeld -1- A B C D E F G H 9 7 5 A B C D E F G H 0 9 9 7 5 A B C

Nadere informatie

Examenvragen Toegepast Operationeel Onderzoek (D0178a)

Examenvragen Toegepast Operationeel Onderzoek (D0178a) Examenvragen Toegepast Operationeel Onderzoek 2006-2007 (D0178a) Tijdstip: Vrijdag 24 augustus 2007 09.00-13.00 uur Het examen is open boek. Er zijn vier opgaven. Achter de opgaven zitten de bladzijden

Nadere informatie

Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens

Info-books. Toegepaste Informatica. Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) AL20. Jos Gils Erik Goossens Info-books AL20 Toegepaste Informatica Deel 20 : Algoritmen en programmeren in Access en Excel (Basis) Jos Gils Erik Goossens Hoofdstuk 6 Lusstructuren of iteraties 6.1 Probleemstelling Het gebeurt dikwijls

Nadere informatie

Maak automatisch een geschikte configuratie van een softwaresysteem;

Maak automatisch een geschikte configuratie van een softwaresysteem; Joost Vennekens joost.vennekens@kuleuven.be Technologiecampus De Nayer We zijn geïnteresseerd in het oplossen van combinatorische problemen, zoals bijvoorbeeld: Bereken een lessenrooster die aan een aantal

Nadere informatie

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

TU/e 2DD50: Wiskunde 2 (1)

TU/e 2DD50: Wiskunde 2 (1) TU/e 2DD50: Wiskunde 2 (1) Organisatorische informatie Wat Dag Tijd Zaal Docent College Tue 5+6 Aud 6+15 Gerhard Woeginger Thu 1+2 Aud 1+4 Gerhard Woeginger Clicker session Tue 7+8 Aud 6+15 Gerhard Woeginger

Nadere informatie

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel. Grafen Grafen Een graaf bestaat uit een verzameling punten (ook wel knopen, of in het engels vertices genoemd) en een verzameling kanten (edges) of pijlen (arcs), waarbij de kanten en pijlen tussen twee

Nadere informatie

1 Rekenen in eindige precisie

1 Rekenen in eindige precisie Rekenen in eindige precisie Een computer rekent per definitie met een eindige deelverzameling van getallen. In dit hoofdstuk bekijken we hoe dit binnen een computer is ingericht, en wat daarvan de gevolgen

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

Uitleg van de Hough transformatie

Uitleg van de Hough transformatie Uitleg van de Hough transformatie Maarten M. Fokkinga, Joeri van Ruth Database groep, Fac. EWI, Universiteit Twente Versie van 17 mei 2005, 10:59 De Hough transformatie is een wiskundige techniek om een

Nadere informatie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie Discrete Structuren Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 22 februari 2009 INDUCTIE & RECURSIE Paragrafen 4.3-4.6 Discrete Structuren Week 3:

Nadere informatie

Tiende college algoritmiek. 14 april Gretige algoritmen

Tiende college algoritmiek. 14 april Gretige algoritmen College 10 Tiende college algoritmiek 1 april 011 Gretige algoritmen 1 Greedy algorithms Greed = hebzucht Voor oplossen van optimalisatieproblemen Oplossing wordt stap voor stap opgebouwd In elke stap

Nadere informatie

Combinatoriek groep 1 & 2: Recursie

Combinatoriek groep 1 & 2: Recursie Combinatoriek groep 1 & : Recursie Trainingsweek juni 008 Inleiding Bij een recursieve definitie van een rij wordt elke volgende term berekend uit de vorige. Een voorbeeld van zo n recursieve definitie

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 2 Leo van Iersel Technische Universiteit Delft 9 september 2015 Leo van Iersel (TUD) TW2020 Optimalisering 9 september 2015 1 / 23 Huiswerk Huiswerk 1 is beschikbaar op

Nadere informatie

TW2020 Optimalisering

TW2020 Optimalisering TW2020 Optimalisering Hoorcollege 3 Leo van Iersel Technische Universiteit Delft 21 september 2016 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 1 / 36 LP: Lineair Programmeren min x 1 2

Nadere informatie

De partitieformule van Euler

De partitieformule van Euler De partitieformule van Euler Een kennismaking met zuivere wiskunde J.H. Aalberts-Bakker 29 augustus 2008 Doctoraalscriptie wiskunde, variant Communicatie en Educatie Afstudeerdocent: Dr. H. Finkelnberg

Nadere informatie

Kosten. Zoekalgoritmen ( ) College 5: Zoeken met kosten. Een zoekprobleem met stapkosten. Een voorbeeld: het vinden van een route

Kosten. Zoekalgoritmen ( ) College 5: Zoeken met kosten. Een zoekprobleem met stapkosten. Een voorbeeld: het vinden van een route Kosten Zoekalgoritmen (00 00) ollege 5: Zoeken met kosten Peter de Waal, Tekst: Linda van der aag Veel zoekproblemen omvatten kosten: een afstand in kilometers; een geldbedrag; een hoeveelheid tijd; ongemak;...

Nadere informatie

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Uitwerking tentamen Algoritmiek 10 juni :00 13:00 Uitwerking tentamen Algoritmiek 10 juni 2014 10:00 13:00 1. Dominono s a. Toestanden: n x n bord met in elk hokje een O, een X of een -. Hierbij is het aantal X gelijk aan het aantal O of hooguit één hoger.

Nadere informatie

Lights Out. 1 Inleiding

Lights Out. 1 Inleiding Lights Out 1 Inleiding Het spel Lights Out is een elektronisch spel dat gelanceerd werd in 1995 door Tiger Electronics. Het originele spel heeft een bord met 25 lampjes in een rooster van 5 rijen en 5

Nadere informatie

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12 Katern 2 Getaltheorie Inhoudsopgave 1 Delers 1 2 Deelbaarheid door 2, 3, 5, 9 en 11 6 3 Grootste gemene deler en kleinste gemene veelvoud 12 1 Delers In Katern 1 heb je geleerd wat een deler van een getal

Nadere informatie

max 5x 1 2x 2 s.t. 2x 1 x 2 10 (P) x 1 + 2x 2 2 x 1, x 2 0

max 5x 1 2x 2 s.t. 2x 1 x 2 10 (P) x 1 + 2x 2 2 x 1, x 2 0 Voorbeeldtentamen Deterministische Modellen in de OR (158075) Opmerking vooraf: Geef bij elke opgave een volledige en duidelijke uitwerking inclusief argumentatie! Gebruik van de rekenmachine is niet toegestaan.

Nadere informatie

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen dat er zowel typografische als inhoudelijke onvolkomenheden

Nadere informatie

Optimalisering en Complexiteit, College 1. Han Hoogeveen, Utrecht University

Optimalisering en Complexiteit, College 1. Han Hoogeveen, Utrecht University Optimalisering en Complexiteit, College 1 Han Hoogeveen, Utrecht University Gegevens Docent : Han Hoogeveen : j.a.hoogeveen@uu.nl Vak website : http://www.cs.uu.nl/docs/vakken/opt/ Student assistenten

Nadere informatie

5. Vergelijkingen. 5.1. Vergelijkingen met één variabele. 5.1.1. Oplossen van een lineaire vergelijking

5. Vergelijkingen. 5.1. Vergelijkingen met één variabele. 5.1.1. Oplossen van een lineaire vergelijking 5. Vergelijkingen 5.1. Vergelijkingen met één variabele 5.1.1. Oplossen van een lineaire vergelijking Probleem : We willen x oplossen uit de lineaire vergelijking p x+q=r met p. Maxima biedt daartoe in

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede kandidatuur Informatica Academiejaar 2004 2005, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. 1. Binomiale

Nadere informatie

Uitwerkingen oefenopdrachten or

Uitwerkingen oefenopdrachten or Uitwerkingen oefenopdrachten or Marc Bremer August 10, 2009 Uitwerkingen bijeenkomst 1 Contact Dit document is samengesteld door onderwijsbureau Bijles en Training. Wij zijn DE expert op het gebied van

Nadere informatie

Lineaire Algebra en Vectorcalculus 2DN60 College 5.a Basis en dimensie

Lineaire Algebra en Vectorcalculus 2DN60 College 5.a Basis en dimensie Lineaire Algebra en Vectorcalculus 2DN60 College 5.a Basis en dimensie Ruud Pellikaan g.r.pellikaan@tue.nl /k 205-206 Definitie opspansel 2/35 Stel S = {v,..., v n } is een deelverzameling van de vectorruimte

Nadere informatie

10. Controleopdrachten

10. Controleopdrachten Computeralgebra met Maxima 10. Controleopdrachten 10.1. Functies en operatoren voor lijsten/vectoren/arrays Een van de eenvoudigste maar belangrijkste lusachtige functies is de makelist opdracht. Voor

Nadere informatie

Informatica: C# WPO 10

Informatica: C# WPO 10 Informatica: C# WPO 10 1. Inhoud 2D arrays, lijsten van arrays, NULL-values 2. Oefeningen Demo 1: Fill and print 2D array Demo 2: Fill and print list of array A: Matrix optelling A: Matrix * constante

Nadere informatie

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra

Tiende college algoritmiek. 2 mei Gretige algoritmen, Dijkstra College 10 Tiende college algoritmiek mei 013 Gretige algoritmen, Dijkstra 1 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag van n (n 0) eurocent. Alle

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Hoofdstuk 7: Werken met arrays

Hoofdstuk 7: Werken met arrays Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel

Nadere informatie

l e x e voor alle e E

l e x e voor alle e E Geselecteerde uitwerkingen Werkcollege Introduceer beslissingsvariabelen x e met x e = als lijn e in de boom zit en anders x e = 0. De doelfunctie wordt: min e E l e x e Voor elke deelverzameling S V met

Nadere informatie

Overzicht. Inleiding. Toepassingen. Verwante problemen. Modellering. Exacte oplosmethode: B&B. Insertie heuristieken. Local Search

Overzicht. Inleiding. Toepassingen. Verwante problemen. Modellering. Exacte oplosmethode: B&B. Insertie heuristieken. Local Search Overzicht Inleiding Toepassingen Verwante problemen Modellering Exacte oplosmethode: B&B Insertie heuristieken Local Search Handelsreizigersprobleem 1 Cyclische permutatie van steden b 3 77 a 93 21 42

Nadere informatie

Optimalisering en Complexiteit, College 11. Complementaire speling; duale Simplex methode. Han Hoogeveen, Utrecht University

Optimalisering en Complexiteit, College 11. Complementaire speling; duale Simplex methode. Han Hoogeveen, Utrecht University Optimalisering en Complexiteit, College 11 Complementaire speling; duale Simplex methode Han Hoogeveen, Utrecht University Duale probleem (P) (D) min c 1 x 1 + c 2 x 2 + c 3 x 3 max w 1 b 1 + w 2 b 2 +

Nadere informatie

Praktische opdracht Wiskunde A Formules

Praktische opdracht Wiskunde A Formules Praktische opdracht Wiskunde A Formules Praktische-opdracht door een scholier 2482 woorden 15 juni 2006 5,5 40 keer beoordeeld Vak Wiskunde A Inleiding Formules komen veel voor in de economie, wiskunde,

Nadere informatie

Containers stapelen. M.L. Koning april 2013

Containers stapelen. M.L. Koning april 2013 Technische Universiteit Eindhoven 2WH03 - Modelleren C Containers stapelen L. van Hees 0769244 M.L. Koning 0781346 2 april 2013 Y.W.A Meeuwenberg 0769217 1 Inleiding De NS vervoert dagelijks grote hoeveelheden

Nadere informatie

3.2 Vectoren and matrices

3.2 Vectoren and matrices we c = 6 c 2 = 62966 c 3 = 32447966 c 4 = 72966 c 5 = 2632833 c 6 = 4947966 Sectie 32 VECTOREN AND MATRICES Maar het is a priori helemaal niet zeker dat het stelsel vergelijkingen dat opgelost moet worden,

Nadere informatie

9. Strategieën en oplossingsmethoden

9. Strategieën en oplossingsmethoden 9. Strategieën en oplossingsmethoden In dit hoofdstuk wordt nog even terug gekeken naar alle voorgaande hoofdstukken. We herhalen globaal de structuren en geven enkele richtlijnen voor het ontwerpen van

Nadere informatie

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra Algoritmiek 017/Gretige Algoritmen Tiende college algoritmiek 13/1 april 017 Gretige Algoritmen Algoritme van Dijkstra 1 Algoritmiek 017/Gretige Algoritmen Muntenprobleem Gegeven onbeperkt veel munten

Nadere informatie

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Sjoerd van Egmond LIACS, Leiden University, The Netherlands svegmond@liacs.nl 2 juni 2010 Samenvatting Deze notitie beschrijft een nederlandse

Nadere informatie

Universiteit Utrecht Departement Informatica. Examen Optimalisering op dinsdag 29 januari 2019, uur.

Universiteit Utrecht Departement Informatica. Examen Optimalisering op dinsdag 29 januari 2019, uur. Universiteit Utrecht Departement Informatica Examen Optimalisering op dinsdag 29 januari 2019, 17.00-20.00 uur. ˆ Mobieltjes UIT en diep weggestopt in je tas. Wanneer je naar de WC wil, dan moet je je

Nadere informatie

Getallensystemen, verzamelingen en relaties

Getallensystemen, verzamelingen en relaties Hoofdstuk 1 Getallensystemen, verzamelingen en relaties 1.1 Getallensystemen 1.1.1 De natuurlijke getallen N = {0, 1, 2, 3,...} N 0 = {1, 2, 3,...} 1.1.2 De gehele getallen Z = {..., 4, 3, 2, 1, 0, 1,

Nadere informatie

Algoritmen aan het werk

Algoritmen aan het werk Algoritmen aan het werk (Dag van de wiskunde 24/11/2018) Veerle Fack Universiteit Gent De bevers en de brug Vier bevers willen in het donker een brug oversteken. Ze kunnen de brug slechts alleen of met

Nadere informatie

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 5 juni 2007, uur

Uitgebreide uitwerking tentamen Algoritmiek Dinsdag 5 juni 2007, uur Uitgebreide uitwerking tentamen Algoritmiek Dinsdag juni 00, 0.00.00 uur Opgave. a. Een toestand bestaat hier uit een aantal stapels, met op elk van die stapels een aantal munten (hooguit n per stapel).

Nadere informatie

1. Het aantal optimale oplossingen van een LP probleem is 0, 1, of oneindig. 2. De vereniging van twee konvexe verzamelingen is niet convex. 3.

1. Het aantal optimale oplossingen van een LP probleem is 0, 1, of oneindig. 2. De vereniging van twee konvexe verzamelingen is niet convex. 3. 1. Het aantal optimale oplossingen van een LP probleem is 0, 1, of oneindig. 2. De vereniging van twee konvexe verzamelingen is niet convex. 3. Een LP probleem heeft n>2 variabelen en n+2 constraints.

Nadere informatie

2DD50: Tentamen. Tentamen: 26 januari 2016 Hertentamen: 5 april 2016

2DD50: Tentamen. Tentamen: 26 januari 2016 Hertentamen: 5 april 2016 2DD50: Tentamen Tentamen: 26 januari 2016 Hertentamen: 5 april 2016 Bij het tentamen mag een eenvoudige (niet grafische; niet programmeerbare) rekenmachine meegenomen worden, en 2 tweezijdige A4-tjes met

Nadere informatie

2. Het benaderen van nulpunten

2. Het benaderen van nulpunten Het benaderen van nulpunten Benaderen van vierkantswortels Als we met een numerieke rekenmachine benadering, 7 =,64575 7 berekenen, krijgen we als resultaat een Het numeriek benaderen kan met een recursieve

Nadere informatie

Tiende college algoritmiek. 26 april Gretige algoritmen

Tiende college algoritmiek. 26 april Gretige algoritmen Algoritmiek 01/10 College 10 Tiende college algoritmiek april 01 Gretige algoritmen 1 Algoritmiek 01/10 Muntenprobleem Gegeven onbeperkt veel munten van d 1,d,...d m eurocent, en een te betalen bedrag

Nadere informatie

Negende college algoritmiek. 15 april Dynamisch Programmeren

Negende college algoritmiek. 15 april Dynamisch Programmeren Negende college algoritmiek 15 april 2016 Dynamisch Programmeren 1 algemeen Uit college 8: DP: - nuttig bij problemen met overlappende deelproblemen - druk een oplossing van het probleem uit in oplossingen

Nadere informatie

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback IJkingstoets burgerlijk ingenieur 30 juni 2014 - reeks 2 - p. 1 IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback In totaal namen 716 studenten deel aan de ijkingstoets burgerlijk ingenieur

Nadere informatie

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback

IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback IJkingstoets burgerlijk ingenieur 30 juni 2014 - reeks 1 - p. 1 IJkingstoets burgerlijk ingenieur juni 2014: algemene feedback In totaal namen 716 studenten deel aan de ijkingstoets burgerlijk ingenieur

Nadere informatie