Route optimization skipping driver

We have an optimization request with 2 drivers, however only one of the drivers is being assigned a route despite setting min_jobs on both of the drivers to 1.

The issue seems to be related to the stop I9ed82KJhoDmS5LzpvaV. This gets unassigned due to its unreachable time window. However if you remove that time window then both drivers get assigned several stops in the route.

The request is:

{
	"configuration": {
		"routing": {
			"calc_points": false,
			"consider_traffic": false,
			"fail_fast": false,
			"network_data_provider": "openstreetmap",
			"return_snapped_waypoints": true,
			"snap_preventions": [
				"motorway",
				"tunnel",
				"ferry"
			]
		}
	},
	"objectives": [
		{
			"type": "min-max",
			"value": "completion_time"
		},
		{
			"type": "min-max",
			"value": "activities"
		}
	],
	"relations": [],
	"services": [
		{
			"address": {
				"curbside": "any",
				"lat": 25.8115733,
				"location_id": "3UT0IiYTTspgtiAU08zo",
				"lon": -80.3660146
			},
			"duration": 60,
			"group": "medium",
			"id": "3UT0IiYTTspgtiAU08zo",
			"time_windows": [
				{
					"earliest": 1651585500,
					"latest": 1651587300
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 25.7975288,
				"location_id": "Gt4KlMn3z5UsDXoGNnQq",
				"lon": -80.2137439
			},
			"duration": 60,
			"group": "medium",
			"id": "Gt4KlMn3z5UsDXoGNnQq",
			"time_windows": [
				{
					"latest": 1651579200
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 25.8992792,
				"location_id": "I9ed82KJhoDmS5LzpvaV",
				"lon": -80.3789135
			},
			"duration": 60,
			"group": "medium",
			"id": "I9ed82KJhoDmS5LzpvaV",
			"time_windows": [
				{
					"earliest": 1651574700,
					"latest": 1651576500
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 25.7827625,
				"location_id": "NfFeqH3VdTLBUYWtw5sR",
				"lon": -80.3490008
			},
			"duration": 60,
			"group": "medium",
			"id": "NfFeqH3VdTLBUYWtw5sR",
			"time_windows": [
				{
					"earliest": 1651575600,
					"latest": 1651577400
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 25.8013615,
				"location_id": "StYhVW1xnR3Vr7LGMOP0",
				"lon": -80.3304131
			},
			"duration": 60,
			"group": "medium",
			"id": "StYhVW1xnR3Vr7LGMOP0",
			"time_windows": [
				{
					"earliest": 1651586400
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 25.7946578,
				"location_id": "og6GrjwlK29NU5cFuTKS",
				"lon": -80.3920806
			},
			"duration": 60,
			"group": "medium",
			"id": "og6GrjwlK29NU5cFuTKS",
			"time_windows": [
				{
					"earliest": 1651577400,
					"latest": 1651581900
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 25.9696633,
				"location_id": "wwobPhfv9pAuLHE2WEgN",
				"lon": -80.27115979999999
			},
			"duration": 60,
			"group": "medium",
			"id": "wwobPhfv9pAuLHE2WEgN",
			"time_windows": [
				{
					"earliest": 1651578300,
					"latest": 1651590000
				}
			]
		}
	],
	"shipments": [],
	"vehicle_types": [
		{
			"profile": "small_truck_delivery",
			"service_time_factor": 1,
			"speed_factor": 1,
			"type_id": "vhc_VSYkajG8f0mTsxW9nQ8K"
		},
		{
			"profile": "small_truck_delivery",
			"service_time_factor": 1,
			"speed_factor": 1,
			"type_id": "vhc_4cfhWuCoXo4lqCGbN0IQ"
		}
	],
	"vehicles": [
		{
			"earliest_start": 1651571100,
			"end_address": {
				"curbside": "any",
				"lat": 26.7702381,
				"location_id": "99OIzE2U37eRmN0uX3SC",
				"lon": -80.0598316,
				"name": "Merchants Export Inc.",
				"street_hint": "Merchants Export Inc."
			},
			"latest_end": 1651611600,
			"min_jobs": 1,
			"return_to_depot": true,
			"start_address": {
				"curbside": "any",
				"lat": 26.7702381,
				"location_id": "wxmPKCSyY4TmBJrVJ4tm",
				"lon": -80.0598316
			},
			"type_id": "vhc_VSYkajG8f0mTsxW9nQ8K",
			"vehicle_id": "VSYkajG8f0mTsxW9nQ8K"
		},
		{
			"earliest_start": 1651571100,
			"end_address": {
				"curbside": "any",
				"lat": 26.7702381,
				"location_id": "A9Zz0WNIQfXZbrrnJRf2",
				"lon": -80.0598316
			},
			"latest_end": 1651611600,
			"min_jobs": 1,
			"return_to_depot": true,
			"start_address": {
				"curbside": "any",
				"lat": 26.7702381,
				"location_id": "zPIowg97anyUz4xNS9k4",
				"lon": -80.0598316
			},
			"type_id": "vhc_4cfhWuCoXo4lqCGbN0IQ",
			"vehicle_id": "4cfhWuCoXo4lqCGbN0IQ"
		}
	]
}

Thanks @Sam_Ruston for this example. This behaviour is indeed interesting. I just want to let you know that we are still analysing this. We will let you know once we know more.

Hi,

We saw another interesting example of this that I thought I’d report. There is a cluster of services and then 1 service (q49n3ktDaMMQRjS3OMnX) that is very far away with the 20 total vehicles. The far away service can’t be reached by any vehicle before their latest_end so the service is unassigned, which makes sense. What’s weird is that if that happens only 16 vehicles get given routes. But if you don’t include that service in the optimization at all, then it correctly uses all 20 vehicles and produces a better result.

request_16_drivers.txt (184.5 KB)