Files
pikebacker/docs/05_routing_and_scoring.md
2026-07-02 21:04:05 +02:00

3.6 KiB
Raw Blame History

Routing and Scoring Model

Goal

Optimize for a loaded bikepacking trip, not a generic bike route.

Route cost model

A candidate route is scored by segment and by whole-trip logistics.

segment_cost =
  distance_cost
+ climb_cost
+ steepness_cost
+ poor_surface_cost
+ traffic_stress_cost
+ access_uncertainty_cost
+ hike_a_bike_risk_cost
+ remoteness_cost
+ weather_sensitivity_cost
- official_cycle_route_bonus
- confirmed_good_segment_bonus
- scenic_bonus
stage_cost =
  ride_effort_cost
+ sleep_risk_cost
+ water_gap_cost
+ food_gap_cost
+ daylight_risk_cost
+ weather_risk_cost
+ bailout_gap_cost
+ repair_gap_cost

Segment attributes

Each segment should carry:

  • distance meters,
  • ascent/descent,
  • max grade,
  • average grade,
  • surface,
  • smoothness,
  • OSM highway class,
  • bicycle/access tags,
  • traffic stress proxy,
  • cycle route membership,
  • protected-area overlap,
  • POI distance to next water/food/repair/sleep,
  • community report score,
  • confidence score.

Bikepacking profiles

Loaded gravel

  • Prefer gravel/compact dirt and low-traffic roads.
  • Penalize technical MTB trails.
  • Penalize grades above 12% more heavily when loaded.
  • Penalize unknown surfaces in remote areas.

Hardtail bikepacking

  • Allow more rough surfaces.
  • Allow singletrack where bicycle access and difficulty are acceptable.
  • Penalize sustained paved highways and high traffic.

Road touring

  • Prefer paved low-traffic roads and official cycle routes.
  • Avoid rough surfaces, tracks, and paths with unknown rideability.

E-bikepacking

  • Add range and charging constraints.
  • Penalize long remote stretches without accommodation/charging.
  • Respect local e-bike access distinctions where available.

Beginner-safe

  • Strongly prefer known surfaces and legal certainty.
  • Avoid high traffic, remote stretches, long dry gaps, and steep grades.

Confidence model

The app should show both recommendation and confidence.

Example route summary:

Distance: 382 km
Ascent: 5,420 m
Known surface: 88%
Unpaved: 42%
Longest water gap: 36 km
Longest food gap: 58 km
Access confidence: Medium-high
Sleep certainty: 4/5 nights confirmed options
Bailout gap: Max 71 km from train/ferry/bus
Warnings: 2 steep loaded-bike climbs, 1 uncertain access segment

Hike-a-bike risk

Estimate using:

  • steep grade,
  • poor smoothness,
  • mtb:scale,
  • sac_scale,
  • surface type,
  • trail width if available,
  • rider profile,
  • actual ride speed reports,
  • user reports.

A route can include hike-a-bike if the profile allows it, but it must be visible.

Critical gap detection

Calculate gaps along the route:

  • water gap,
  • food gap,
  • sleep gap,
  • repair gap,
  • bailout gap,
  • charging gap for e-bike.

Warnings should be generated when a gap exceeds profile thresholds.

Stage planning algorithm

  1. Generate candidate endpoints every 515 km around the daily target window.
  2. Score each endpoint by sleep options, water/food, daylight fit, safety, and bailout.
  3. Prefer endpoints with at least one high-confidence sleep option.
  4. Add Plan B endpoints before and after Plan A.
  5. Rebalance subsequent stages to avoid one impossible day.
  6. Surface warnings for stages where no good endpoint exists.

Example thresholds

Profile Target km/day Max grade warning Max water gap Max food gap
Beginner-safe 4070 10% 25 km 40 km
Loaded gravel 60100 12% 40 km 70 km
Hardtail remote 5090 15% 55 km 90 km
Road touring 70130 10% 40 km 70 km
E-bikepacking 50100 12% 40 km 60 km + charging

Thresholds should be configurable per user.