Skip to content

lower bounds greedy RAPTOR#326

Draft
mority wants to merge 3 commits intomotis-project:masterfrom
mority:lb_greedy
Draft

lower bounds greedy RAPTOR#326
mority wants to merge 3 commits intomotis-project:masterfrom
mority:lb_greedy

Conversation

@mority
Copy link
Contributor

@mority mority commented Feb 25, 2026

Building a RAPTOR that uses lower bounds as goal direction

  • At the beginning of each round when iterating the station marks to assign route marks. Each route is assigned the lower bounds value of that station. This is stored in vector_map<route_idx_t, std::uint16_t> route_lb_, same thing for RT transports.
  • When handling the route marks, we retrieve the lower bounds value for each stop. If the lower bounds value of the stop is bigger than the one stored in route_lb_ the stop is skipped (again we do the same thing for RT transports).
  • Enabled it for the ping of PONG but it leads to a lot failures where the pong can not find the journey of the ping. Therefore, I am only working with search.h, i.e. range RAPTOR, for now.

versions so far:

  • greedy: skip stops with greater lower bounds value
  • more greedy: skip stops with greater or equal lower bounds value
  • acceptable loss factor: skip stops with a lower bounds value that is greater by some factor
  • threshold: do not skip if lower bound value is under a certain threshold

Unit Tests

The implementation passes most unit tests for the vanilla RAPTOR. Current failures:

  • td_offsets
  • some via tests

Evaluation on DELFI GTFS

Correctness

with interval extension:

  • greedy: 326/1000
  • more greedy: 35/1000

fixed 2h search windows:

  • acceptable loss 1.0: 478/1000
  • acceptable loss 1.42: 738/1000
  • more greedy: 198/1000
  • acceptable loss 1.42, threshold 60: 966/1000

Performance: with array extension and min connection count = 5

baseline

response_time
average: 1,381.23
max: 37,397
99 quantile: 19,717
90 quantile: 3,227
80 quantile: 1,685
50 quantile: 352
min: 0

greedy

response_time
average: 663.49
max: 27,799
99 quantile: 5,231
90 quantile: 1,414
80 quantile: 796
50 quantile: 312
min: 1

more greedy

response_time
average: 691.30
max: 9,232
99 quantile: 4,581
90 quantile: 1,518
80 quantile: 964
50 quantile: 359
min: 2

Performance: 2h search windows and no min con count

baseline

response_time
average: 394.78
max: 4,868
99 quantile: 2,549
90 quantile: 1,080
80 quantile: 615
50 quantile: 155
min: 0

acceptable loss = 1.0 (i.e., no increase of lb accepted)

response_time
average: 228.58
max: 2,601
99 quantile: 1,195
90 quantile: 452
80 quantile: 292
50 quantile: 145
min: 0

acceptable loss = 1.42 (i.e., the lb may increase up until 42%)

response_time
average: 314.44
max: 3,797
99 quantile: 2,120
90 quantile: 839
80 quantile: 413
50 quantile: 135
min: 0

more greedy

response_time
average: 136.27
max: 703
99 quantile: 400
90 quantile: 223
80 quantile: 169
50 quantile: 109
min: 0

acceptable loss 1.42, threshold 60

response_time
average: 324.71
max: 3,858
99 quantile: 2,164
90 quantile: 848
80 quantile: 435
50 quantile: 146
min: 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant