Example #1
0
 def calc_schedule_delay(self, timeslice):
     if not self.is_madatory:
         return 0.0
     lower = self.pref_timing - conf.DELTA - slice2min(timeslice)
     upper = slice2min(timeslice) - conf.DELTA - self.pref_timing
     if lower > 0.0:
         early_cost = lower * conf.ALPHA_early
         return early_cost
     if upper > 0.0:
         late_cost = upper * conf.ALPHA_late
         return late_cost
     return 0.0
Example #2
0
 def calc_schedule_delay(self, timeslice):
     if not self.is_madatory:
         return 0.0
     lower = self.pref_timing - conf.DELTA - slice2min(timeslice)
     upper = slice2min(timeslice) - conf.DELTA - self.pref_timing
     if lower > 0.0:
         early_cost = lower * conf.ALPHA_early
         return early_cost
     if upper > 0.0:
         late_cost = upper * conf.ALPHA_late
         return late_cost
     return 0.0
Example #3
0
 def get_movements(self, timeslice):
     ''' Return the list of movements at timeslice or generate the list if neccessary.
         The travel time and travel cost is calculated at the same time. 
     '''
     if timeslice in self.moves_on_path:
         return self.moves_on_path[timeslice]
     # first calculate transfer cost
     total_travel_cost = self.num_transfer * conf.ALPHA_tran
     # then generate memoization for movements on path, and calculate other travel costs
     self.moves_on_path[timeslice] = []
     self.path_travel_time[timeslice] = 0.0
     timeline = timeslice
     for each_edge in self.edges_on_path:
         if isinstance(each_edge.related_vector, TransitLine):
             # if the edge is a transit line
             line = each_edge.related_vector
             (arrival_time,
              wait_time) = line.calc_arrival_time(slice2min(timeline),
                                                  each_edge.head_node,
                                                  each_edge.tail_node)
             # when there is no public transport service at timeslice, return infinite travel time/cost
             if arrival_time == float('inf') or wait_time == float('inf'):
                 self.path_travel_timeslice[timeslice] = float('inf')
                 self.path_travel_cost[timeslice] = float('inf')
                 return []
             in_vehicle_time = arrival_time - slice2min(
                 timeline) - wait_time
             # create transit line move
             line_move = Move(timeline + min2slice(wait_time), each_edge)
             self.moves_on_path[timeslice].append(line_move)
             timeline = min2slice(arrival_time)
             # calculate travel cost
             wait_cost = wait_time * conf.ALPHA_wait
             move_flow = get_move_flow(line_move)
             in_vehicle_cost = line.calc_travel_cost(
                 in_vehicle_time, move_flow)
             total_travel_cost = total_travel_cost + in_vehicle_cost + wait_cost
         else:
             # if the edge is NOT a transit line
             each_vector = each_edge.related_vector
             next_move = Move(timeline, each_edge)
             self.moves_on_path[timeslice].append(next_move)
             move_flow = get_move_flow(next_move)
             travel_time = each_vector.calc_travel_time(move_flow)
             travel_cost = each_vector.calc_travel_cost(travel_time)
             timeline = timeline + min2slice(travel_time)
             total_travel_cost = total_travel_cost + travel_cost
             self.path_travel_time[timeslice] += travel_time
     self.path_travel_timeslice[timeslice] = timeline - timeslice
     self.path_travel_cost[timeslice] = total_travel_cost
     return self.moves_on_path[timeslice]
Example #4
0
 def get_movements(self, timeslice):
     ''' Return the list of movements at timeslice or generate the list if neccessary.
         The travel time and travel cost is calculated at the same time. 
     '''
     if timeslice in self.moves_on_path:
         return self.moves_on_path[timeslice]
     # first calculate transfer cost
     total_travel_cost = self.num_transfer * conf.ALPHA_tran
     # then generate memoization for movements on path, and calculate other travel costs
     self.moves_on_path[timeslice] = []
     self.path_travel_time[timeslice] = 0.0
     timeline = timeslice
     for each_edge in self.edges_on_path:
         if isinstance(each_edge.related_vector, TransitLine):
             # if the edge is a transit line
             line = each_edge.related_vector
             (arrival_time, wait_time) = line.calc_arrival_time(
                 slice2min(timeline), each_edge.head_node, each_edge.tail_node)
             # when there is no public transport service at timeslice, return infinite travel time/cost 
             if arrival_time == float('inf') or wait_time == float('inf'):
                 self.path_travel_timeslice[timeslice] = float('inf')
                 self.path_travel_cost[timeslice] = float('inf')
                 return []
             in_vehicle_time = arrival_time - slice2min(timeline) - wait_time
             # create transit line move
             line_move = Move(timeline + min2slice(wait_time), each_edge)
             self.moves_on_path[timeslice].append(line_move)
             timeline = min2slice(arrival_time)
             # calculate travel cost
             wait_cost = wait_time * conf.ALPHA_wait
             move_flow = get_move_flow(line_move)
             in_vehicle_cost = line.calc_travel_cost(in_vehicle_time, move_flow)
             total_travel_cost = total_travel_cost + in_vehicle_cost + wait_cost
         else:
             # if the edge is NOT a transit line
             each_vector = each_edge.related_vector
             next_move = Move(timeline, each_edge)
             self.moves_on_path[timeslice].append(next_move)
             move_flow = get_move_flow(next_move)
             travel_time = each_vector.calc_travel_time(move_flow)
             travel_cost = each_vector.calc_travel_cost(travel_time)
             timeline = timeline + min2slice(travel_time)
             total_travel_cost = total_travel_cost + travel_cost
             self.path_travel_time[timeslice] += travel_time
     self.path_travel_timeslice[timeslice] = timeline - timeslice
     self.path_travel_cost[timeslice] = total_travel_cost
     return self.moves_on_path[timeslice]
Example #5
0
 def discrete_util(self, timeslice):
     lower = slice2min(timeslice) - conf.TICK/2.0
     upper = lower + conf.TICK
     if timeslice == 0:
         ans = quad(self.marginal_util, [0.0, conf.TICK/2.0]) + \
               quad(self.marginal_util, [conf.DAY-conf.TICK/2.0, conf.DAY])
     else:
         ans = quad(self.marginal_util, [lower, upper])
     return ans
Example #6
0
 def discrete_util(self, timeslice):
     lower = slice2min(timeslice) - conf.TICK / 2.0
     upper = lower + conf.TICK
     if timeslice == 0:
         ans = quad(self.marginal_util, [0.0, conf.TICK/2.0]) + \
               quad(self.marginal_util, [conf.DAY-conf.TICK/2.0, conf.DAY])
     else:
         ans = quad(self.marginal_util, [lower, upper])
     return ans