{"id":266,"date":"2008-04-15T10:39:25","date_gmt":"2008-04-15T14:39:25","guid":{"rendered":"http:\/\/mat.tepper.cmu.edu\/blog\/?p=260"},"modified":"2008-04-15T10:39:25","modified_gmt":"2008-04-15T14:39:25","slug":"netherlands-railway-edelman-summary","status":"publish","type":"post","link":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/2008\/04\/15\/netherlands-railway-edelman-summary\/","title":{"rendered":"Netherlands Railway Edelman summary"},"content":{"rendered":"<p>I just got out of the &#8220;reprise&#8221; of the winning Edelman prize work by Netherlands Railways, and it was very, very good.<\/p>\n<p>If you have been to the Netherlands, they have a very nice way of handling their trains:\u00a0 every route repeats every hour.\u00a0 So if you want to go from Utrecht to Amsterdam, there are trains at 13, 25, 43 and 55 minutes after the hour, every hour.\u00a0 Of course, the size of the train changes depending on the expected demand.<\/p>\n<p>The Dutch have had the same schedule since 1970, but it was time for a change.\u00a0 Demand has doubled in that period, and there was little opportunity to increase the infrastructure.\u00a0 So could a better schedule reduce costs and improve service?\u00a0 Of course, or it wouldn&#8217;t be an Edelman Prize winner!<\/p>\n<p>There were three pieces to the system:\u00a0 the timetabler, the crew assignment system, and the rolling stock assignment system.\u00a0 The timetabler was very interesting.\u00a0 You can formulate the problem as a mixed-integer program, but the cyclic nature of the hourly schedule requires the use of &#8220;mod&#8221; constraints.\u00a0 They tried MIP for a while (and even called in the big gun Lex Schrijver to look at it:\u00a0 I saw a talk by Lex a decade or more ago on work he did with Netherlands Railway on purchasing rail cars that is still one of the nicest applications talks I have ever seen), but eventually went over to constraint programming.\u00a0 From the talk, it appears they used constraint programming primarily to find a feasible solution, and then did some local improvements, but I will have to wait for the paper to be sure what is being done.<\/p>\n<p>The other problems were solved with specialized integer programming methods.<\/p>\n<p>The best part of the talk was their discussion of the implementation, which is where the models really came through.\u00a0 The plan was to have an important length of track doubled to coincide with the new schedule.\u00a0 That doubling didn&#8217;t happen, so they had to reschedule the crew essentially at the last minute.<\/p>\n<p>The results have been really impressive.\u00a0 Crew costs are down 4% and rolling stock usage is down 6%, combining for an annual benefit of $75 million.\u00a0 As is not uncommon in OR projects, the system is both cheaper and works better.\u00a0 Punctuality is at an all-time high, and customer satisfaction is similarly improved.\u00a0 The increase in punctuality allowed them to increase fares by an additional 2%, for further profits of $30 million.\u00a0 Other than the fare increase, this looks like win-win:\u00a0 better service, more convenient times, cheaper operating costs.<\/p>\n<p>At the end there was a nice video clip of the Minister of Transport saying how important OR is.<\/p>\n<p>A worthy Edelman winner!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I just got out of the &#8220;reprise&#8221; of the winning Edelman prize work by Netherlands Railways, and it was very, very good. If you have been to the Netherlands, they have a very nice way of handling their trains:\u00a0 every route repeats every hour.\u00a0 So if you want to go from Utrecht to Amsterdam, there &hellip; <a href=\"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/2008\/04\/15\/netherlands-railway-edelman-summary\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Netherlands Railway Edelman summary&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,14,44],"tags":[],"class_list":["post-266","post","type-post","status-publish","format-standard","hentry","category-applications","category-constraint-programming","category-prizes"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=266"}],"version-history":[{"count":0,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/266\/revisions"}],"wp:attachment":[{"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mat.tepper.cmu.edu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}