Naar inhoud
← Alle inzichten

Klantcase · NS

NS: waarom treinen herplannen NP-hard is

NS plant het onderhoud van haar treinen elke dag tot op de minuut. Eén trein die te laat is, kan die planning breken. Herstellen klinkt eenvoudig, maar het hoort bij een van de zwaarste klassen problemen in de informatica. Hier leest u waarom, en hoe u het toch oplost.

F Stelmach8 augustus 202010 min leestijd

De case is echt. De steden, treinen en planningen in de interactieve voorbeelden zijn illustratief: ze laten zien hoe het probleem zich gedraagt, niet de werkelijke planning van NS.

Eén handelsreiziger, te veel routes

Begin bij de beroemdste puzzel uit de planningswereld. Een handelsreiziger moet een aantal steden bezoeken, elk precies één keer, en eindigen waar hij begon. Welke volgorde geeft de kortste reis? Het heet het handelsreizigersprobleem, en het klinkt als iets voor een regenachtige middag.

Met vijf steden zijn er 12 verschillende rondritten, met de hand na te lopen. Met tien zijn het er 181.440. Elke stad die erbij komt, vermenigvuldigt het aantal routes met het aantal steden dat er al ligt. Schuif en zie wat dat doet.

10
Verschillende rondritten
181.440
Ze allemaal nalopen, bij een miljard routes per seconde
minder dan een seconde

Dit heet combinatorische explosie, en een snellere computer maakt er nauwelijks een deuk in. Een machine die duizend keer sneller is, levert twee of drie steden extra op, geen duizend.

Elke route nalopen, of slimmer denken

De voor de hand liggende aanpak is brute kracht: probeer elke route en bewaar de kortste. Die vindt gegarandeerd het perfecte antwoord, en voor een handvol steden gaat dat prima. Daarna wordt hij nooit meer klaar.

De slimmere aanpak begint met een snelle, redelijke route en verbetert die. Nearest neighbour gaat steeds naar de dichtstbijzijnde stad die nog niet bezocht is. Dat is snel, maar het werkt zich vast in hoeken en houdt lange sprongen over voor het eind. 2-opt zoekt daarna twee stukken van de route die elkaar kruisen, of die andersom korter zijn, en verbindt ze opnieuw. Herhaal tot er niets meer te verbeteren valt.

Probeer ze alle drie op dezelfde kaart. Brute kracht loopt duizenden routes na om zeker te zijn. Het slimme duo komt meestal op dezelfde route uit, of binnen een paar procent, na een paar tientallen stappen. Kies daarna 30 steden en probeer brute kracht nog eens.

  • Route die wordt geprobeerd
  • Snelle eerste route
  • Beste route tot nu toe
Lengte van de route
–
 
Stappen
0

De echte vraag

In de praktijk vraagt niemand om de perfecte planning. De vraag is: wat is de beste planning die we kunnen vinden voordat de volgende trein binnenkomt? Dan verandert het probleem van het optimum vinden naar snel een heel goed antwoord vinden, en weten hoe goed het is.

Wat NP-hard eigenlijk betekent

Het handelsreizigersprobleem heeft een vreemde eigenschap. Krijgt u een route aangereikt, dan is in een oogwenk na te rekenen hoe lang die is. Zelf de kortste route vinden kent geen bekende kortere weg: elke methode die hem gegarandeerd vindt, wordt explosief trager naarmate het probleem groeit.

Zulke problemen heten NP-hard. Ze zijn minstens zo moeilijk als een hele familie problemen die makkelijk te controleren zijn, maar voor zover iemand weet moeilijk op te lossen. Vindt u een snelle exacte methode voor één ervan, dan hebt u er een voor allemaal. Of dat überhaupt kan, de vraag P versus NP, is een van de zeven Millennium Prize Problems, met een miljoen dollar voor wie het beslecht. Niemand heeft dat nog gedaan.

Bij NP-harde problemen zoekt u dus niet naar een truc die ze makkelijk maakt. U zoekt een slimme manier om een heel goed antwoord te vinden in de tijd die u hebt.

Van handelsreizigers naar onderhoudssporen

NS heeft elke dag uitgebreide en strakke planningen voor het onderhoud van haar treinen. Elke trein die binnenkomt heeft zijn slot, zijn spoor en zijn team. Komt een trein te laat binnen, dan kan de planning niet meer worden gevolgd, en moet die worden hersteld met een herplanningsalgoritme.

Het verband met de handelsreiziger is direct. De steden worden de treinen die onderhoud nodig hebben, de route wordt de volgorde en het spoor voor elke trein, en de afstand wordt het aantal minuten vertraging. Daar komen regels bij die de handelsreiziger nooit had: welk werk op welk spoor past, welk team vrij is, welke trein op tijd weg moet voor de avondspits.

Laat hieronder één trein te laat komen en probeer drie manieren om de dag te herstellen. Het addertje: een spoor houdt één trein tegelijk, en elk team heeft zich voorbereid op de trein die de planning stuurt. Wacht op uw eigen spoor, en elke trein achter de late erft de vertraging. Improviseer, en elke trein neemt het eerste vrije spoor: treinen staan waar niemand ze verwachtte, teams moeten zoeken naar onderdelen of een trein, en terwijl ze met de ene bezig zijn, zijn ze niet klaar voor de volgende. Binnen een uur is het hele bord door elkaar gegooid. Een slimme herplanner kijkt vooruit en verplaatst alleen wat loont.

60 min
Hoe herstelt u de dag
  • Op tijd
  • Te laat
  • Verplaatst: team niet voorbereid
  • Waar de planning hem had

SLT 2617 is te laat, en spoor 1 houdt één trein tegelijk. Elke trein erachter wacht op zijn eigen spoor, dus de vertraging rolt door de hele rij.

Treinen te laat
3
Minuten te laat in totaal
180
Over de dienst heen
0
Teams onvoorbereid
0

Zelfs dit kleine bord, elf treinen op drie sporen, kan op 3.113.510.400 manieren worden ingedeeld. De illustratie heeft drie sporen, maar een echte werkplaats heeft er tien of meer. Met tien sporen en veertig treinen per dag groeit het aantal mogelijke planningen tot 1,7 × 1057, veel meer dan het aantal routes op de kaart met 30 steden waarop brute kracht opgaf. En een nieuwe planning is binnen minuten nodig.

Dat is het handelsreizigersprobleem waar we mee begonnen, in een andere vorm. De treinen zijn de steden, de volgorde op elk spoor is de route, en elke trein extra vermenigvuldigt de mogelijkheden. Brute kracht loopt hier net zo vast als op de kaart, en alleen een slimmere aanpak vindt op tijd een goede planning.

Waarom deze problemen zo interessant zijn

Dit maakt planningsproblemen boeiend in plaats van saai. Rekenkracht alleen wint niet. U wint door het probleem goed genoeg te begrijpen om te weten welke kortere wegen veilig zijn: welke delen van de planning kunnen blijven staan, welke keuzes vroeg zijn uit te sluiten, waar een goed antwoord waarschijnlijk ligt.

En geen twee zijn hetzelfde. Een werkplaats, een bezorgvloot, een ziekenhuisrooster en een productielijn lijken van een afstand allemaal op de handelsreiziger, maar elk heeft eigen regels, een eigen doel en een eigen tijdslimiet. Een standaard solver past zelden. Elk vraagt om een eigen, creatieve oplossing.

  • Begin bij wat er ligt: een verstoorde planning herstellen is een ander probleem dan van nul plannen, en vaak een veel kleiner.
  • Gebruik de structuur: regels die grote delen van de zoekruimte uitsluiten, zijn meer waard dan een snellere computer.
  • Ruil bewust kwaliteit tegen tijd: een methode die in een minuut binnen één procent zit, verslaat een perfecte die morgen klaar is.
  • Houd meer dan één methode achter de hand: een rustige ochtend en een chaotische spits vragen om een andere aanpak.

Wat wij voor NS bouwden

In plaats van één vaste regel voor elke verstoring hebben wij een nieuw herplanningsframework voorgesteld en toegepast, met in totaal vier oplossingsmethodes.

  • Een framework dat de verstoorde planning als vertrekpunt neemt, in plaats van de dag opnieuw te plannen.
  • Vier oplossingsmethodes binnen dat framework, elk met een eigen balans tussen de kwaliteit van de nieuwe planning en de tijd die nodig is om die te vinden.
  • Een vergelijking van de methodes, zodat per situatie de juiste kan worden gekozen.

Een planningsprobleem dat onmogelijk lijkt?

Dat zijn de problemen die wij het mooist vinden. Elk is anders, en bij elk is er een slimmere ingang.