Simpler Route Optimisation¶
Tarot Routing - Route Optimisation API
Quickstart¶
First, you’ll need an auth token .
Second, let’s prepare a JSON request body made up of Jobs
, Drivers
and Settings
representing your routing problem:
Request Body ex1.json¶
{
"drivers": [
{
"uid": "drvid1",
"shift_start": 8,
"shift_end": 17,
"location": {"lat": -33.867798, "lon": 151.166256}
}
],
"jobs": [
{
"uid": "uid1",
"duration": 2,
"location": {"lat": -33.849489, "lon": 151.127482}
},
{
"uid": "uid2",
"duration": 2,
"location": {"lat": -33.880661, "lon": 151.183096}
},
{
"uid": "uid3",
"duration": 2,
"location": {"lat": -33.913168, "lon": 151.262267}
}
],
"settings": {}
}
Here’s one I prepared earlier¶
wget https://opt.dev.route.optimiser.app/docs/_static/ex1.json
Then, you can access the Route Optimisation API by sending a POST
request to the Synchronous Route Optimisation API endpoint.
TOKEN={your_tarot_routing_token}
curl https://api.route.optimiser.app/api/optimise \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
--data "@ex1.json"
and a few seconds later, you’ll receive a response:
Response Body¶
{
"runs": [
[
{
"location": {
"lat": -33.86779863,
"lon": 151.1662566
},
"shift_start": 8.0,
"shift_end": 17.0,
"lunch_time": 11.25,
"lunch_duration": 1.25,
"capacity": null,
"run": 1,
"seq": 0,
"uid": "drvid1"
},
{
"location": {
"lat": -33.84948962,
"lon": 151.1274823
},
"duration": 2.0,
"arrive_after": null,
"leave_by": null,
"size": null,
"run": 1,
"seq": 1,
"eta": "08:14",
"etd": "08:16",
"decimal_eta": 8.25,
"decimal_etd": 8.28,
"uid": "uid1"
},
{
"location": {
"lat": -33.91316848,
"lon": 151.2622676
},
"duration": 2.0,
"arrive_after": null,
"leave_by": null,
"size": null,
"run": 1,
"seq": 2,
"eta": "08:52",
"etd": "08:54",
"decimal_eta": 8.88,
"decimal_etd": 8.91,
"uid": "uid3"
},
{
"location": {
"lat": -33.88066125,
"lon": 151.1830961
},
"duration": 2.0,
"arrive_after": null,
"leave_by": null,
"size": null,
"run": 1,
"seq": 3,
"eta": "09:19",
"etd": "09:21",
"decimal_eta": 9.32,
"decimal_etd": 9.35,
"uid": "uid2"
}
]
],
"unserved_jobs": [],
"settings": {
"single_run": false,
"allocate_fairly": true,
"runs_only": true,
"lunch_duration": 1.25,
"lunch_time": 11.25,
"job_duration": 2.0,
"verbose": false,
"shift_end": 17,
"shift_start": 8,
"iterative": false,
"single_day": true
}
}
The runs
element is a list of Runs. The first Object in each Run is the Driver. All Subsequent objects in that Run are the Jobs.
Any Jobs listed in unserved_jobs
were not able to be served with the Drivers provided.