Simpler Route Optimisation
Contents
Simpler Route Optimisation#
Tarot Routing - Route Optimisation API
Quickstart#
1. Auth#
If you don’t have an account already, Sign Up for one or reach out to us at info@tarotanalytics.com
Then, get your Access Token:
URL='https://api.route.optimiser.app/api/auth/token'
HEADERS='Content-Type: application/json'
BODY='{
"email": "your_email_address",
"password": "your_password"
}'
RESP=$(curl "$URL" -H "$HEADERS" --data "$BODY")
# jq is a command line utility for parsing JSON
# you can install it with `apt install jq` or equivalent.
# The idea is just to get the `access_token` from the JSON response.
TOKEN=$(echo $RESP | jq -r .access_token)
import requests
url = 'https://api.route.optimiser.app/api/auth/token'
headers = {'Content-Type': 'application/json'}
body = {
'email': 'your_email_address',
'password': 'your_password',
}
r = requests.post(url, headers=headers, json=body)
token = r.json()['access_token']
2. Request Body#
Second, let’s prepare a JSON request body made up of Jobs
, Drivers
and Settings
representing your routing problem:
{
"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": {}
}
wget https://opt.dev.route.optimiser.app/docs/_static/ex1.json
3. Optimise#
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"
import json, requests
token = 'Your Tarot Routing Token'
with open('ex1.json') as f:
body = json.load(f)
r = requests.post(
url='https://api.route.optimiser.app/api/optimise',
headers={'Content-Type': 'application/json', 'Authorization': 'Token ' + token},
json=body,
)
4. Response#
A few seconds later, you’ll receive a response:
{
"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.
Next Steps#
Route Optimisation is complex, but we try to make it as easy as possible to just get to the parts you need!
Have a quick read of Route Optimisation Concepts to get familiar with terminology.
Learn How to Express Constraints to the Route Optimisation API .