Route optimization reducing distance but with extra waiting time

Hello,

We’ve found a route optimization example where it appears as though the objective it is optimizing for is incorrect.

{
	"configuration": {
		"routing": {
			"calc_points": true,
			"consider_traffic": false,
			"fail_fast": true,
			"network_data_provider": "openstreetmap",
			"return_snapped_waypoints": true,
			"snap_preventions": [
				"motorway",
				"tunnel",
				"ferry"
			]
		}
	},
	"objectives": [
		{
			"type": "min",
			"value": "completion_time"
		}
	],
	"services": [
		{
			"address": {
				"curbside": "any",
				"lat": 51.0150235,
				"location_id": "78B9E319-176E-4A5E-90CC-42209C63A1E2",
				"lon": -2.6371345,
				"street_hint": "RNAS Yeovilton"
			},
			"duration": 780,
			"group": "medium",
			"id": "78B9E319-176E-4A5E-90CC-42209C63A1E2",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666855858
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.23445419999999,
				"location_id": "752ADC18-49D1-43BD-808C-7F7273D5A5CC",
				"lon": -2.8393871,
				"street_hint": "West Stoughton"
			},
			"duration": 780,
			"group": "medium",
			"id": "752ADC18-49D1-43BD-808C-7F7273D5A5CC",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666854005
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.2687203,
				"location_id": "8C054D6E-AB71-4422-A3D8-6B4843F8B875",
				"lon": -2.8919798,
				"street_hint": "Manor Farm"
			},
			"duration": 780,
			"group": "medium",
			"id": "8C054D6E-AB71-4422-A3D8-6B4843F8B875",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666859418
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.2816984,
				"location_id": "D7A812D1-7928-4E93-A2D0-59A494027625",
				"lon": -2.7699803,
				"street_hint": "Cheddar Gorge Lookout Tower"
			},
			"duration": 780,
			"group": "medium",
			"id": "D7A812D1-7928-4E93-A2D0-59A494027625",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666861242
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.281868,
				"location_id": "FEBD5B2C-88FF-4BE4-917B-2BE482B2B876",
				"lon": -2.7659364,
				"name": "Costa Coffee, Cheddar Cave",
				"street_hint": "Cheddar Cave"
			},
			"duration": 780,
			"group": "medium",
			"id": "FEBD5B2C-88FF-4BE4-917B-2BE482B2B876",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666857659
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.22517759999999,
				"location_id": "550CFCA4-E215-4338-990B-ED1A0A72E04B",
				"lon": -2.6712106,
				"name": "The Wookey Hole Inn, Wells",
				"street_hint": "Wookey Hole"
			},
			"duration": 780,
			"group": "medium",
			"id": "550CFCA4-E215-4338-990B-ED1A0A72E04B",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666861237
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.20893909999999,
				"location_id": "07FF1BBF-738C-41E5-9CDE-E874978C276E",
				"lon": -2.6427654,
				"street_hint": "The Bishop's Palace"
			},
			"duration": 780,
			"group": "medium",
			"id": "07FF1BBF-738C-41E5-9CDE-E874978C276E",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666855635
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.24973379999999,
				"location_id": "732AF20C-D35B-493A-AF10-FFABD11E8DF6",
				"lon": -2.6053744,
				"street_hint": "Green Ore"
			},
			"duration": 780,
			"group": "medium",
			"id": "732AF20C-D35B-493A-AF10-FFABD11E8DF6",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666854057
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.3319261,
				"location_id": "C11D7D68-1123-4EE8-BAF4-03213D3C1E8A",
				"lon": -2.2779075,
				"street_hint": "Tynings Way"
			},
			"duration": 780,
			"group": "medium",
			"id": "C11D7D68-1123-4EE8-BAF4-03213D3C1E8A",
			"priority": 1,
			"time_windows": []
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.341635,
				"location_id": "CEB14D91-2D05-4569-B8FA-E7F4E2A658F7",
				"lon": -2.251898,
				"street_hint": "Frome Rd"
			},
			"duration": 780,
			"group": "medium",
			"id": "CEB14D91-2D05-4569-B8FA-E7F4E2A658F7",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666854608
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.3473973,
				"location_id": "965EA9D1-DC13-4EDE-B984-B45432C69F18",
				"lon": -2.2507612,
				"street_hint": "Silver St"
			},
			"duration": 780,
			"group": "medium",
			"id": "965EA9D1-DC13-4EDE-B984-B45432C69F18",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666862244
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.3476074,
				"location_id": "45F644A4-BBBB-4B02-AE75-15EEFBD78E1D",
				"lon": -2.2502979,
				"street_hint": "Silver St"
			},
			"duration": 780,
			"group": "medium",
			"id": "45F644A4-BBBB-4B02-AE75-15EEFBD78E1D",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666859449
				}
			]
		}
	],
	"shipments": [],
	"vehicle_types": [
		{
			"profile": "car",
			"service_time_factor": 1,
			"speed_factor": 1,
			"type_id": "vhc_as4lajJon8e0UR9xR6TgawHayKP2"
		}
	],
	"vehicles": [
		{
			"earliest_start": 1666847700,
			"end_address": {
				"curbside": "any",
				"lat": 50.94664299999999,
				"location_id": "CE6FBC71-7990-4DF2-8150-8029E510AAB8",
				"lon": -2.5105,
				"street_hint": "Ludbourne Rd"
			},
			"return_to_depot": true,
			"start_address": {
				"curbside": "any",
				"lat": 50.94664299999999,
				"location_id": "2405EF6C-5D0D-4510-B9A9-F1B7E338ADC4",
				"lon": -2.5105,
				"street_hint": "Ludbourne Rd"
			},
			"type_id": "vhc_as4lajJon8e0UR9xR6TgawHayKP2",
			"vehicle_id": "as4lajJon8e0UR9xR6TgawHayKP2"
		}
	]
}

When optimizing this request then we get a:

		"distance": 191170,
		"time": 11885,
		"transport_time": 11885,
		"completion_time": 28440,
		"waiting_time": 7195,

But if we add a relation to force a specific service to be first:

{
	"configuration": {
		"routing": {
			"calc_points": true,
			"consider_traffic": false,
			"fail_fast": true,
			"network_data_provider": "openstreetmap",
			"return_snapped_waypoints": true,
			"snap_preventions": [
				"motorway",
				"tunnel",
				"ferry"
			]
		}
	},
	"objectives": [
		{
			"type": "min",
			"value": "completion_time"
		}
	],
	"relations": [
		{
			"groups": [
				"high",
				"medium"
			],
			"type": "in_sequence"
		}
	],
	"services": [
		{
			"address": {
				"curbside": "any",
				"lat": 51.0150235,
				"location_id": "78B9E319-176E-4A5E-90CC-42209C63A1E2",
				"lon": -2.6371345,
				"street_hint": "RNAS Yeovilton"
			},
			"duration": 780,
			"group": "medium",
			"id": "78B9E319-176E-4A5E-90CC-42209C63A1E2",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666855858
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.23445419999999,
				"location_id": "752ADC18-49D1-43BD-808C-7F7273D5A5CC",
				"lon": -2.8393871,
				"street_hint": "West Stoughton"
			},
			"duration": 780,
			"group": "medium",
			"id": "752ADC18-49D1-43BD-808C-7F7273D5A5CC",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666854005
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.2687203,
				"location_id": "8C054D6E-AB71-4422-A3D8-6B4843F8B875",
				"lon": -2.8919798,
				"street_hint": "Manor Farm"
			},
			"duration": 780,
			"group": "medium",
			"id": "8C054D6E-AB71-4422-A3D8-6B4843F8B875",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666859418
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.2816984,
				"location_id": "D7A812D1-7928-4E93-A2D0-59A494027625",
				"lon": -2.7699803,
				"street_hint": "Cheddar Gorge Lookout Tower"
			},
			"duration": 780,
			"group": "medium",
			"id": "D7A812D1-7928-4E93-A2D0-59A494027625",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666861242
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.281868,
				"location_id": "FEBD5B2C-88FF-4BE4-917B-2BE482B2B876",
				"lon": -2.7659364,
				"name": "Costa Coffee, Cheddar Cave",
				"street_hint": "Cheddar Cave"
			},
			"duration": 780,
			"group": "medium",
			"id": "FEBD5B2C-88FF-4BE4-917B-2BE482B2B876",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666857659
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.22517759999999,
				"location_id": "550CFCA4-E215-4338-990B-ED1A0A72E04B",
				"lon": -2.6712106,
				"name": "The Wookey Hole Inn, Wells",
				"street_hint": "Wookey Hole"
			},
			"duration": 780,
			"group": "medium",
			"id": "550CFCA4-E215-4338-990B-ED1A0A72E04B",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666861237
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.20893909999999,
				"location_id": "07FF1BBF-738C-41E5-9CDE-E874978C276E",
				"lon": -2.6427654,
				"street_hint": "The Bishop's Palace"
			},
			"duration": 780,
			"group": "medium",
			"id": "07FF1BBF-738C-41E5-9CDE-E874978C276E",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666855635
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.24973379999999,
				"location_id": "732AF20C-D35B-493A-AF10-FFABD11E8DF6",
				"lon": -2.6053744,
				"street_hint": "Green Ore"
			},
			"duration": 780,
			"group": "medium",
			"id": "732AF20C-D35B-493A-AF10-FFABD11E8DF6",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666854057
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.3319261,
				"location_id": "C11D7D68-1123-4EE8-BAF4-03213D3C1E8A",
				"lon": -2.2779075,
				"street_hint": "Tynings Way"
			},
			"duration": 780,
			"group": "high",
			"id": "C11D7D68-1123-4EE8-BAF4-03213D3C1E8A",
			"priority": 1,
			"time_windows": []
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.341635,
				"location_id": "CEB14D91-2D05-4569-B8FA-E7F4E2A658F7",
				"lon": -2.251898,
				"street_hint": "Frome Rd"
			},
			"duration": 780,
			"group": "medium",
			"id": "CEB14D91-2D05-4569-B8FA-E7F4E2A658F7",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666854608
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.3473973,
				"location_id": "965EA9D1-DC13-4EDE-B984-B45432C69F18",
				"lon": -2.2507612,
				"street_hint": "Silver St"
			},
			"duration": 780,
			"group": "medium",
			"id": "965EA9D1-DC13-4EDE-B984-B45432C69F18",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666862244
				}
			]
		},
		{
			"address": {
				"curbside": "any",
				"lat": 51.3476074,
				"location_id": "45F644A4-BBBB-4B02-AE75-15EEFBD78E1D",
				"lon": -2.2502979,
				"street_hint": "Silver St"
			},
			"duration": 780,
			"group": "medium",
			"id": "45F644A4-BBBB-4B02-AE75-15EEFBD78E1D",
			"priority": 2,
			"time_windows": [
				{
					"earliest": 1666859449
				}
			]
		}
	],
	"shipments": [],
	"vehicle_types": [
		{
			"profile": "car",
			"service_time_factor": 1,
			"speed_factor": 1,
			"type_id": "vhc_as4lajJon8e0UR9xR6TgawHayKP2"
		}
	],
	"vehicles": [
		{
			"earliest_start": 1666847700,
			"end_address": {
				"curbside": "any",
				"lat": 50.94664299999999,
				"location_id": "CE6FBC71-7990-4DF2-8150-8029E510AAB8",
				"lon": -2.5105,
				"street_hint": "Ludbourne Rd"
			},
			"return_to_depot": true,
			"start_address": {
				"curbside": "any",
				"lat": 50.94664299999999,
				"location_id": "2405EF6C-5D0D-4510-B9A9-F1B7E338ADC4",
				"lon": -2.5105,
				"street_hint": "Ludbourne Rd"
			},
			"type_id": "vhc_as4lajJon8e0UR9xR6TgawHayKP2",
			"vehicle_id": "as4lajJon8e0UR9xR6TgawHayKP2"
		}
	]
}

Then we get:

		"distance": 267421,
		"time": 14775,
		"transport_time": 14775,
		"completion_time": 25309,
		"waiting_time": 1174,

Which has a higher distance, but a shorter completion time, which is the objective of the request. With the first example, the completion time is much later because of the added waiting time required at some services, whereas in the second example we avoid the waiting time in exchange for more transport time.

I think this is probably a rare example and that most of the time the optimization does the right thing, but I thought I’d report it in case it is helpful on your end.