Skills

This example demonstrates how to use the skills feature with jobs and vehicles. In general, the skills feature is useful for locking specific jobs to specific vehicles.

Complete problem json

{ "plan": { "jobs": [ { "id": "job1", "deliveries": [ { "places": [ { "location": { "lat": 52.52599, "lng": 13.45413 }, "duration": 300.0 } ], "demand": [ 1 ] } ], "skills": { "allOf": [ "fridge" ], "noneOf": [ "washing_machine" ] } }, { "id": "job2", "deliveries": [ { "places": [ { "location": { "lat": 52.5225, "lng": 13.4095 }, "duration": 240.0 } ], "demand": [ 1 ] } ], "skills": { "allOf": [ "handyman" ] } } ] }, "fleet": { "vehicles": [ { "typeId": "vehicle_with_fridge", "vehicleIds": [ "vehicle_with_fridge_1" ], "profile": { "matrix": "normal_car" }, "costs": { "fixed": 22.0, "distance": 0.0002, "time": 0.004806 }, "shifts": [ { "start": { "earliest": "2019-07-04T09:00:00Z", "location": { "lat": 52.5316, "lng": 13.3884 } }, "end": { "latest": "2019-07-04T18:00:00Z", "location": { "lat": 52.5316, "lng": 13.3884 } } } ], "capacity": [ 2 ], "skills": [ "fridge" ] }, { "typeId": "vehicle_with_handyman", "vehicleIds": [ "vehicle_with_handyman_1" ], "profile": { "matrix": "normal_car" }, "costs": { "fixed": 22.0, "distance": 0.0002, "time": 0.004806 }, "shifts": [ { "start": { "earliest": "2019-07-04T09:00:00Z", "location": { "lat": 52.5316, "lng": 13.3884 } }, "end": { "latest": "2019-07-04T18:00:00Z", "location": { "lat": 52.5316, "lng": 13.3884 } } } ], "capacity": [ 2 ], "skills": [ "handyman" ] } ], "profiles": [ { "name": "normal_car" } ] } }

Complete solution json

{ "statistic": { "cost": 64.31331800000001, "distance": 16188, "duration": 3553, "times": { "driving": 3013, "serving": 540, "waiting": 0, "break": 0 } }, "tours": [ { "vehicleId": "vehicle_with_handyman_1", "typeId": "vehicle_with_handyman", "shiftIndex": 0, "stops": [ { "location": { "lat": 52.5316, "lng": 13.3884 }, "time": { "arrival": "2019-07-04T09:00:00Z", "departure": "2019-07-04T09:00:00Z" }, "distance": 0, "load": [ 1 ], "activities": [ { "jobId": "departure", "type": "departure" } ] }, { "location": { "lat": 52.5225, "lng": 13.4095 }, "time": { "arrival": "2019-07-04T09:08:28Z", "departure": "2019-07-04T09:12:28Z" }, "distance": 2470, "load": [ 0 ], "activities": [ { "jobId": "job2", "type": "delivery" } ] }, { "location": { "lat": 52.5316, "lng": 13.3884 }, "time": { "arrival": "2019-07-04T09:22:06Z", "departure": "2019-07-04T09:22:06Z" }, "distance": 5138, "load": [ 0 ], "activities": [ { "jobId": "arrival", "type": "arrival" } ] } ], "statistic": { "cost": 29.400356000000002, "distance": 5138, "duration": 1326, "times": { "driving": 1086, "serving": 240, "waiting": 0, "break": 0 } } }, { "vehicleId": "vehicle_with_fridge_1", "typeId": "vehicle_with_fridge", "shiftIndex": 0, "stops": [ { "location": { "lat": 52.5316, "lng": 13.3884 }, "time": { "arrival": "2019-07-04T09:00:00Z", "departure": "2019-07-04T09:00:00Z" }, "distance": 0, "load": [ 1 ], "activities": [ { "jobId": "departure", "type": "departure" } ] }, { "location": { "lat": 52.52599, "lng": 13.45413 }, "time": { "arrival": "2019-07-04T09:15:12Z", "departure": "2019-07-04T09:20:12Z" }, "distance": 5112, "load": [ 0 ], "activities": [ { "jobId": "job1", "type": "delivery" } ] }, { "location": { "lat": 52.5316, "lng": 13.3884 }, "time": { "arrival": "2019-07-04T09:37:07Z", "departure": "2019-07-04T09:37:07Z" }, "distance": 11050, "load": [ 0 ], "activities": [ { "jobId": "arrival", "type": "arrival" } ] } ], "statistic": { "cost": 34.912962, "distance": 11050, "duration": 2227, "times": { "driving": 1927, "serving": 300, "waiting": 0, "break": 0 } } } ], "unassigned": [] }