MATSIM
ConfigurableRaptorRouteSelector.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.* *
3  *
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2023 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 package ch.sbb.matsim.routing.pt.raptor;
21 
23 
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.Random;
27 
44 
45  private double betaDepartureTime = 1;
46  private double betaTravelTime = 1;
47  private double betaTransfer = 300; // 1 transfer corresponds to 5 minutes
48 
49  private final Random random = MatsimRandom.getLocalInstance();
50 
51  public void setBetaDepartureTime(double betaDepartureTime) {
52  this.betaDepartureTime = betaDepartureTime;
53  }
54 
55  public void setBetaTravelTime(double betaTravelTime) {
56  this.betaTravelTime = betaTravelTime;
57  }
58 
59  public void setBetaTransfer(double betaTransfer) {
60  this.betaTransfer = betaTransfer;
61  }
62 
63  @Override
64  public RaptorRoute selectOne(List<RaptorRoute> routes, double desiredDepartureTime) {
65  if (routes == null || routes.isEmpty()) {
66  return null;
67  }
68  RaptorRoute bestRoute = null;
69  List<RaptorRoute> bestRoutes = null;
70  double bestScore = 0;
71  for (RaptorRoute route : routes) {
72  double score = betaDepartureTime * Math.abs(desiredDepartureTime - route.getDepartureTime())
73  + betaTravelTime * route.getTravelTime()
74  + betaTransfer * route.getNumberOfTransfers();
75  if (bestRoute == null || score < bestScore) {
76  bestRoute = route;
77  bestRoutes = null;
78  bestScore = score;
79  } else if (score == bestScore) {
80  if (bestRoutes == null) {
81  bestRoutes = new ArrayList<>();
82  bestRoutes.add(bestRoute);
83  }
84  bestRoutes.add(route);
85  }
86  }
87  if (bestRoutes != null) {
88  // chose a random one
89  int index = this.random.nextInt(bestRoutes.size());
90  bestRoute = bestRoutes.get(index);
91  }
92  return bestRoute;
93  }
94 }
RaptorRoute selectOne(List< RaptorRoute > routes, double desiredDepartureTime)