Optimize Trucking Routes

Product Used: Route Optimization Flexible API


NextBillion.ai’s Route Optimization API provides users with a high degree of customization by leveraging over 50+ parameters to closely emulate the real-world constraints of route planning. Users can make use of truck specific parameters to cater specifically to optimization problems involving trucks.

The optimization service takes into account all the variables specified in the input request and suggests optimal routes and task assignments to best meet the configured objective

To configure a Route Optimization request we will need to set up the locations involved, vehicles to be used and the tasks to be performed. Let’s address them one by one below.

Configure optimization request

Locations

First we define the locations object and add all the locations used in the problem along with a valid id. Following is the the locations object with all the coordinates to be used in this example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "locations": {
    "id": 1,
    "location": [
      "34.083950,-118.318640",
      "34.054927,-118.323726",
      "34.075525,-118.361588",
      "34.076350,-118.338519",
      "34.090425,-118.338933",
      "34.076646,-118.376969",
      "34.094986,-118.300885",
      "34.018780,-118.317919",
      "33.996658,-118.261708",
      "34.059244,-118.376969",
      "34.057106,-118.361326"
    ]
  }
}

Jobs & Shipments

We define a bunch of tasks that need to be performed in this example. Following are the constraints that we set for these tasks:

  • A unique id for each task

  • location_index for each task

  • Specify the schedule of tasks. This is done by adding time_windows within which a task must be completed. We have added a 15 min time window for all tasks for the sake of simplicity, but the Route Optimization V2 is fully capable of handling much complex task schedules involving multiple time_windows for each task.

  • skills needed to perform each task

  • pickup and delivery amounts for all tasks

  • The actual time taken to complete the task once the driver/vehicle is at the task’s location i.e. the service time for each task. We have added a uniform service time of 2 mins for all tasks, but the users can use varying service times instead.

Let’s take a look at the jobs and shipments JSONs after the above properties are configured:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{
  "jobs": [
    {
      "id": 1,
      "location_index": 0,
      "service": 120,
      "pickup": [1],
      "skills": [1],
      "time_windows": [[1693393200, 1693394100]]
    },
    {
      "id": 2,
      "location_index": 1,
      "service": 120,
      "skills": [1],
      "pickup": [1],
      "time_windows": [[1693387800, 1693388700]]
    },
    {
      "id": 3,
      "location_index": 2,
      "service": 120,
      "pickup": [1],
      "skills": [2],
      "time_windows": [[1693396800, 1693397700]]
    },
    {
      "id": 4,
      "location_index": 3,
      "service": 120,
      "skills": [1],
      "pickup": [1],
      "time_windows": [[1693402200, 1693403100]]
    },
    {
      "id": 5,
      "location_index": 4,
      "service": 120,
      "skills": [2],
      "pickup": [1],
      "time_windows": [[1693400400, 1693401300]]
    }
  ],

  "shipments": [
    {
      "pickup": {
        "description": "Shipment Pickup 1",
        "id": 1,
        "location_index": 5,
        "time_windows": [[1693397400, 1693397760]]
      },
      "delivery": {
        "description": "Shipment Delivery 1",
        "id": 1,
        "location_index": 6,
        "time_windows": [[1693400700, 1693401300]]
      },
      "skills": [2, 3],
      "amount": [3]
    },
    {
      "pickup": {
        "description": "Shipment Pickup 2",
        "id": 2,
        "location_index": 7,
        "time_windows": [[1693429200, 1693430100]]
      },
      "delivery": {
        "description": "Shipment Delivery 2",
        "id": 2,
        "location_index": 8,
        "time_windows": [[1693432800, 1693433700]]
      },
      "skills": [2, 3],
      "amount": [2]
    }
  ]
}

Vehicles

Next, we add 2 trucks that are responsible for fulfilling the above tasks which are to be performed at the locations mentioned above. To describe the trucks and their properties we add:

  • A unique ID for each truck

  • Truck’s or the driver’s shift timings using the time_window parameter

  • capacity of the load that the truck can take

  • Truck’s depot, if any.

  • start_index to denote the point from where the trucks would start. If this is left blank, the algorithm will assume the first task’s location as the start point of the truck.

  • skills of the driver or the vehicle to ensure appropriate tasks are only assigned to the respective truck.

Following is the vehicles JSON with all the above properties configured:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 "vehicles": [
       {
           "id": 1,
           "start_index": 10,
           "skills":[1],
           "capacity":[10],
           "time_window": [
               1693382400,
                   1693411200
           ]

       }, {
           "id": 2,
           "depot": 0,
           "skills": [2,3],
           "capacity":[10],
           "time_window": [
               1693382400,
            1693411200
           ]
       }
   ]

Depot

Next, we add a depot that we want to assign to one of the trucks. The assigned truck would start from the depot’s location. We assign an ID and a location_index to the depot:

1
2
3
4
5
6
7
"depots": [
       {
           "description":"Depot 1",
           "id":0,
           "location_index":9
       }
   ]

Options

Lastly we set the optimization objective and other routing constraints for the above optimization problem. We will set the following constraints:

  • mode option set as truck.

  • Objective of optimization will be configured to minimize the total travel distance, using the travel_cost attribute.

  • Define the truck dimensions using the truck_size & truck_weight option.

  • Configure the typical traffic conditions by providing the departure time for the trucks using traffic_timestamp.

Following is the options JSON with above properties configured:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "options": {
    "objective": {
      "travel_cost": "distance"
    },
    "routing": {
      "mode": "truck",
      "truck_size": "210, 210, 320",
      "truck_wieght": 12000,
      "traffic_timestamp": 1693387800
    }
  }
}

Route Optimization POST request

All the above components are now combined and submitted as a single JSON to the Route Optimization endpoint host:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
curl --location 'https://api.nextbillion.io/optimization/v2?key=<your_api_key>' \
--header 'Content-Type: application/json' \
--data '{
    "description": "Test",
    "locations": {
        "id": 1,
        "location": [
            "34.083950,-118.318640",
            "34.054927,-118.323726",
            "34.075525,-118.361588",
            "34.076350,-118.338519",
            "34.090425,-118.338933",
            "34.076646,-118.376969",
            "34.094986,-118.300885",
            "34.018780,-118.317919",
            "33.996658,-118.261708",
            "34.059244,-118.376969",
            "34.057106,-118.361326"
        ]
    },
    "jobs": [
        {
            "id": 1,
            "location_index": 0,
            "service": 120,
            "pickup": [
                1
            ],
            "skills": [
                1
            ],
            "time_windows": [
                [
                    1693393200,
                    1693394100
                ]
            ]
        },
        {
            "id": 2,
            "location_index": 1,
            "service": 120,
            "skills": [
                1
            ],
            "pickup": [
                1
            ],
            "time_windows": [
                [
                    1693387800,
                    1693388700
                ]
            ]
        },
        {
            "id": 3,
            "location_index": 2,
            "service": 120,
            "pickup": [
                1
            ],
            "skills": [
                2
            ],
            "time_windows": [
                [
                    1693396800,
                    1693397700
                ]
            ]
        },
        {
            "id": 4,
            "location_index": 3,
            "service": 120,
            "skills": [
                1
            ],
            "pickup": [
                1
            ],
            "time_windows": [
                [
                    1693402200,
                    1693403100
                ]
            ]
        },
        {
            "id": 5,
            "location_index": 4,
            "service": 120,
            "skills": [
                2
            ],
            "pickup": [
                1
            ],
            "time_windows": [
                [
                    1693400400,
                    1693401300
                ]
            ]
        }
    ],
    "shipments": [
        {
            "pickup": {
                "description": "Shipment Pickup 1",
                "id": 1,
                "location_index": 5,
                "time_windows": [
                    [
                        1693397400,
                        1693397760
                    ]
                ]
            },
            "delivery": {
                "description": "Shipment Delivery 1",
                "id": 1,
                "location_index": 6,
                "time_windows": [
                    [
                        1693400700,
                        1693401300
                    ]
                ]
            },
            "skills": [
                2,
                3
            ],
            "amount": [
                3
            ]
        },
        {
            "pickup": {
                "description": "Shipment Pickup 2",
                "id": 2,
                "location_index": 7,
                "time_windows": [
                    [
                        1693429200,
                        1693430100
                    ]
                ]
            },
            "delivery": {
                "description": "Shipment Delivery 2",
                "id": 2,
                "location_index": 8,
                "time_windows": [
                    [
                        1693432800,
                        1693433700
                    ]
                ]
            },
            "skills": [
                2,
                3
            ],
            "amount": [
                2
            ]
        }
    ],
    "vehicles": [
        {
            "id": 1,
            "start_index": 10,
            "skills": [
                1
            ],
            "capacity": [
                10
            ],
            "time_window": [
                1693382400,
                1693411200
            ]
        },
        {
            "id": 2,
            "depot": 0,
            "skills": [
                2,
                3
            ],
            "capacity": [
                10
            ],
            "time_window": [
                1693382400,
                1693411200
            ]
        }
    ],
    "depots": [
        {
            "description": "Depot 1",
            "id": 0,
            "location_index": 9
        }
    ],
    "options": {
        "objective": {
            "travel_cost": "distance"
        },
        "routing": {
            "mode": "truck",
            "truck_size": "210, 210, 320",
            "truck_wieght": 12000,
            "traffic_timestamp": 1693387800
        }
    }
}'

Route Optimization POST response

Once the above POST request is successfully submitted, a response similar to the following is received:

1
2
3
4
5
{
  "id": "12435679cc9cfc52e5b61b9171bb34b3",
  "message": "Optimization job created",
  "status": "Ok"
}

Retrieve optimization solution

Capture the task id from the POST response and use it in a subsequent GET request to retrieve the optimized solution asynchronously:

Route Optimization GET request

curl --location 'https://api.nextbillion.io/optimization/v2/result?id=12435679cc9cfc52e5b61b9171bb34b3&key=<your_api_key>'

Route Optimization GET response

You would see the solution with all the suggested routes and the trucks that were assigned to each of the routes to take care of all the tasks. Some tasks might remain unassigned and the optimizer will also provide the reason for keeping the task unassigned.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
{
  "description": "Test",
  "result": {
    "code": 0,
    "summary": {
      "cost": 33703,
      "routes": 2,
      "unassigned": 2,
      "setup": 0,
      "service": 600,
      "duration": 3387,
      "waiting_time": 14536,
      "priority": 0,
      "delivery": [3],
      "pickup": [8],
      "distance": 33774
    },
    "unassigned": [
      {
        "id": 2,
        "type": "pickup",
        "location": [34.01878, -118.317919],
        "reason": "cannot be completed due to time constraint",
        "long_id": "2"
      },
      {
        "id": 2,
        "type": "delivery",
        "location": [33.996658, -118.261708],
        "reason": "cannot be completed due to time constraint",
        "long_id": "2"
      }
    ],
    "routes": [
      {
        "vehicle": 1,
        "cost": 10874,
        "steps": [
          {
            "type": "start",
            "arrival": 1693388405,
            "duration": 0,
            "service": 0,
            "waiting_time": 0,
            "location": [34.057106, -118.361326],
            "location_index": 10,
            "load": [0],
            "distance": 0
          },
          {
            "type": "job",
            "arrival": 1693388700,
            "duration": 295,
            "service": 120,
            "waiting_time": 0,
            "location": [34.054927, -118.323726],
            "location_index": 1,
            "id": 2,
            "load": [1],
            "distance": 3578,
            "long_id": "2"
          },
          {
            "type": "job",
            "arrival": 1693389384,
            "duration": 859,
            "service": 120,
            "waiting_time": 3816,
            "location": [34.08395, -118.31864],
            "location_index": 0,
            "id": 1,
            "load": [2],
            "distance": 7996,
            "long_id": "1"
          },
          {
            "type": "job",
            "arrival": 1693393637,
            "duration": 1176,
            "service": 120,
            "waiting_time": 8563,
            "location": [34.07635, -118.338519],
            "location_index": 3,
            "id": 4,
            "load": [3],
            "distance": 10875,
            "long_id": "4"
          },
          {
            "type": "end",
            "arrival": 1693402320,
            "duration": 1176,
            "service": 0,
            "waiting_time": 0,
            "location": [34.07635, -118.338519],
            "location_index": 3,
            "load": [3],
            "distance": 10875
          }
        ],
        "service": 360,
        "duration": 1176,
        "waiting_time": 12379,
        "priority": 0,
        "delivery": [0],
        "pickup": [3],
        "distance": 10875,
        "geometry": "ywznEjmlqUBG@G@GAEEE??MIw@[q@WLoA??@KB[JmAB_@?U@[???a@???iABiD??@u@?c@@aB@iB@g@???S??@_A??BsF@aB?s@?k@??@o@@m@???g@?U??BgBB{E??DcF??@s@@qD@aB@[??@gA???y@?]BuB???}@?W??@m@?Q?W??@{@?]?K@M???iA?A?Q?U?I@_@??BuE@qA??@W?c@DcB???u@???y@???M@}B@mA@[?A?g@@y@@s@??@c@@_A?A?S?U??@aB@g@?e@@q@?A?c@@uA???k@?A@m@?A?cC??@u@@{@??@o@?sA???W?A?Q?I?Y@m@@g@?E?AAA?g@??@[BUBUDUFYVmA??@GH_@RgA`@}B@?\\mB`@sB??X{ADU??FU??Ny@??ZgBReA??DQRgADSFW?ABKFc@BW??D[F}@@IH_B?AZqFNaCNsC?ADm@?AD_ABO?A_@C^B@U@SB]@I??BQF_@@Au@]A?YMSK??ICOI??QIyAo@uAo@??UMcJaE_Bs@[OeAe@w@_@??[M]OuGyCYMUKe@Mc@M??IC??@gA?G?A?q@S@_A?gA???iE@m@???mB?mC?k@?A?S?iJ?e@?{A@aD?eA????_AA}B???u@?e@?As@?A?{J@{J?wE@eJ???aA@???Q?A?aB?I?kA?M?eAAqA?gA???eA???mA?c@?Q?kAIAYCY?OA}B@mE?g@???wA@??iA???S?gB???kA???oG@??uD???]???eA?e@?Q?]??p@?x@?X?pA???xA???X???d@???\\?@?b@?n@???j@???\\?hC???\\?zA??_B@??A`@@B?@?@?@DDBB@@@B?N?@?R?N?b@?b@?@?J?K???e@???c@?O?S?QACAACCCCAA?A?A?AAC@a@~AA???p@?@?vA???d@???j@???nA?nA?N?@@lB?@?h@?X?`@?nB?d@?p@?bA?h@?@?d@?@?b@?H?@?d@???f@???l@???V?l@???t@?Z???b@??AZ?@@zA?hB???x@?P?n@???X???h@???n@??V@N@??N@??D?T@??RDNBNDLDLDDBJFTL??PLTJNF??RF@?@@N@TBV@N???fA?xA???b@?@?tBAp@DlAJTBV@r@???N???pB?P?@?t@?D???B?d@?f@Ad@El@I@?D?b@EXA@?J?L?X?D???F?NB??@?p@JJVHV??FRJ\\@FH^D`@?B?B@T@J?@?TEN?XAV???L??APCVCVWnC[dDEf@CXCZARAp@?rC?@@nA???J?NALA\\DNA|@?@?nA?^???^AXANANAN?JAJ?N??@r@??@hA???d@?d@???x@?tC???b@?@?x@??@lA?@?Z???h@?r@???p@??a@???",
        "long_vehicle_id": "1"
      },
      {
        "vehicle": 2,
        "cost": 22829,
        "steps": [
          {
            "type": "start",
            "arrival": 1693397271,
            "duration": 0,
            "service": 0,
            "waiting_time": 0,
            "location": [34.059244, -118.376969],
            "location_index": 9,
            "load": [0],
            "distance": 0
          },
          {
            "type": "pickup",
            "arrival": 1693397542,
            "duration": 271,
            "service": 0,
            "waiting_time": 0,
            "location": [34.076646, -118.376969],
            "location_index": 5,
            "id": 1,
            "load": [3],
            "description": "Shipment Pickup 1",
            "distance": 2255,
            "long_id": "1"
          },
          {
            "type": "job",
            "arrival": 1693397700,
            "duration": 429,
            "service": 120,
            "waiting_time": 0,
            "location": [34.075525, -118.361588],
            "location_index": 2,
            "id": 3,
            "load": [4],
            "distance": 3807,
            "long_id": "3"
          },
          {
            "type": "delivery",
            "arrival": 1693398543,
            "duration": 1152,
            "service": 0,
            "waiting_time": 2157,
            "location": [34.094986, -118.300885],
            "location_index": 6,
            "id": 1,
            "load": [1],
            "description": "Shipment Delivery 1",
            "distance": 11651,
            "long_id": "1"
          },
          {
            "type": "job",
            "arrival": 1693401093,
            "duration": 1545,
            "service": 120,
            "waiting_time": 0,
            "location": [34.090425, -118.338933],
            "location_index": 4,
            "id": 5,
            "load": [2],
            "distance": 15726,
            "long_id": "5"
          },
          {
            "type": "end",
            "arrival": 1693401879,
            "duration": 2211,
            "service": 0,
            "waiting_time": 0,
            "location": [34.059244, -118.376969],
            "location_index": 9,
            "load": [2],
            "distance": 22899
          }
        ],
        "service": 240,
        "duration": 2211,
        "waiting_time": 2157,
        "priority": 0,
        "delivery": [3],
        "pickup": [5],
        "distance": 22899,
        "geometry": "gf{nEbooqU?I??AUC{@Co@AU??[???i@A??i@?A?O???Q?G???OMA?K?Q?}@AK???U?gB?cB?W@??OH??}AA??}@@c@???u@@??M?cA@w@@??Q?]@??a@@??W???S?[@??Y?c@@{@@??W?]@I?k@???U@??aA@??mA@A?kBBaA@uA@q@@i@@??]?Y@??sABG?G???k@@Y???g@@I???]???a@???OII?[@??m@@??O?Q?y@Bg@ZWRUP?@MLi@d@??OJOHQFWDc@D??OBMBMDOFSHOH???@MF_Ad@UL??kCrAa@T??i@XA?YNULaB|@YLw@`@g@V??i@X??OAEAGCEAAECGAG?IA_@??F[QIGCKG??KG???{@BgC?aB?g@AiA??P@??v@ALAVA?q@???IAO?k@?W?Q?G???_@???M???a@?]?m@???y@?Y?K???W?[???a@?s@?A?e@???m@???e@?k@???q@???i@???a@?c@Aa@?i@?A?c@???cA?]???a@?A?a@Ag@???y@?i@?A?k@?}@?e@?A?]???]?e@???m@Ae@???o@?_@??Ag@@k@Ag@???w@???a@???_@???Q?A?S?S???Y?c@??As@?A?k@?A?aA?S???I?a@?i@???e@???o@?i@???o@?c@?k@?o@???O???U??Am@?A?e@?e@?[?S???U???O???W?A?[???M?o@t@???\\???R?@?F?G???S?A?]???u@????kA?W???_@??AS???S???c@???U?K?A?qA???i@???a@?]AQ???g@?mA?i@???c@??AgA???i@?S???_@?sA?e@?A?a@?A?m@?w@?A?c@???Y???MA[?e@???]?[?i@???s@?A?_@???]?_@???{@?A?c@???_@?m@Ag@???}@???g@?UAc@?_@?e@?c@?qA?a@@i@?mA?A?S?A?g@?g@?a@???c@???eA?g@???e@?M???c@?A?i@?yA???c@???k@?]???_@???gA?e@AaA??@_@?AAa@???y@???c@?A?s@???a@?c@?Y???e@?K?A?w@?q@???u@???w@?U???c@?A?o@???yEAgB?}@?o@???q@?A?uB???o@???m@?a@Ac@?o@?o@?Y?q@???s@?i@???[??AmA?A?y@???e@???uC???y@?c@?A?e@AiA??As@???O@K?K@O@O@O@Y?_@???_@?oA??@_A??DK@K@K@Q?W???K???mA?W?AAy@?c@?k@@U@U??@]BYN{ALqA^wD??BSDq@@Y?QASGK?A?U?MA?AU?C?CEa@I_@AGK]GSIWKU?AIY?C??EOESE]?AEa@?E??AM?I?E?A?G?U?o@??@cC?c@?_A???w@AU@g@???cB???Q?A?qA?c@?A?S???U@_@???k@???wB?m@?o@??AiB?m@?m@?o@??AuB???m@?e@???c@???m@?u@???m@???g@???a@???y@???uA???Q?A?aB?I?kA?M?eAAqA?gA???eA???mA?c@?Q?kAIAYCY?OA}B@mE?g@???wA@??iA???S?gB???kA???oG@??uD???]???eA?e@?Q?]??c@?y@AU???w@?A?S?U?g@?a@?qA???U?e@?e@?mA???k@???SAe@?K??@m@???U???]?_A?A?u@?o@@}@AO???A?S??AmA?m@?iD?w@?A?s@?wB?AAk@?g@?o@Au@???k@???o@?e@?A?k@?iA???W?A?o@?g@???m@???mB?A?M?O?G??A[?o@???c@?_@?Q???C?O?qA?s@m@???aA?y@?QAM?U???S?U???O?C?I@K@A?G?wAA??c@?U@oA?yC?_@?_B@kD?iJ@W?eA@??eB???eB?wB?a@?A?{A?{A?k@?yD@iB???@z@?R?S??A{@hB???xDAj@?zA?zA?`@?@?vB?dB?bB?@??t@???v@?b@??@nA???b@?@?J?bA?p@?@?bC?Z??@zD?lA?f@@bA?jA@j@?@?h@?@?x@???T?L?Z??@hA?@@v@???p@?|@?t@AfA?L???R?N???h@?z@???fA?b@?z@?^?jC?@?V??@hA???pG?l@?b@???`@?j@???l@?X?@?^???j@?@?x@???vA?X???|@?n@??@dA???V?pA?xC???b@?fA???dA???l@?z@?l@???r@???p@??@nBAl@?l@?hA?t@???V?N???P???R???P?d@???\\?@?n@?v@?b@???~@???|@?xE??@bC?@?L?lA?J?@?~@?@?d@?\\?~@??ApA???b@???v@?h@?r@?lA?b@?@?z@@r@???X?h@???N?fA??@t@?d@?p@?lA???r@@^???V?@?\\?jA?lA?J???rA?l@?r@???xDAbA?^?tA?r@@fA???V?@?n@?p@?`@?@?z@??@\\?@?t@?x@?@???z@?p@?@?|@f@?@?L?TA??X?p@AT???dA?L?T?lA?@?r@???h@???R???V?dB???Z?x@???`@?@?\\?`A?V?T?nA???X?J?R?rAAt@?@?RLP?hBA??XA@?pA@??V?\\?Z???z@@??`F@~HC~@?N?|H???jBC|A?zE@??^?T???zB?B?r@?zGA??|G?tC?h@???Z?lA?vE?~A?f@?`@A??F?b@???v@?hF@??b@?X???xE?pBA??b@???^A??nA?bC?hD?^???N???N???LAPALANK??LAD???VILEB?FCJELAJAHAJ@V???\\JlCt@b@L??d@L??jBf@tCx@`@L`@L\\HbAZjAZZHVF??h@L`@H??Ar@??Ax@?f@AZ?@AlAA|B?L?x@???t@??EbB???b@AVApA??CtEA^???H?T?P?hA?@AL?J???\\Az@?V?N?@Al@?V???|@CtB???\\?x@AfA??AZ??A`BApDAr@EbF??CzE??CfB?T???f@Al@??An@?j@???r@A`BCrFA~@???R??Af@??AhBA`B?b@At@ChD???hA?^?@AZ?TC^??KlACZAJKlAA@IbAEd@??Ir@??ADCf@U|B??O`BEVCRE^Ed@?@AVCX??Ev@CXC\\?@A\\??CVEr@?@I~AA^IrA??K`B?@GbAATAT?@G`AEf@??ARIrAGfA??Ef@??G|AEh@AZ??Eh@AREn@??Ch@??GfAGbAItAGjA??Gv@E~@IvA?@Ev@??IhACh@MlBE~@??Er@??Ex@Cb@??CVAX?V@ZBd@?@Bd@@TBn@Bz@??@T?H",
        "long_vehicle_id": "2"
      }
    ]
  },
  "status": "Ok",
  "message": ""
}

Visit Route Optimization API documentation to know more about the available features.