Rangerplanlægning. Per Munk Jacobsen. 31. december 2007



Relaterede dokumenter
Mandag-fredag Monday-Friday

Mandag-fredag Monday-Friday

Farum. Østerport. Hillerød. Køge. Hundige

Farum. Hillerød. Østerport. Hundige / Solrød Strand. Køge. Farum

KØBENHAVN MALMÖ SAMFUNDSØKONOMISKE BEREGNINGER ALTERNATIVE VÆKSTRATER INCENTIVE PARTNERS

Jernbanesikkerhedsinstruktion for SR/ORF/ORS

Jernbanesikkerhedsinstruktion Side 1

Letbane fra Lyngby til Ishøj en ny transportmulighed i 2020/21. Forudgående høring om VVM-redegørelse og miljøvurdering

Jernbanesikkerhedsinstruktion Side 1

DSB S-tog a/s. Tjenestekøreplan for S-tog (TKS) TKS S09. Gyldig fra TKS redigeres af: Driftsplanlægning, DSB S-tog a/s Tlf.

DSB S-tog a/s. Til modtagere af tjenestekøreplan for S-tog. Gyldig fra Ændringerne i forhold til foregående TKS omfatter :

DSB S-tog a/s. Tjenestekøreplan for S-tog (TKS) TKS S11. Gyldig fra TKS redigeres af: Driftsplanlægning, DSB S-tog a/s

Notat. Transportudvalget TRU alm. del Bilag 356 Offentligt. Afrapportering DSB S-tog 1. kvartal 2012

Lyse og moderne kontorlokaler i Brøndby

Lyse kontorer i præsentabel ejendom med smuk atrium

Køge St. - Hillerød St.

Farum. Østerport. Hillerød. Hundige / Solrød Strand. Køge. Farum

TKS K13 Afsnit 1 1 TJENESTEKØREPLAN S-TOG (TKS) Gyldig 9. december 2012 kl december 2013 kl K13

Infrastrukturforbedringer på S-banen - tog til tiden

Transportudvalget TRU alm. del Bilag 17 Offentligt

Frederikssund St. - Klampenborg St.

Klampenborg St. - Frederikssund St.

A jernbane time schedule & line map

Bekendtgørelse om landsplandirektiv for detailhandel i hovedstadsområdet

De Nationale Passagertilfredshedsundersøgelser (tog) Detaljeret metodebeskrivelse

Perronnummer. Spornummer

Transport-, Bygnings- og Boligudvalget TRU Alm.del - Bilag 238 Offentligt. S-tog Køreplan DSB Flemming Jensen.

PARK ALLÉ 295, BRØNDBY

Transportudvalget TRU Alm.del Bilag 55 Offentligt

MÅNEDS- RAPPORT FEBRUAR 2015

Transportudvalget TRU Alm.del Bilag 194 Offentligt

MÅNEDS- RAPPORT MARTS 2015

MÅNEDS- RAPPORT FEBRUAR 2019

Kommercielkredsens vedtægter

MÅNEDS- RAPPORT MAJ 2015

MÅNEDS- RAPPORT JUNI 2018

MÅNEDS- RAPPORT MAJ 2019 I HENHOLD TIL KONTRAKT MELLEM TRANSPORT-, BYGGE- OG BOLIGMINISTERIET

MÅNEDS- RAPPORT JANUAR 2019

MÅNEDS- RAPPORT JANUAR 2017

Nyt Bynet i Valby - Fra Cityringens åbning i 2019

MÅNEDS- RAPPORT MARTS 2018

MÅNEDS- RAPPORT JANUAR 2018

MÅNEDS- RAPPORT JUNI 2019 I HENHOLD TIL KONTRAKT MELLEM TRANSPORT-, BYGGE- OG BOLIGMINISTERIET

MÅNEDS- RAPPORT APRIL 2018

Nyt Bynet i Rødovre Kommune

MÅNEDS- RAPPORT FEBRUAR 2018

MÅNEDS- RAPPORT APRIL 2017

MÅNEDS- RAPPORT MAJ 2017

MÅNEDS- RAPPORT APRIL 2018

MÅNEDS- RAPPORT DECEMBER 2018

MÅNEDS- RAPPORT MARTS 2016

Nyt Bynet i Gentofte Kommune

MÅNEDS- RAPPORT MAJ 2018

MÅNEDS- RAPPORT JUNI 2017

MÅNEDS- RAPPORT JULI 2018

MÅNEDS- RAPPORT JULI 2017

MÅNEDS- RAPPORT FEBRUAR 2017

MÅNEDS- RAPPORT OKTOBER 2015

MÅNEDS- RAPPORT JULI 2019

MÅNEDS- RAPPORT MAJ 2016

MÅNEDS- RAPPORT MARTS 2019

MÅNEDS- RAPPORT OKTOBER 2018

MÅNEDS- RAPPORT SEPTEMBER 2018

MÅNEDS- RAPPORT DECEMBER 2015

MÅNEDS- RAPPORT NOVEMBER 2018

MÅNEDS- RAPPORT AUGUST 2018

MÅNEDS- RAPPORT SEPTEMBER 2017

MÅNEDS- RAPPORT DECEMBER 2017

MÅNEDS- RAPPORT AUGUST 2017

MÅNEDS- RAPPORT APRIL 2019

Kriegers Flak AC Oversigtskort - projektområde

MÅNEDS- RAPPORT NOVEMBER 2016

Dagtimer mandag-fredag Daytime Monday to Friday. Aften alle dage Evening all days. Gyldig fra 30. januar 2017 Gyldig fra 30.

Østtælling 2007 DSB og DSB S-tog

MÅNEDS- RAPPORT APRIL 2016

Flyttemønstre i København polariserer hovedstaden

Nyt Bynet i Vanløse - Fra Cityringens åbning i 2019

Cykelstrategi Københavns Befæstning

MÅNEDS- RAPPORT SEPTEMBER 2018

MÅNEDS- RAPPORT OKTOBER 2018

MÅNEDS- RAPPORT AUGUST 2018

MÅNEDS- RAPPORT JULI 2015

MÅNEDS- RAPPORT JULI 2018

MÅNEDS- RAPPORT DECEMBER 2016

1.795 m² kontor i smuk klassisk palæejendom i Kgs. Lyngby

OTM prognose. Sagsnr Emne Kollektive trafik efter 2018 Udarbejdet af Kontrolleret af Godkendt Dato med metro til Glostrup

MÅNEDS- RAPPORT FEBRUAR 2016

OTM prognose. Sagsnr Emne Kollektive trafik efter 2018 Udarbejdet af Kontrolleret af Godkendt Dato med metro til Rødovre

Støj og vibrationer. - Screeningsnotat. Hastighedsopgradering af S-banen

NEDENSTÅENDE TIDER ER MED FORBEHOLD FOR ÆNDRINGER

Løs til optimalitet i eksponentiel tid Find tilnærmet løsning i polynomielt tid Optimeringsproblemer kan ikke altid verificeres i polynomiel

Trafikplan / Jeppe Grønholt-Pedersen. Økonomiforvaltningen/Team Mobilitet D

MÅNEDS- RAPPORT JULI 2016

Kørsel den (søndagsplan)

Banenumre. Frederikshavn. 87! Aalborg Thisted. Grenaa Langå. Holbæk Vejle! 79 51! Fredericia. 15b. Odense. 15a. Nyborg. !! Snoghøj. Korinth.

Indhold Det nye bynet for busser i Gladsaxe Kommune og hovedstadsområdet. 3 Se din nye rute... 3 De nye og omlagte ruter i Gladsaxe Kommune...

Kapacitet ind og ud af København H Status på 6. hovedspor og KØR-projekterne

Nyt Bynet i Gentofte Kommune

Priser Du har mulighed for at betale kontant, Dankort eller med MobilePay. Priser for ansøgning og førerkort kan du finde her.

Østtælling 2008 DSB og DSB S-tog

Transkript:

Rangerplanlægning Per Munk Jacobsen 31. december 2007

Indhold 1 Resume 4 2 Indledning 6 3 Forhold ved værkstederne 9 4 Problemformulering 14 5 Litteratur 16 5.1 Tog rute problemet for en station.................. 16 5.2 Rangering af passagertog-enheder på en station.......... 17 5.3 Mandskabsplanlægning........................ 18 6 Modellen 20 6.1 Repræsentation af reparationer og tid............... 20 6.1.1 Reparationstyper....................... 20 6.1.2 Tider............................. 21 6.2 Givne data.............................. 22 6.3 Variable................................ 23 6.4 Begrænsninger............................ 25 6.5 Objektfunktionen........................... 29 6.5.1 Straf hvis toget ikke hentes straks ved ankomst...... 29 6.5.2 Ikke overholdt deadline................... 30 6.5.3 Straf, hvis toget ikke er klar til afhentning......... 30 6.5.4 Straf hvis toget afleveres for tidligt............. 30 6.5.5 Straf for blokeringer..................... 31 6.5.6 Straffen for at parkere et tog på et givet spor, når det skal ind på et givet værksted................... 32 6.5.7 Ventetid............................ 33 6.5.8 Straf for at bruge et spor.................. 33 6.5.9 Straf for typeskift på værksted............... 34 6.5.10 Straf for en given type til et givet spor........... 34 6.5.11 Straf for flere typer på spor................. 35 6.5.12 Andre muligheder...................... 35 6.5.13 Objektfunktionen samlet.................. 35 6.6 Udvidelse af modellen........................ 37 6.7 Størrelse af model.......................... 38 6.8 Tuning af modellen.......................... 38 1

6.8.1 Overflødige begrænsninger og variable........... 38 6.8.2 Ekstra uligheder....................... 39 7 NP-hårdhed 40 8 Alternative løsningsmetoder 42 9 Grådig heuristik 43 9.1 Hvilket tog skal først af to tog.................... 43 9.2 Struktur af optimal løsning..................... 45 9.3 Heuristikken.............................. 47 9.3.1 Kommentarer......................... 48 9.3.2 Kvalitet af løsningen..................... 49 9.3.3 Justering af n t........................ 50 10 Metaheuristikker 51 10.1 Lokalsøgning............................. 51 10.2 Tabusøgning............................. 54 10.3 Large Neighbourhood Search.................... 55 10.4 Variable Neighbourhood Search................... 56 10.5 LNS anvendt............................. 57 10.5.1 Fastholdelse af variable................... 58 10.5.2 RINS............................. 60 10.5.3 Vores version af RINS.................... 61 10.5.4 RINSfix............................ 61 10.6 VNS anvendt: Local Branching................... 62 10.6.1 Metoden............................ 62 10.6.2 Generelle heltals variable.................. 63 10.6.3 Tidsbegrænsninger, intensivering og diversifikation.... 65 10.6.4 Local branching og VNS................... 67 10.7 Guided local search.......................... 68 10.7.1 Løsningsrum og omegn for S-togsproblemet........ 70 10.7.2 Features............................ 79 10.7.3 Feature cost.......................... 80 10.7.4 Parameteren λ........................ 81 10.7.5 Fast local search....................... 82 10.8 Randomsearch............................ 84 10.9 Simuleret udglødning......................... 86 11 Afprøvning 89 11.1 Testdata................................ 89 11.1.1 Konstruktion af data for værkstederne........... 89 11.1.2 Konstruktion af data for sporene.............. 91 11.1.3 Konstruktion af data for togene............... 91 11.1.4 Konstruktion af mandskabsplan............... 91 11.2 Strategi for afprøvningen...................... 92 11.3 Konfigurering af simuleret udglødning............... 94 11.3.1 Bestemmelse af starttemperatur.............. 94 11.3.2 Bestemmelse af sluttemperatur............... 96 11.3.3 Bestemmelse af kølingsrate................. 97 2

11.4 Konfigurering af GLS........................ 98 11.4.1 Bestemmelse af parameteren λ............... 98 11.4.2 Bestemmelse af priser.................... 100 11.5 Kørsler................................. 105 11.6 Konklusioner på afprøvningen.................... 106 11.6.1 Kvalitet af metoderne.................... 106 11.6.2 Løsningens afhængighed af størrelsen på værkstedsanlægget112 11.6.3 Løsningens afhængighed af tidshorisonten......... 112 11.6.4 Løsningens afhængighed af antallet af tog......... 113 11.6.5 Afhængighed af antallet af initielle tog........... 113 11.6.6 Konklusion på afprøvningen................. 114 12 Konklusion 116 A Eksperimentelle resultater 118 A.1 Kørsler................................. 118 A.2 Afstand fra den optimale løsningsværdi.............. 131 A.3 Hvilke metoder giver bedst løsningsværdi............. 133 A.4 Hvilke metoder er hurtigst...................... 134 B Eksempel på inddatafiler 136 B.1 skematest............................... 136 B.2 sportest................................ 137 B.3 vaerkstedtest............................. 137 B.4 mandskabtest............................. 138 C Inddata 140 D Lineariseringer 141 D.1 Begrænsningerne i modellen..................... 141 D.2 Begrænsninger specielt til objektfunktionen............ 146 E Størrelse af model 149 E.1 Antal variable............................. 149 E.2 Antal begrænsninger......................... 151 F CPLEX-parametre 154 G Konstruktionsheuristikken 155 G.1 Hvilket skal først af to tog...................... 155 G.2 Struktur af optimal løsning..................... 155 G.3 Håndkørsel.............................. 156 3

Kapitel 1 Resume Denne rapport omhandler rangerplanlægningen af et værksted for S-tog. Togene skal repareres hurtigst muligt, og ved rangeringen skal man undgå blokeringer. Vi præsenterer her en matematisk model af problemet. En optimal løsning til denne kan ofte ikke findes indenfor rimelig tid, så vi konstruerer en lovlig løsning ved hjælp af en heuristik, og forbedrer den med metaheuristikkerne large neighbourhood search og local branching. Dette giver gode resultater, men det kan for større instanser stadig tage lang tid at finde en god rangerplan. Vi anvender derfor metaheuristikkerne guided local search, simuleret udglødning samt randomsearch. Vi sammenligner køretid og resultat for de forskellige metoder. Det viser sig, at simuleret udglødning og guided local search begge giver gode rangerplaner til vores formål inden for få minutter. 4

B C 6 (to Grønholt) B (to Slotspavillonen) 1 7 71 Greve Køge Ølby Ølsemagle 32 Jersie (to Brødeskov) B A Copenhagen C 2 Solrød Strand Karlslunde 13 Hundige Hillerød Ballerup Høvelte Åmarken EXCEPT METRO AND MAIN FREIGHT YARD TRACK MAP FROM http://dk.trackmap.net/ LAST TOUCHED 2006 06 23 Helgoland 3 (coach depot Farum 10 4 RED TRACKS ARE 11 & EMU wks) 1 12 1 ELECTRIFIED WITH 2 14 16 2 1 15 1.5 KV FOR S TRAINS 12 10 7 6 5 4 3 2 11 9 22 11 12 Høje Tåstrup 4 21 3 30 2 14 21 13 32 34 36 0 1 22 12 12 10 31 33 35 1 23 11 24 2 Herlev 11 1 2 3 7 8 9 25 20 4 21 4Tåstrup 10 11 9 9 8 7 7 6 6 5 5 4 B 4 16 3 3 Birkerød 3 Holte 1 2 0 2 2 1 1 1 1 1 2 21 12 2 1 14 1 1 2 2 2 2 1 2 1C 1A 3 3 1B 3 Allerød 11 16 15 22 41 51 Brøndbyøster 42 52 43 53 12 61 81 82 Rødovre 62 63 64 Vallensbæk Hvidovre Fjern Ishøj Vigerslev Brøndby Strand 100 Avedøre Skovlunde Friheden Husum Malmparken Islev Jyllingevej Flintholm Vanløse 91 93 8 83 92 94 97 99 84 11 Vigerslev Allé Valby Gl. Toftegård Tårnby Stengården Stenløse Ørestad Bagsværd Veksø Skovbrynet Kildedal Hareskov Måløv Værløse Enghave M Bavnehøj Ny Ellebjerg Sydhavn Sjælør Vigerslev 1 2 12 F Grøndal Kalvebod Ellebjerg Virum Sorgenfri Ølstykke Skelbæk M F Lyngby Buddinge Kildebakke Fuglebakken Gentofte Dyssegård Jægersborg Vangede Frederikssund Dybbølsbro Kastrup Bernstorffsvej Emdrup Nørrebro Ryparken Lersøen Bispebjerg 3 119 137 118 K.B. Hallen 136 138 117 Peter Bangsvej 135 116 105 134 115 104 12 133 Albertslund 103 132 121 113 102 11 11P Langgade 131 101 34 10 Ålholm 9 73 75 12 8 72 74 3 4 Glostrup 85 84 66 Danshøj 82 83 65 7 12 11 81 6 4 Hvidovre 5 4 80 64 5 4 2 4 3 79 63 52 3 3 1 3 96 78 62 51 41 30 26 2 95 77 40 2 61 99 50 4 C 94 76 22 1 1 75 70 13 3 74 14 (to Glostrup) 2 73 15 1 1 2 12 2 11 1 30 14 4 32 23 3 13 12 22 2 33 1 11 34 11 12 41 42 35 36 København H Svanemøllen M Vesterport København H 8 7 6 Nordhavn 4 Øresund (to Lernacken) SEM Peberholm 5 4 3 2 6 1 13 Charlottenlund Ordrup Hellerup 3 5 4 23 12 22 3 21 2 62 1 61 Nørreport Østerport Klampenborg (to Skodsborg) B Copenhagen Malmö Port Figur 1.1: Københavns spornet, inclusive området ved værkstederne i Høje Tåstrup. Kilde dk.trackmap.net. 5

Kapitel 2 Indledning Figur 2.1: Fra depotværkstedet i Høje Tåstrup. Foto Tommy Jørgensen På depotværkstedet i Høje Tåstrup bliver S-togs materiellet vedligeholdt og repareret, og en stor del af vognene bliver rengjort. Mindre opgaver kan opfatte reparationer af en defekt dør, skift af boogie, eller foretage vask og rengøring. Disse opgaver varer typisk nogle timer. De store opgaver er de store eftersyn, f.eks. 4-års og 8-års eftersyn, hvor toget bliver skilt ad. Disse varer typisk mindst en uge. Værkstedet holder de små og store opgaver adskilt, og planlægger dem hver for sig. Vi vil beskæftige os med de mindre opgaver. På værkstedet foregår planlægningen af disse for en tidsperiode på normalt 2-3 dage ad gangen. Man ved, hvilke tog der ankommer i perioden (eller allerede befinder sig på området) og hvilke opgaver, der skal udføres. Hver opgave skal ordnes inden for et lille 6

tidsinterval, så toget kun er ude af drift i en kort periode. DSB har planlagt at kunne bruge toget igen efter intervallets udløb. Problemet i denne rapport er at planlægge rangeringen af togene. Hvilket af værkstederne (der er flere) skal et givet tog ind på. Hvornår skal toget ind og ud af værkstedet. Hvilke depotspor skal det parkeres på før og efter reparationen. Man skal undgå blokeringer, hvor tog spærrer for hinanden. Man skal overholde hvert togs deadline og generelt få togene færdige så hurtigt som muligt. Vi starter med at udvikle en matematisk model af et værkstedsanlæg, så vi kan løse problemet som et optimeringsproblem. Begrænsningerne er, at der kun kan være et tog pr. værksted, at der er begrænset med mandskab, og at depotsporene er LIFO-spor med begrænset længde. Løsningen bliver en plan for rangeringen af togene. Planen angiver, hvornår og hvorhen togene skal flyttes. Vi vil ikke planlægge bemandingen, men gå ud fra som givet, hvor mange der er på arbejde et givet tidspunkt. Desværre kan MIP-solveren ofte ikke løse opgaven inden for rimelig tid. Det kan tage lang tid bare at finde en startløsning. Resten af specialet omhandler derfor en beskrivelse af de heuristikker og metaheuristikker, vi har anvendt for at finde en god løsning hurtigt. Vi udvikler en konstruktionsheuristik, der finder en lovlig løsning. Heuristikken forsøger at minimere ventetiden for togene, fra de ankommer, til de er færdige. Heuristikken er grådig. Den planlægger togene et ad gangen, og lægger ikke så stor vægt på at koordinere dem. Vi prøver derfor at forbedre den fundne løsning ved brug af Large neighbourhood search [6] (LNS) metoder, der fastholder nogle af variablene, og optimerer på resten. Det viser sig, at disse metoder forbedrer løsningen betydeligt. For at forbedre løsningen yderligere, bruger vi local branching [7]. Ideen er at fastholde de fleste variable i en given løsning, idet man angiver, hvor mange der må ændres. Men i modsætning til LNS lægger man sig ikke fast på, hvilke variable der fastholdes. Hvis der er tilpas få, der varierer, kan vi inden for rimelig tid finde en forbedret løsning. Vi har nu en løsning, som vi giver MIP-solveren som startløsning, så vi kan finde den optimale værdi hurtigere. Denne startløsning er god, idet den ligger inden for få procent fra den optimale. Det er tilstrækkeligt i praksis pga. usikkerheden på data (nye uventede tog, forsinkelser, sygdom). Ovenstående metoder er dog for langsomme for større instanser til praktisk brug. I praksis kan man vente en nat på en løsning, men hvis der sker ændringer, har man brug for en ny løsning hurtigt. Derfor skifter vi strategi. Vi anvender et andet løsningsrum med mindre omegne, vi kan gennemsøge uden at anvende en MIP-solver. Dette nye løsningsrum mappes til gode løsninger i det gamle. Vi prøver nogle metaheuristikker af, og sammenligner resultaterne. Den ene er Guided local search (GLS) [13]. GLS har sit udspring i constraint satisfaction metoder. GLS tilføjer nogle led til sin objekfunktionen, som straffer dårlige egenskaber ved en løsning. Disse led afhænger af, hvor søgningen har været, og fungerer derfor som hukommelse. De ekstra led dirigerer søgningen hen mod ønskede områder i løsningsrummet. I de ekstra led straffer vi, hvis løsningen er ulovlig, eller der sker blokeringer. I denne søgning bevæger vi os bl.a. rundt i løsningsrummet ved at variere de spor og værksteder, som togene skal ind på. For at speede GLS op har vi tilføjet Fast Local search (FLS) [13]. FLS koncentrerer søgningen i en omegn til de dele af omegnen, der kan indeholde en lovlig løsning eller en løsning uden blokeringer. Dette gør, at vi finder en løsning 7

meget hurtigere. Til gengæld er den ofte af dårligere kvalitet. Vi har også udviklet simuleret udglødning (SU) [18] og randomsearch (RS). Randomsearch gennemsøger løsningsrummet tilfældigt, idet alle løsninger accepteres. RS returnerer den bedste løsning, søgningen er stødt på. Simuleret udglødning gennemsøger også løsningsrummet tilfældigt, men dårligere løsninger accepteres kun med en vis sandsynlighed, der aftager, efterhånden som søgningen skrider frem. Endelig sammenligner vi til sidst resultaterne. SU viser sig at være den bedste af lokalsøgningerne. Den giver de bedste resultater inden for få minutter. GLS er imidlertid næsten lige så god, og endda bedre i mange instanser. Denne tekst er organiseret således: Vi vil starte med at præcisere forholdene på værkstedsanlægget i kapitel 3. I kapitel 4 formuleres præcist det problem, vi vil løse. Vi undersøger litteraturen i kapitel 5. Den matematiske model bliver beskrevet i kapitel 6. I kapitel 7 bevises, at problemet er NP-hårdt. I kapitel 8 beskrives alternative løsningsmetoder. Konstruktionsheuristikken er i kapitel 9. I kapitel 10 gives en oversigt over metaheuristikker. Vi bruger large neighbourhood search i afsnit 10.3. Local branching beskrives i afsnit 10.6. I afsnit 10.7 beskrives GLS. Vi forklarer først i afsnittet, hvordan vi definerer løsningsrum og omegne. Randomsearch og simuleret udglødning beskrives i afsnit 10.8 hhv 10.9. Der er afprøvning og konfigurering af metoder i kapitel 11. Endelig er konklusionen i kapitel 12. De udviklede programmer indlæser data for de tog, der ankommer i en given periode, eller allerede befinder sig på området. Hvis et tog allerede befinder sig på området, indeholder data oplysninger om, hvor på området toget er. Programmet skal også kende data for anlægget (spor, værksteder) samt mandskabsplanen. Programmet finder nu en optimal eller god rangerplan for den næste tidsperiode. Hvis der kommer et nyt uventet tog, eller der sker andet nyt, starter man programmet forfra med de nye oplysninger. Det er som sagt ikke relevant at finde den optimale rangerplan pga. usikkerheden på de givne data. Vores lokalsøgninger er derfor udmærkede til dagligt brug. Dette speciale i datalogi er et eksamensprojekt, som DSB foreslog på deres hjemmeside. Min vejleder er professor David Pisinger fra DIKU. Det var ikke planen fra starten, at det skulle være et speciale. Jeg ville udvikle en matematisk model og implementere den. Men det viste sig, at den eksakte algoritme var alt for langsomt til praktisk brug for realistiske instanser. Jeg brugte derfor meget tid på at prøve at få det til at køre hurtigere. Jeg eksperimenterede med ekstra snit i modellen, og jeg udviklede bl.a. en konstruktionsheuristik til at give en startløsning, for at gøre den eksakte algoritme hurtigere. Men det var stadig langsomt. David foreslog så at gøre projektet til et speciale og udvikle heuristikker. Min kontaktperson til DSB er professor Jens Clausen fra DTU. Jeg vil gerne her takke ham for hans kommentarer. Vi holdt tre møder sammen med David Pisinger. I det første forklarede Jens problemstillingen, og i løbet af de næste to godkendte han min model. 8

Kapitel 3 Forhold ved værkstederne Vi vil her beskrive det relevante ved værkstederne 1. Vi vil holde det generelt, så det også passer med forholdene på andre værksteder end i Høje Tåstrup, så modellen er mere anvendelig. Der er gjort enkelte forsimplende antagelser, der har til formål at holde den udviklede model håndterbar. Tog På værkstedet planlægges som sagt for de næste 2-3 dage. I denne periode ankommer og afleveres tog løbende. Der kan derfor være tog i værkstederne eller på sporene ved starten af perioden. Dem vil vi medtage i planlægningen, for at koordinere med de nyankomne tog. Et tog er egentligt et togsæt, dvs. det er sammensat af flere vogne. Vi antager, det holdes samlet. Ellers skal vi planlægge det, så vi kan opbygge togsættet igen efter reparationen. Værksteder Et værksted kan kun reparere et tog ad gangen. Til gengæld er der flere værksteder, og vi antager, at de har åbent samtidigt. Vi antager, at et tog kun skal ind på ét værksted, og at det ikke fjernes i- gen, før det er helt færdigt. Hvis det skal ind flere gange på værkstederne, fordi der er flere jobs, der skal udføres på det, kan man køre programmet for hvert job. Værkstederne kan være forskelligt indrettet. Et værksted skal have faciliteterne til den reparation, der skal foretages, (f.eks. grave hvis man vil under toget og det nødvendige udstyr). Det kan være besværligt at skulle omstille sig til en ny type reparation. Derfor vil man helst undgå for mange omstillinger. 1 Undertegnede har fået kendskab til forholdene ved værkstederne gennem samtalerne med professor Jens Clausen 9

Sidespor Der er et antal depotspor beregnet på midlertidig parkering. Vi antager, sporene er LIFO-spor, dvs. lukkede i den ene ende. Hvert spor har en kendt længde, også kaldet kapacitet. Når et tog ankommer, bliver det parkeret på et depotspor, medmindre det kan komme til på et værksted straks. Når toget er færdigt på værkstedet, bliver det enten parkeret igen på depotsporene til senere afhentning, eller det bliver kørt bort fra området straks. Det kan tænkes, at nogle spor ligger langt væk fra værkstederne. Det vil være at foretrække at parkere togene tæt på, for at mindske tiden brugt på rangering. Mandskab Ved værkstederne er der et antal jobfunktioner, der vedrører tog (vi ser bort fra sekretærer m.m.): Mekanikere, rangerere, klargørere, etc. Det kan selvfølgelig kun lade sig gøre at reparere et tog, hvis der er de nødvendige folk til at udføre arbejdet. Der skal være de rigtige jobfunktioner, samt det nødvendige antal folk af hver funktion, til reparationen. F.eks. kan en rangering kun ske, hvis der er rangerpersonale, (en person er nok til en rangering), mens tunge reparationer kræver flere mekanikere. Vi skal vide, hvad hvert eftersyn kræver af mandskab, og hvor mange der er på arbejde et givet tidspunkt, for at kunne udregne, om der er mandskab nok til, at reparationen kan foretages. Hvis en reparation varer en 4 timers periode, og en medarbejder kun skal bruges i 1 time, skal vi for at kunne lave en minutiøs mandskabsplanlægning vide, hvornår i perioden, han skal bruges, eller om han evt. selv kan vælge, hvornår arbejdet skal gøres. Mandskabsplanlægning er et projekt i sig selv. Jeg gør her en forenklende antagelse, at en krævet medarbejder arbejder hele tiden under eftersynet, og altså ikke kan varetage to opgaver. Personalet har en arbejdsplan, der angiver, hvornår hver enkelt medarbejder er på arbejde. Vi kan så udregne, hvor mange med hver jobfunktion der er på arbejde et givet tidspunkt. Når vi ved, hvilke medarbejdere, der kræves til den givne reparation, hvor mange, der er på arbejde, samt hvad der ellers er planlagt, kan vi let udregne, om en reparation eller rangering kan gennemføres på et bestemt tidspunkt. Ankomst og afgang Togene antages at ankomme til et sted, f.eks. en remise eller en nærliggende station eller spor, hvorfra rangerpersonalet skal hente dem. Togene skal også afleveres et sted af rangerpersonalet, ikke nødvendigvis det samme sted. Vi antager, at der kun er et ankomststed og et afleveringssted. Det kunne tænkes, at der er flere ankomststeder og afleveringssteder. Det kan også tænkes, at det ikke er rangerpersonalet, der skal hente eller aflevere, men at togene bliver kørt direkte hen til depotsporene (eller afhentes) af andre. Den 10

model, vi udvikler, kan let tilpasses dette, jfr. afsnit 6.6. Vi vil tilstræbe at få togene hurtigt færdige. Det gør det lettere for værkstedet at overholde deadlines, og værkstedet bliver mindre følsomt over for uregelmæssigheder. Hvis der f.eks. kommer sygdom, er det rart at være foran i forhold til, hvad DSB forventer. Desuden vil DSB gerne have rådighed over toget så hurtigt som muligt. Vi ved fra starten, hvornår DSB forventer, at toget skal holde på afleveringsstedet. Det er ikke nødvendigvis det samme som værkstedets deadline, da der skal være plads til lidt uregelmæssigheder ved værkstederne. Værkstedet kan give besked til DSB, hvis et tog bliver færdigt før tid. Men det kan vare en tid, før DSB kommer og henter det. Indtil afhentning parkeres toget på et depotspor. Vi vil planlægge ud fra, at toget tidligst afhentes på det af DSB forventede tidspunkt, da vi ikke kan være sikre på, at det fjernes før. DSB skal få en togfører til at hente det. Hvis det afhentes tidligere, skal der være ledigt rangerpersonale til at køre toget fra depotspor til afleveringsstedet (eller også må togføreren selv hente det fra depotsporene), og denne rangering skal ske, inden et andet tog blokerer for det. Men det vil vi altså ikke medtage i planlægningen. Et togs bevægelser på terrænet Køres direkte til værksted Start 0 1 2 3 4 Ankomst Køres til parkering 5 LIFO spor Køres fra parkering til værksted 1 2 3 Værksteder Figur 3.1: Området ved værkstederne. Kanterne udgør de mulige bevægelser af tog til og med værksted. Spor 0 svarer til, at toget kommer til med det samme, det skal ikke parkeres. Inden ankomst befinder toget sig uden for værkstedsområdet. Det samme er 11

tilfældet efter afgang. Inde på terrænet kan det være parkeret på et depotspor, være inde på et værksted, eller være undervejs fra et sted til et andet. Det tager tid at komme fra et sted til et andet, og det kan være forbundet med besvær, f.eks. hvis man skal krydse et befærdet spor. Man vil gerne holde dette besvær og tidsforbrug på et minimum. Slut Afgang Afhentning 0 1 2 3 4 LIFO spor Parkering efter reparation Direkte til afhentning 1 2 3 Værksteder Figur 3.2: Området ved værkstederne igen. Figuren viser de yderligere bevægelser af tog i forhold til figur 3.1. Startknuden er ikke med i figuren. I figur 3.1 og 3.2 er topologien ved værkstederne skitseret ved en graf. Knuderne (bortset fra en) repræsenterer de steder, hvor et tog kan stå stille, og kanterne udgør de mulige bevægelser. Toget ankommer til området. I figur 3.1 ankommer toget til knude Start. Det bliver parkeret i et spor. I tegningen er der 4 spor, som er nummereret fra 1 til 4. Senere, efter at være parkeret, flyttes toget til værksted. I tegningen er der 3 værksteder, som er nummereret fra 1 til 3. Nogle gange behøver man ikke parkere toget, det kan komme til med det samme. Vi siger af tekniske grunde (det udviklede program kræver, at toget parkeres på et navngivent spor), at det i så fald parkeres på spor 0. Men det findes ikke, og er i figuren vist stiplet. Efter reparation køres det tilbage til sporene, hvilket er vist i figur 3.2. Til sidst bliver det kørt væk fra området. I figuren køres det til knude Slut. Der kan udover de bevægelser, der er vist med kanter, forekomme andre bevægelser, f.eks. at toget flyttes fra et spor til et andet, internt mellem sporene 1-4 i tegningen. Dette kan ske i tilfælde af blokeringer, hvor et tog må flyttes for at et andet kan komme ud. Men disse bevægelser er ikke planlagte. Vi vil så vidt muligt undgå dem ved at undgå blokeringer. Vi antager, at det er givet, hvor lang tid det varer at bevæge sig langs en kant, fra et sted til et andet. Alle tider er større end 0, bortset måske tiden fra 12

spor 0 til værksted, der kan være 0. Til ethvert tidspunkt vil toget befinde sig i en af de viste knuder (bortset fra spor 0), eller være undervejs mellem en af knuderne. Et togs bevægelser kan således modelleres ved en graf med en kilde og et afløb, samt mellemliggende knuder bestående af depotspor og værksteder. 13

Kapitel 4 Problemformulering Vi vil for en given tidsperiode planlægge tid og sted for de tog, der befinder sig ved værkstederne i denne periode. Mere præcist: Givet Et værkstedsområde, svarende til figurerne 3.1 og 3.2. Topologien for området ved værkstederne: Antal værksteder samt angivelse af de opgaver, der kan udføres på hvert værksted. Antal depotspor og deres længde Diverse transporttider: Fra depotspor til værksted, etc. Diverse priser, f.eks. for at bruge et spor. Mandskabsplan Liste over tog på området i perioden: Ankomsttid, afhentningstid, længde, hvilke opgaver, der skal udføres og hvor lang tid det varer, deadline. Opgaven er nu at skedulere (planlægge) togene (se figur 4.1) til værksteder og spor, så vi får togene hurtigst muligt færdige, undgår blokeringer, og overskrider deadlines mindst muligt. Vi medtager også andre mål, som at vi vil parkere på foretrukne spor eller holde typer af reparationer samlede, herom senere. I afsnit 7 vises, at problemet er NP-hårdt. 14

t t t t 1 t 2 3 t t t 4 5 6 7 8 s v s 1 2 Figur 4.1: Figuren er en tidslinie for et tog, svarende til de to forrige figurer. Ikke alle kanter er med. Vi skal for hvert tog beslutte os for, hvilke værdier de variable, der er nævnt i figuren, skal have. t-erne er ankomst- og afgangstider til knuderne, s-erne er spor, og v-erne er værksteder. Når toget ankommer til værkstederne, skal det afhentes af en rangerer. Rangereren henter det klokken t 1. Det ankommer så til depotspor s 1 til tiden t 2. Det kører derfra igen klokken t 3, og ankommer til værksted v til tiden t 4. Det køres ud derfra klokken t 5, og parkeres igen på et spor s 2 klokken t 6. Klokken t 7 fjernes det fra sporet, og ankommer til det sted, hvor toget skal afleveres, klokken t 8. 15

Kapitel 5 Litteratur Det beskrevne problem er efter forfatterens bedste vidende ikke løst før. Men der er andre problemer, der ligner: Tog rute problemet for en station, og rangering af passagertog-enheder på en station. Dem gennemgår vi nu. Vi vil undersøge, om vi kan genbruge nogle af metoderne. Vi kommer også ind på mandskabsplanlægning. 5.1 Tog rute problemet for en station Zwanefeld et al. præsenterede i 1996 [20] det første forsøg på at løse tog rute problemet for en station. Problemet går ud på at finde ruter for tog gennem en station, så de ikke konflikter (støder sammen). Mere præcist: Givet en liste af tog, der skal igennem en station den næste time. Vi har Stationens topologi. For hvert tog ved vi, hvornår det ankommer og afgår. Anden information: Platforme toget skal ankomme ved og afgå fra, og platforme det skal holde på. Forbindelser til andre tog. Man kan herudfra for hver mulig rute udregne, hvornår toget vil ankomme til de enkelte steder på ruten. Opgaven er nu at lave en konfliktfri skedulering. To tog konflikter, hvis de er på samme togafsnit på samme tid (+/- en sikkerhedsmargin). Zwanefeld et al. løste problemet ved konfliktgrafmodellen. I konfliktgrafen er en knude en mulig rute for toget, og en konflikt mellem to tog modelleres som en kant mellem knuderne. Man skal så for hvert tog vælge en knude, der repræsenterer en rute for toget. Ingen af de valgte knuder må have kanter til hinanden. Metoden kan udvides til at omfatte flere mulige ankomst- og afgangstider, man skal så udvide konfliktgrafen tilsvarende. Konfliktgrafen viser ikke, hvor konflikten sker. Fuchsberger, Chudak og Caimi udvider i 2006 [1] metoden til at vise dette, hvilket reducerer antallet af konfliktkanter. 16

Vi kan ikke bruge konfliktgrafmetoden til vores problem, af to grunde: Vi ved, hvornår et tog ankommer til området, men tiderne er meget ubestemte. Undervejs kan et tog være parkeret på et depotspor i lang tid. Hvor lang ved vi ikke på forhånd. En konfliktgraf for vores problemstilling vil derfor blive meget stor: For hvert tog og hver rute får vi en knude for hver mulig tidsskedulering. Vores problem er heller ikke det samme. Vi vil ikke blot finde en konfliktfri vej. Vi vil have togene hurtigt igennem. Vi skal derfor blandt de mulige kombinationer af konfliktfri knuder finde den, der opfylder vores mål bedst. Men der bliver formentlig så mange kombinationer, at vi ikke kan bruge denne metode. 5.2 Rangering af passagertog-enheder på en station På engelsk The train unit shunting problem. Det blev introduceret af Freling, Lentink, Kroon og Huisman i 2002 [2]. Om natten skal de tog, der ikke bruges, holde parkeret på en station. Problemet er her at parkere de ankommende togenheder, så det passer bedst muligt til næste dags opstart. Vi har givet En togstation En række depotspor til parkering Et tidsskema, som indeholder. ankomst- og afgangstider for de enkelte tog. Et tog er sammensat af flere forskellige enheder, og skemaet angiver for hvert tog, hvordan det er sammensat. Priser for ruterne fra platform-spor til depotspor, og omvendt. Vi skal nu 1. matche de ankommende og afgående togs enheder: Hvis et afgående tog skal bruge en enhed af en bestemt type, skal vi afgøre, hvilken blandt da ankommende togs enheder af præcis denne type, det skal være. 2. Parkere togenhederne for natten på depotspor, så vi kan koble dem på de afgående tog, uden der sker blokeringer. En blokering forekommer her, hvis der står en togenhed i vejen for en anden, der skal kobles på toget. Den strategi, som Freling et al. anvender i [2], er at løse de to dele 1 og 2 hver for sig. Det giver måske en suboptimal løsning, men problemet bliver lettere at have med at gøre. I punkt 1 minimerer man rangerarbejdet ved at holde togenheder så samlede som muligt. Hvis nogle enheder kan holdes samlede, udgør de en blok. I punkt 2 foregår fordelingen af blokke på depotspor, så kapaciteten ikke overskrides, og der ikke sker blokeringer. Modellen er løst som et set partitioning problem med ekstra betingelser. Set partitioningdelen er at fordele blokkene på sporene. De ekstra betingelser er, at der ikke må ske blokeringer, og at den samlede længde af blokkene ikke må overskride sporets længde. Problemet løses ved kolonnegenerering, da antallet af fordelinger på sporene vokser eksponentielt med antallet af blokke. Man skal her kende blokkenes ankomst- og afgangstider 17

fra sporene, så man kan beregne, hvornår der sker blokeringer. På værkstederne ankommer togsæt, men de holdes samlede, så del 1 af problemet er ikke relevant for os. Mht. punkt 2: Vi skal ikke kun planlægge parkeringen, men også værkstederne, for togene. Vores problem er altså mere omfattende. Vi kan ikke umiddelbart planlægge parkeringen som i punkt 2. Her skal man nemlig kende ankomst- og afgangstider for tog på depotsporene. Men dem skal vi netop bestemme. Man kan overveje at dele problemet op: Først finder man de tidspunkter, togene skal ind til værkstederne, og hvilke, de hver især skal ind på. Derefter planlægger man parkeringen til sporene. Men bl.a. det, at vi vil undgå blokeringer, gør, at vi netop ikke kan skille de to problemer ad, vi kan være nødt til at tage det yderste tog på LIFO-sporet først. Vi kan heller ikke afgøre, hvornår det skal på værksted uden at kende sporet, det skal parkeres på først, da der er forskellige tider for spor-værksted kombinationer. Vi kan derfor ikke løse vores problemstilling som et set partitioning problem med bibetingelser tilsvarende. Schrijvers løsning. The train shunting problem er også løst af Schrijver, Lentink og Kroon i 2007 [3]. Her løses problemet samlet, dvs. de opdeler ikke problemet i to dele. Hvis der er n enheder, har vi en mængde T med 2n elementer, n ankommende og n afgående enheder. De ankommende skal matches med de afgående. Vi kender togenes ankomst- og afgangstider, og vi ved, hvilke enheder fra T, der er i de enkelte tog. Vi kan så indføre en partiel tidsmæssig ordning blandt elementerne i T, således at a < b, hvis a ankommer/afgår før b ankommer/afgår. Denne ordning bruges i modellen til at formulere matching og crossings. Vi kender som sagt ikke ankomst- og afgangstiderne til vores depotspor. Togene ankommer desuden to gange. Vi kan derfor ikke ordne togene tilsvarende, så vi kan ikke modellere på en lignende måde. 5.3 Mandskabsplanlægning Henrik T. Poulsen beskriver i [21] de generelle regler ved udarbejdelsen af en vagtplan på et hospital. Reglerne gælder imidlertid på alle arbejdspladser. Regler udledt af overenskomsten. Regler udledt af ansættelseskontrakten. Regler fastsat af afdelingen. Regler fastsat af afdelingen er bl.a. regler, der sikrer en minimumsbemanding. Regler om bemandingskrav vil oftest være hårde begrænsninger, dvs. de må ikke brydes. I [21] opstilles nu en MIP-model af reglerne. Der er mange, f.eks. at folk skal have to fridøgn pr. uge. Reglerne afhænger af afdelingen, jfr. punkt 3 ovenfor, så der opbygges flere modeller, en for hver af de forskellige afdelinger på hospitalet. 18

Ved at medtage mandskabsplanlægning kan vi matche bemandingen til de tog, der kommer i perioden. Det vil imidlertid gøre vores opgave betydelig større. Vi har begrænset os til at antage, at bemandingen er givet i perioden, og således ikke skal bestemmes. 19

Kapitel 6 Modellen Vi forklarer i afsnit 6.1.1, hvordan vi repræsenterer reparationer, så det kan afgøres, om der er de nødvendige faciliteter i form af mandskab og indretning på værkstedet til at kunne udføre dem. Derefter argumenterer vi i afsnit 6.1.2 for, at vi må diskretisere tiden. Vi angiver i afsnit 6.2 de data, vi kender for værkstedsanlægget og de ankomne tog. I afsnit 6.3 defineres de variable, vi skal bestemme. Vi kan så gå i gang med modellen afsnit 6.4. I modellen vil vi angive, hvornår et tog er hvor, og hvilke begrænsninger, der gælder hvert sted. 6.1 Repræsentation af reparationer og tid Vi har brug for at kunne angive, hvad der skal repareres. Hvordan angiver vi, at værkstedet er indrettet, så reparationen kan foretages der? Vi skal også overveje, hvordan vi angiver tiden. Først indfører vi begrebet reparationstyper. Derefter argumenterer vi for, at tiden skal diskretiseres, og bliver et heltal mellem 1 og et maksimum. 6.1.1 Reparationstyper En reparation kræver nogle værkstedsfaciliteter og nogle kvalificerede medarbejdere. Vi vil gerne kunne angive en reparation, så det kan afgøres, om et værksted kan klare reparationen, samt hvilke medarbejdere, der kræves til reparationen. Dette gør vi ved at have typer af reparation, som vi kan angive med tal. Hvert tog har så en reparationstype, og et værksted skal kunne klare togets reparationstype. Vi antager altså, at de forskellige reparationer kan klassificeres i reparationstyper (fremover blot kaldet typer). En type kan være en reparation af en dør eller en vask af toget. Vi ved for hver type, hvilket mandskab der kræves. En oplagt typeinddeling er at lade en type svare til den reparatør eller gruppe af reparatører, der skal bruges til reparationen. Så vil typen normalt stemme overens med værkstedets faciliteter. Med denne typeinddeling undgår man for mange typer. Men typeinddelingen er dog op til værkstedet, i denne opgave antager vi blot, at en tog har en type. 20

Planlæggerne kender typen for hvert nyt tog. Det vides, for hvert værksted og for hver type, hvorvidt værkstedet kan klare typen. Der kan være flere modeller af tog, f.eks. nye eller gamle S-tog. Dette indebærer for værkstedets vedkommende, at der kan være forskellige reparationstyper. Vi har derfor allerede taget højde for de forskellige modeller af tog med vores inddeling i reparationstyper. Hvis der er n r (reparations)typer, er typerne mængden R = {1,...,n r }. R ændrer sig normalt ikke med tiden. 6.1.2 Tider Tidsangivelser Vi vil gerne udtrykke, at et tog er et givet sted på et givet tidspunkt, og at noget har en vis varighed. Vi vil også gerne kunne udregne, om et tog kan repareres på et givet tidspunkt. En mandskabsplan udtrykker normalt på timebasis, hvornår der er mandskab til rådighed. Derfor har vi valgt at diskretisere tiden, dvs. at vi opdeler tiden i et antal tidsenheder. Alle tider i dette projekt er tal i mængden T = {1,...,n t }. Tallet n t angiver derved, hvor fin opdelingen af perioden i tidsenheder skal være, jo større n t, jo flere og mindre tidsenheder. I praksis skal der ske en omregning mellem reelle tider, og tiden som et tal i T. Ved denne omregning skal man tage hensyn til åbningstider og weekender. Hvis tidsenheden f.eks. er timer, og et tog skal være færdigt om 4 dage og 2 timer, er det om 4 16 + 2 = 66 arbejdstimer ved en 16 timers arbejdsdag, medmindre der er weekend imellem, og lukket de to dage i weekenden, så er det om 2 16 + 2 = 34 arbejdstimer. Man skal også tage hensyn til helligdage eller til tidligt fri om fredagen. Men denne omregning overspringes altså. I dette projekt vil vi koncentrere os om skeduleringen. Spørgsmålet er, hvad n t skal sættes til. Værkstedet vil muligvis lade en tidsenhed svare til et kvarter, det er en passende diskretion, når vi taler om tograngeringer. Pr. dag er der så 16 4 = 64 tidsenheder, ved en 16 timers arbejdsdag. n t skal væres så stor, at alle de kendte tidspunkter, der er for togene (ankomsttid, deadline, afhentningstid) kan nå at komme med, og så alle tog er færdigafleverede inden n t. Den model, vi udvikler, viser sig at have størrelsen O(n 2 +n n t ), se afsnit 6.7. Størrelsen og dermed køretiden for modellen afhænger altså af n t, så n t skal ikke være større end absolut nødvendigt. Planlægningshorisont Vi vil afgøre, hvor langt ud i fremtiden, vores planlægning skal dække. Værkstedet planlægger for en periode på 2-3 dage. For tog, der ankommer sidst i 3-dages perioden, vil deadline og afhentningstid være senere end sluttidspunktet for perioden. Så tidsperioden svarende til T er længere end de 3 dage. 21

Vi vil planlægge for hele T. Hvis der er et tog på værkstedet i slutningen af 3-dage perioden, er sluttidspunktet for reparationen af toget senere end periodens slut. Men vi skal planlægge at få tog færdige så hurtigt som muligt, så vi skal bruge dette sluttidspunkt for reparationen til beregningen. Toget skal også tilbage til depotsporene. Måske kan vi allerede i denne 3-dage periode forudse, at det vil indebære en blokering i næste periode. Det er derfor mest naturligt at planlægge alle 3-dage periodens tog til og med afleveringen af togene. Vi skal bruge mandskabsplanen (se senere) til vores planlægning. Den skal dække hele perioden fra 1 til n t. 6.2 Givne data Vi vil her definere de data, der antages at være kendte. Der er en samlet oversigt over dem i appendix C. Data for tog og mandskab ændrer sig fra tidsperiode til tidsperiode, mens data for værksteder og spor normalt er uændrede med tiden. Man kunne dog forestille sig, at enkelte værksteder lukkes ned på helligdage. Tog I den næste tidsperiode ankommer n tog, der nummereres fra 1 til n. Vi vil nummere dem i ankomstrækkefølge. Togene bliver således en mængde I = {1,...,n}. Vi ved følgende om tog i: ank i er det ankomstidspunkt, hvor toget ankommer til ankomsttstedet, hvorfra det skal afhentes af en rangerer fra værkstedet. dead i er deadline for, hvornår toget skal være færdigt. En reparation af et S-tog skal normalt ske indenfor en snæver tidsperiode, så toget kun er ude af drift i en kort periode. r i er type af reparation. var i er hvor lang tid, reparationen forventes at vare. afh i er det tidspunkt, DSB forventer at afhente toget fra afleveringsstedet. Oftest er dette tidspunkt tæt på dead i. l i er den fysiske længde af toget. Der kan være tog inde i værkstederne ved periodens start, eller tog på sporene. Dem medtager vi som sagt, så de udgør nogle af de n tog, for at koordinere med de andre tog og undgå blokeringer. Værksteder Der er et antal, n v, værksteder, og vi nummererer dem fra 1 til n v. Værkstederne bliver således en mængde V = {1,...,n v }. At værkstedet v V kan klare reparationstypen r R vil vi angive ved at lade konstanten w r v = 1. I modsat fald er wr v = 0. Antallet (der er n v n r ) og værdierne af disse konstanter ændrer sig normalt ikke med tiden. Vi skal i modellen udregne, hvilket værksted v i et tog i skal ind på. Måske er det givet, f.eks. hvis toget er inde på værkstedet ved periodens start. 22

Spor Der er et antal, n s, depotspor beregnet på parkering. Disse nummereres fra 1 til n s. Vi skal i modellen udregne, hvilket spor s i et tog i skal parkeres på, dvs. s i skal bestemmes. Det kan imidlertid forekomme, at man ikke behøver parkere toget, det kan komme til med det samme. I så fald sættes s i til 0. Sporene bliver således mængden S = {0, 1,..., n s }. k s er kapaciteten af spor s, dvs. dets længde. Transporttider For at kunne afsætte rangerpersonale er vi interesserede i de tider, det varer at komme fra et opholdssted til et andet, dvs. fra startknude til et spor eller til et værksted, fra spor til værksted, fra spor til slutknude eller fra værksted til slutknude. Disse tider er kendte: Vi kalder transporttiden for at komme fra spor i til værksted j (og omvendt) for kt vj si, fra start til spor i for ktsi start, og fra spor i til slut for kt slut si. Kørsel direkte fra start til værksted, eller fra værksted til slut, er et specialtilfælde. Vi vil gerne slippe for hele tiden at skulle formulere dette. Vi håndterer det ved at lade som om, at spor 0 er et ægte spor. Vi opdeler køretiden fra start til værksted i to dele, fra start til spor 0, og fra spor 0 til det relevante værksted. En af disse to dele kan være 0. Tilsvarende opdeles køretiden ved kørsel direkte fra værksted og til afhentning. Mandskab Til hver opgave skal der være de nødvendige medarbejdere. Vi vil bruge reparationstyper til at udregne, om der er mandskab nok. Vi nummererer de relevante jobfunktioner på værkstedet. 1 kan så f.eks. stå for rangerpersonale, 2 for mekaniker, 3 for rengøringspersonale, etc. Hvis der er n j jobfunktioner, udgør de således en mængde J = {1,...,n j }. Vi antager, 1 står for rangerer. De øvrige vil vi ikke lægge os fast på. Medarbejderne skal enten udføre en af de n r reparationstyper, eller en rangering. Vi sætter rp j r = k, hvis reparation r R kræver k medarbejdere med jobfunktion j J. F.eks. kan rp 2 5 = 3, hvis 5 er en udskiftning af boogie, og 2 er koden for mekaniker, dvs. det kræver 3 mekanikere at lave udskiftningen. Personalet har en arbejdsplan, der angiver, hvornår hver enkelt medarbejder er på arbejde. Vi sætter ar j t = k, hvis der til tiden t er k medarbejdere med jobfunktion j på arbejde. Hvis der til tiden 5 er 2 rangerere på arbejde, er således ar5 1 = 2. Tallene ar j t kan udregnes ud fra arbejdsplanen. Vi vil antage, disse tal er givet. Ellers skal vi selv beregne dem ud fra arbejdsplanen, men det falder udenfor dette projekt, hvor vi koncentrerer os om skedulering af tog. Mandskabsplanen skal mindst dække perioden fra tiden 1 tiden n t. 6.3 Variable De variable, vi skal bestemme, er tiderne, spor og værksteder. Se figur 4.1 side 15. Alle variable er heltal. i er et tog i I, dvs. et af de ankommende tog, eller et tog, der allerede er inde på anlægget fra start. 23

Nedenstående tider for tog i angiver, hvornår toget afgår fra eller ankommer til et sted. Vi har mange tider, da vi ikke kan ignorere den tid, en transport af et tog fra et sted til et andet, varer. t 1 i er det tidspunkt, hvor tog i flyttes fra startknude på vej til parkering på et depotspor. t 2 i er det tidspunkt, hvor tog i ankommer til depotsporet. t 3 i er det tidspunkt, hvor tog i fjernes fra depotsporet for at blive kørt til værksted. t 4 i det tidspunkt, hvor tog i ankommer til værkstedet. t 5 i det tidspunkt, hvor tog i er færdig på værkstedet, og skal tilbage til et spor. t 6 i t 7 i t 8 i er det tidspunkt, hvor tog i igen ankommer til et spor. er det tidspunkt, hvor tog i fjernes fra sporet for at blive kørt bort. er det tidspunkt, hvor tog i ankommer til slutknuden. For hvert af ovenstående t j i er 1 tj i n t. De variable skal forstås således, hvor t T angiver et tidspunkt: t < t 1 i t 1 i t < t2 i t 2 i t < t3 i t 3 i t < t4 i t 4 i t < t5 i t 5 i t < t6 i t 6 i t < t7 i t 7 i t < t8 i t 8 i t Toget er i startknuden. Toget er undervejs fra startknude til depotspor. Toget holder på depotspor før værksted. Toget er undervejs fra depotspor til værksted. Toget er på værksted. Toget er undervejs fra værksted til depotspor. Toget er på depotspor efter værksted. Toget er undervejs fra depotspor til slutknude. Toget er i slutknuden. De næste variable angiver, hvilket spor toget parkeres på, eller hvilket værksted, det skal ind på: s 1 i er det depotspor, som tog i parkeres på før værksted. Her er 0 s1 i n s. Spor 0 betyder, at toget ikke parkeres på depotspor. v i det værksted, hvor tog i efterses. Her er 1 v i n v. s 2 i er det depotspor, som tog i parkeres på efter værksted. Her er 0 s2 i n s. Ovenstående variable skal findes for at lave en skedulering. Nogle af dem kan dog være givet på forhånd, f.eks. hvis tog i er på værksted v fra starten, så er v i = v. Rent teknisk i inddatafilen, hvis en variabel, f.eks. v i er sat til -1, skal den beregnes. Hvis den er en værdi 0, er variablen fastsat til denne værdi. I grundmodellen bruger jeg også nogle indikatorvariable, der angiver, hvor toget er til et bestemt tidspunkt: 24

Variablen fstart,t i = 1, hvis tog i I er i startknuden til tiden t T. Ellers er variablen 0. Variablen fl1s,t i = 1, hvis tog i I før værkstedet er parkeret depotspor s S \ {0} til tiden t T. Ellers er variablen 0. Variablen fl2s,t i = 1, hvis tog i I efter værkstedet er parkeret depotspor s S \ {0} til tiden t T. Ellers er variablen 0. Variablen fv i j,t = 1, hvis tog i I er i værksted j V til tiden t T. Ellers er variablen 0. Variablen fslut,t i = 1, hvis tog i I er i slutknuden til tiden t T. Ellers er variablen 0. Variablen fu,t i = 1, hvis tog i I er undervejs (kørende mellem to opholdssteder) til tiden t T. Ellers er variablen 0. Antallet af variable er udregnet i appendix E.1. 6.4 Begrænsninger Vi angiver, hvor toget befinder sig i tidsrummet fra 1 til n t, og hvilke begrænsninger, der er det pågældende sted. Tider er stigende Tidspunkterne nævnt under Variable er stigende: Et tog befinder sig netop et sted t 1 i t2 i t 2 i t 3 i t 3 i t4 i t 4 i t 5 i t 5 i t6 i t 6 i t 7 i t 7 i t8 i for i I (6.1) Et tog befinder sig til ethvert tidspunkt i netop en knude, enten start, på et LIFO-depotspor før det har været på værksted, på et LIFO-depotspor efter det har været på værksted, i et værksted, i slutknuden eller undervejs. f i start,t + s>0 f i L1s,t + s>0 f i L2s,t + fv i v,t + fslut,t i + fu,t i v V = 1 for t T, i I (6.2) 25

Hvornår er toget i den enkelte knude Vi afgør nu ud fra inddata, hvornår toget er hvor, og hvor længe: Startknuden Først er toget i startknuden. t < t 1 i fi start,t = 1 for t T, i I (6.3) Derefter er det undervejs til et LIFO-spor. Det, at toget er undervejs, modellerer vi ikke specielt, se til sidst. Et tog kan først parkeres, efter det er ankommet Det er klart, at en rangerer først kan parkere et tog efter, at det er ankommet. Tog i ankommer det kendte tidspunkt ank i. Variablen t 1 i er tidspunktet, det køres fra ankomstknuden. Parkering sker i ankomstrækkefølge ank i t 1 i for i I (6.4) Parkering sker i ankomstrækkefølge. Denne begrænsning er ikke afgørende. Vi har medtaget den her, da det virker naturligt, at rangerpersonalet afhenter togene fra ankomststedet i den rækkefølge, de ankommer, men det er ikke sikkert, at det foregår således. Hvis vi udelader den, ændrer det ikke ret meget på den endelige løsning. I de fleste tilfælde vil vi få den samme løsning. Grunden til det er, at vi vil straffe i objektfunktionen, hvis ikke toget bliver afhentet så tidligt som muligt fra ankomsstedet. Transporttid fra start til depotspor t 1 i t 1 i+1 for i I \ {n} (6.5) Der er transporttid mellem to opholdssteder. Dette giver følgende sammenhæng mellem tiderne, hvis det er transport fra start til LIFO-spor (kt Ss start er køretiden fra startknude til spor s) s 1 i = s t 2 i = t 1 i + kt Ss start for i I, s S (6.6) Tiden på depotsporet før værkstedet Nu holder toget på et depotspor før værkstedet, medmindre det er kørt direkte til værksted. Det er klart, at toget er i spor s, når t 2 i t < t3 i og s1 i = s t 2 i t < t3 i s1 i = s fi L1s,t = 1 for t T, i I, s S (6.7) Spor 0 ved direkte transport Det er som sagt ikke sikkert, at toget parkeres på depotspor inden værkstedsbesøg, måske køres det til værksted direkte uden først at blive parkeret. Vi sætter i dette tilfælde s 1 i = 0, og tiderne t2 i og t3 i er ens, da toget ikke bruger tid på depotspor før værksted. t 2 i = t3 i s1 i = 0 for i I (6.8) 26

Transporttid fra depotspor til værksted Derefter er det undervejs til værkstedet. Der er følgende sammenhæng mellem afgangs- og ankomsttider fra spor til værksted (kt V Ss v er køretiden fra spor s til værksted v, eller omvendt): s 1 i = s v i = v t 4 i = t3 i + ktv Ss v, i I, s S, v V (6.9) Tidsperiode på værkstedet Toget er i værksted v, når t 4 i t < t5 i v i = v t 4 i t < t5 i v i = v fv i v,t = 1 for t T, i I, v V (6.10) Mindste opholdstid på værkstedet Det befinder sig i værkstedet i mindst tiden var i, den tid, der er beregnet til reparationen. t 5 i >= t4 i + var i for i I (6.11) Det er ikke nødvendigvis præcist tiden var i. Der skal nemlig være rangerpersonale til at køre toget ud af værkstedet, når det er færdigt. Hvis dette ikke er tilfældet, må toget vente i værkstedet. Transporttid fra værksted til depotspor Efter værkstedet er toget igen undervejs, indtil det parkeres på et depotspor, som ikke nødvendigvis er det samme som før. Det kan evt. blive kørt bort straks. Hvis det parkeres på spor s, er sammenhængen mellem t 5 i og t6 i s 2 i = s v i = v t 6 i = t5 i + ktv Ss v, i I, s S, v V (6.12) Spor 0 ved direkte transport Analogt til (6.8) er det ikke sikkert, at toget parkeres efter værksted, måske køres det straks bort. I så fald er s 2 i = 0, og tiderne t6 og t 7 er ens. Tiden på depotsporet efter værkstedet t 6 i = t 7 i s 2 i = 0 for i I (6.13) Ellers, mellem tiderne t 6 i og t7 i holder toget på et spor. t 6 i t < t7 i s2 i = s fi L2s,t = 1 for t T, i I, s S (6.14) Transporttid fra depotspor til slutknude Senere køres det bort. Tiden afhænger af sporet (kt slut Ss til slutknude). er køretiden fra spor s s 2 i = s t 8 i = t 7 i + kt slut Ss for i I, s S (6.15) 27