Vehicle restrictions¶
Some tasks can only be served by specific vehicle types.
For example, fresh food requires a refrigerated vehicle, while dry goods can only go on a dry goods truck.
FastVRP lets you control this with the allowed_vehicle_types and disallowed_vehicle_types fields on tasks.
Example¶
A logistics company in Utrecht operates two vehicles: a refrigerated truck and a dry goods truck.
There are four deliveries: Amsterdam and Groningen require refrigerated transport, while Lelystad and Leeuwarden need dry goods transport.
We set allowed_vehicle_types on each task to restrict which vehicle may serve it.
{
"locations": [
{
"id": "loc-Utrecht",
"latitude": 52.0907,
"longitude": 5.1214
},
{
"id": "loc-Amsterdam",
"latitude": 52.3676,
"longitude": 4.9041
},
{
"id": "loc-Lelystad",
"latitude": 52.5083,
"longitude": 5.4750
},
{
"id": "loc-Groningen",
"latitude": 53.2194,
"longitude": 6.5665
},
{
"id": "loc-Leeuwarden",
"latitude": 53.2014,
"longitude": 5.8086
}
],
"tasks": [
{
"id": "task-Amsterdam",
"location": "loc-Amsterdam",
"delivery": [5],
"allowed_vehicle_types": ["refrigerated"]
},
{
"id": "task-Lelystad",
"location": "loc-Lelystad",
"delivery": [3],
"allowed_vehicle_types": ["dry"]
},
{
"id": "task-Groningen",
"location": "loc-Groningen",
"delivery": [4],
"allowed_vehicle_types": ["refrigerated"]
},
{
"id": "task-Leeuwarden",
"location": "loc-Leeuwarden",
"delivery": [5],
"allowed_vehicle_types": ["dry"]
}
],
"depots": [
{
"id": "depot-Utrecht",
"location": "loc-Utrecht"
}
],
"vehicle_types": [
{
"id": "refrigerated",
"start_depot": "depot-Utrecht",
"end_depot": "depot-Utrecht",
"num_available": 1,
"capacity": [10],
"shift": {
"earliest_start": "2025-01-01T08:00:00",
"latest_end": "2025-01-01T18:00:00"
}
},
{
"id": "dry",
"start_depot": "depot-Utrecht",
"end_depot": "depot-Utrecht",
"num_available": 1,
"capacity": [10],
"shift": {
"earliest_start": "2025-01-01T08:00:00",
"latest_end": "2025-01-01T18:00:00"
}
}
],
"options": {
"stop": {
"seconds": 1,
"type": "max_runtime"
}
}
}
The refrigerated vehicle serves Amsterdam and Groningen, while the dry goods vehicle handles Lelystad and Leeuwarden.
You can also use disallowed_vehicle_types to prevent specific vehicle types from serving a task, which is useful when most vehicle types are allowed and you only want to exclude a few.
For example, the Amsterdam and Groningen tasks could instead set disallowed_vehicle_types to ["dry"] to achieve the same result.
Restrictions are also useful for modelling technician skills requirements, vehicle size limits for narrow streets, or any scenario where only certain vehicles are suited for certain tasks.
Conclusion¶
In this tutorial you learned how to use allowed_vehicle_types and disallowed_vehicle_types to control which vehicles may serve which tasks.