Advanced Time Features
Beyond basic time windows and scheduling, the VRP solver offers advanced time features for precise control over arrival times, service scheduling, and multi-day optimization. This guide covers snapUnit, job padding, overtime management, and time-dependent routing.Time Snapping (snapUnit)
Round arrival times to specific intervals for cleaner schedules:How snapUnit Works
Snap Behavior: Arrival times are rounded UP to the nearest snapUnit interval.
- Actual arrival: 9:03 → Snapped to: 9:15
- Actual arrival: 9:15 → Stays at: 9:15
- Actual arrival: 9:16 → Snapped to: 9:30
Common snapUnit Values
Impact on Routes
1
Calculate Natural Arrival
Solver determines optimal arrival time
2
Apply Snap Rounding
Round up to next snapUnit interval
3
Add Wait Time
Driver waits if arrived before snapped time
4
Start Service
Begin job at snapped arrival time
Job Padding
Add buffer time before and after jobs:Padding Use Cases
Setup/Teardown Time
Setup/Teardown Time
Customer Preparation
Customer Preparation
Safety Buffer
Safety Buffer
Padding vs snapUnit Interaction
Important: Padding is applied AFTER snap calculations.Example with snapUnit=900 (15 min) and padding=300 (5 min):
- Natural arrival: 9:03
- Snapped arrival: 9:15
- Actual service start: 9:20 (after padding)
- Service end: 10:20
- Ready for next job: 10:25 (after padding)
Advanced Overtime Management
Configure flexible overtime with graduated penalties:Overtime Strategies
Time-Dependent Routing
Account for traffic patterns and rush hours:Traffic Pattern Modeling
1
Define Time Periods
Identify distinct traffic patterns:
- Morning rush: 6-9 AM
- Midday: 9 AM-4 PM
- Evening rush: 4-7 PM
- Night: 7 PM-6 AM
2
Create Period Matrices
Generate distance matrices for each period with realistic travel times
3
Configure Transitions
Solver automatically interpolates between periods
4
Validate Results
Check routes avoid heavy traffic when possible
Multi-Day ASAP Optimization
Schedule jobs as early as possible across multiple days:DayIndex Logic
dayIndex represents the earliest day a job can be scheduled:
dayIndex: 0
→ Can be scheduled on day 1dayIndex: 1
→ Cannot be scheduled before day 2dayIndex: 2
→ Cannot be scheduled before day 3
asapWeight
, this creates pressure to schedule jobs on their earliest available day.Complex Time Scenario
Combining all advanced time features:Expected Behavior
-
Morning appointment:
- Natural arrival: 8:12
- Snapped to: 8:15
- Service: 8:20-9:05 (with padding)
- Depart: 9:10
-
Afternoon installation:
- Natural arrival: 13:08
- Snapped to: 13:15
- Service: 13:25-15:25 (with padding)
- Depart: 15:35
Performance Optimization
Time Feature Impact
Performance Considerations
Performance Considerations
Low Impact:
- snapUnit with reasonable intervals (≥300s)
- Simple padding values
- Basic overtime configuration
- Small snapUnit values (
< 300s
) - Multiple time-dependent matrices
- Complex overtime structures
- Very small snapUnit (60s)
- Many time period transitions
- Complex padding patterns
Best Practices
1
Choose Appropriate Precision
- Use 15-minute slots unless finer control needed
- Avoid snapUnit < 300 for large problems
2
Balance Features
- Don’t combine all features unless necessary
- Test impact of each feature separately
3
Monitor Wait Time
- Track wait time statistics
- Adjust snapUnit if excessive waiting
4
Validate Time Logic
- Ensure padding + duration fits in windows
- Check overtime doesn’t conflict with shifts
Troubleshooting
Excessive Wait Times
Excessive Wait Times
Symptom: Drivers waiting long periodsCauses:
- snapUnit too large
- Poor alignment with job windows
- Suboptimal route sequencing
- Reduce snapUnit value
- Adjust time windows
- Increase waitTimeWeight
Jobs Not Fitting in Windows
Jobs Not Fitting in Windows
Symptom: Jobs unassigned due to timeCauses:
- Padding makes job too long
- snapUnit pushes beyond window
- Travel time underestimated
- Reduce padding
- Widen time windows
- Verify travel time accuracy
Unexpected Overtime
Unexpected Overtime
Symptom: Routes extending past regular hoursCauses:
- snapUnit delaying arrivals
- Padding accumulating
- Poor ASAP prioritization
- Increase overtimeWeight
- Review time feature combinations
- Adjust shift definitions