Optimizing Employee Transportation: Multi-Vehicle Routing and Escort Services

One of India’s leading employee commute service providers sought to enhance their services by implementing the most efficient routing solutions for employee transportation between their residences and the workplace, as well as the reverse commute. NextBillion.ai’s Route Optimization API generated optimal routes for this commute service, given the appropriate inputs and necessary constraints.

The primary objective of this Proof of Concept (POC) is to present a functional solution for the optimal routing of employee commute services. This involves utilizing data on employee pickup locations, drop-off locations, vehicle types with their respective maximum capacities, service durations, and designated log-in and log-out times. The Route Optimizer, an integral component of this process, automatically organizes and assigns employees to vehicles, taking into account their geographic locations and the vehicle’s capacity. The outcome is an optimized route that fulfills the following criteria:

  1. Minimizing Employee Time Spent in Transit: The solution aims to reduce the time employees spend in vehicles during their commute.
  2. Punctual Arrival at the Office: Employees are required to arrive at the office before the designated log-in time.
  3. Escort Services: When the initial pickup from an employee’s residence or the final drop at an employee’s residence occurs between 6 p.m. and 6 a.m., and the employee is of the female gender, an escort is deployed.

This notebook contains executable code that interfaces with NextBillion.ai’s API. The primary goal is to present a feasible approach to address the employee commute service use case within a specific set of constraints.

Problem Statement

The employee commute service provider offers transportation for employees traveling between their homes and the office. Employees are located at different locations of a city, work varying shifts, and require transportation to and from the office. This proof of concept (POC) considers 30 vehicles, each with a configurable capacity (excluding the driver). The primary goal is to generate an optimized route for employee commutes while adhering to specific criteria.

The key criteria considered in planning are as follows:

  • Ensure employees reach the office within their shift time, provided as a delivery time slot in the input.
  • Minimize wait time for employees; a service time of 5 minutes is considered.
  • Provide escort services to female employees when applicable.

Approach

In this technical notebook, we present our approach to addressing the problem at hand. We outline the key steps involved in solving the complex multi-vehicle routing problem specific to our use case.

  • Data Collection: Our process begins with the collection of necessary data. We gather information on employee pickup locations in latitude and longitude format, and their associated shift time constraints, i.e., the time slots designated for reaching the office. This is given as delivery start time and delivery end time as input.
  • Vehicle Dispatch: Vehicles designated for employee commutes are dispatched from the central office location. The office serves as the starting point for all vehicles. Each vehicle can accommodate a maximum of N employees, excluding the driver. The maximum capacity of each vehicle is also configurable to meet specific requirements.
  • Route Optimization: We employ a route optimization algorithm that groups employees into sets of N based on their locations. The algorithm calculates the most efficient route for each group, considering geographic factors and constraints.
  • Shift-Based Optimization: The route optimization is executed separately for employee groups with the same shift timing, ensuring that shift-specific constraints are taken into account.

Optimization Steps

In this technical notebook, we will guide you through the steps required to build, solve, and visualize a complex multi-vehicle routing problem tailored to this specific use case.

Step 1: Obtain API Key

To proceed with the following steps, you must obtain your API key. Contact the support team for more details.

Step 2: Load Custom Data

In this step, we provide a comprehensive overview of the data required for our employee commute optimization process. This dataset includes information regarding employee pickup locations, corresponding shift timings, as well as vehicle data such as their initial locations and maximum capacity constraints.

Employee Data

In this notebook, we will be using the following sample CSV as employee data.

Employee Sample CSV

Vehicles Data

Similarly, the following sample vehicle CSV is tailored for our use case.

Vehicle Sample CSV 

Step 3: Define Problem Constraints

In this step, We set problem constraints, including the following: 

  • Max Drive Time (in minutes): It represents the maximum allowable drive time for the driver in minutes.
  • Objective Function: The objective function can either aim to minimize the travel time or minimize the distance traveled.

For this use case, we set the `Max Drive Time` to 160 minutes and the `Objective function` to minimize the travel time.

Step 4: Submit the Problem to the Route Optimization API Endpoint

Submit the requisite JSON data to the Route Optimization API endpoint.

curl --location --request POST 'https://api.nextbillion.io/optimization/v2?key=' 
--header 'Content-Type: application/json' 
--data-raw '{
    "vehicles": [
      {
        "id": 1,
        "description": "SEDAN 1",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 2,
        "description": "SEDAN 2",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 3,
        "description": "SEDAN 3",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 4,
        "description": "SEDAN 4",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 5,
        "description": "SEDAN 5",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 6,
        "description": "SEDAN 6",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 7,
        "description": "SEDAN 7",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 8,
        "description": "SEDAN 8",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 9,
        "description": "SEDAN 9",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 10,
        "description": "SEDAN 10",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 11,
        "description": "SEDAN 11",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 12,
        "description": "SEDAN 12",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 13,
        "description": "SEDAN 13",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 14,
        "description": "SEDAN 14",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 15,
        "description": "SEDAN 15",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 16,
        "description": "SEDAN 16",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 17,
        "description": "SEDAN 17",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 18,
        "description": "SEDAN 18",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 19,
        "description": "SEDAN 19",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 20,
        "description": "SEDAN 20",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 21,
        "description": "SEDAN 21",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 22,
        "description": "SEDAN 22",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 23,
        "description": "SEDAN 23",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 24,
        "description": "SEDAN 24",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 25,
        "description": "SEDAN 25",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 26,
        "description": "SEDAN 26",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 27,
        "description": "SEDAN 27",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 28,
        "description": "SEDAN 28",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 29,
        "description": "SEDAN 29",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      },
      {
        "id": 30,
        "description": "SEDAN 30",
        "capacity": [
          4
        ],
        "max_travel_cost": 9600,
        "start_index": 0,
        "end_index": 0
      }
    ],
    "shipments": [
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.8919434,77.6182305",
          "id": 1,
          "description": "181, M",
          "location_index": 1
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 2,
          "description": "181, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.8424657,77.6462378",
          "id": 3,
          "description": "182, F",
          "location_index": 2
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 4,
          "description": "182, F",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "13.0093793,77.7079163",
          "id": 5,
          "description": "183, M",
          "location_index": 3
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 6,
          "description": "183, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "13.0108566,77.730516",
          "id": 7,
          "description": "184, F",
          "location_index": 4
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 8,
          "description": "184, F",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.9186116,77.47650809999999",
          "id": 9,
          "description": "185, M",
          "location_index": 5
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 10,
          "description": "185, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.9853422,77.75951669999999",
          "id": 11,
          "description": "186, M",
          "location_index": 6
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 12,
          "description": "186, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "13.0328962,77.6271395",
          "id": 13,
          "description": "187, M",
          "location_index": 7
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 14,
          "description": "187, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "13.017728,77.762081",
          "id": 15,
          "description": "188, F",
          "location_index": 8
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 16,
          "description": "188, F",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.8811382,77.64938389999999",
          "id": 17,
          "description": "189, M",
          "location_index": 9
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 18,
          "description": "189, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.8479159,77.6528024",
          "id": 19,
          "description": "190, F",
          "location_index": 10
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 20,
          "description": "190, F",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.9638686,77.7091384",
          "id": 21,
          "description": "191, F",
          "location_index": 11
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 22,
          "description": "191, F",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.9334552,77.7479798",
          "id": 23,
          "description": "192, F",
          "location_index": 12
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 24,
          "description": "192, F",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.901208,77.6452628",
          "id": 25,
          "description": "193, F",
          "location_index": 13
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 26,
          "description": "193, F",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.874665,77.6419787",
          "id": 27,
          "description": "194, M",
          "location_index": 14
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 28,
          "description": "194, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "13.0229614,77.65969729999999",
          "id": 29,
          "description": "195, M",
          "location_index": 15
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 30,
          "description": "195, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.9613508,77.5369594",
          "id": 31,
          "description": "196, M",
          "location_index": 16
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 32,
          "description": "196, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.9202474,77.6205428",
          "id": 33,
          "description": "197, M",
          "location_index": 17
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 34,
          "description": "197, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      },
      {
        "amount": [
          1
        ],
        "delivery": {
          "location": "12.8715901,77.6155747",
          "id": 35,
          "description": "198, M",
          "location_index": 18
        },
        "pickup": {
          "location": "12.978527,77.665694",
          "id": 36,
          "description": "198, M",
          "time_windows": [
            [
              1688394600,
              1688395500
            ]
          ],
          "location_index": 0
        }
      }
    ],
    "locations": {
      "id": 1,
      "location": [
        "12.978527,77.665694",
        "12.8919434,77.6182305",
        "12.8424657,77.6462378",
        "13.0093793,77.7079163",
        "13.0108566,77.730516",
        "12.9186116,77.47650809999999",
        "12.9853422,77.75951669999999",
        "13.0328962,77.6271395",
        "13.017728,77.762081",
        "12.8811382,77.64938389999999",
        "12.8479159,77.6528024",
        "12.9638686,77.7091384",
        "12.9334552,77.7479798",
        "12.901208,77.6452628",
        "12.874665,77.6419787",
        "13.0229614,77.65969729999999",
        "12.9613508,77.5369594",
        "12.9202474,77.6205428",
        "12.8715901,77.6155747"
      ]
    }
  }'

The above data can be visualized using the Route Optimization Tester. The compiled data will resemble the following image:

optimized jobs

Step 5: Retrieving the Optimization Result

Once the problem is submitted to the API endpoint. An optimization job will be created with a unique request `id`. This request `id` is used to retrieve the optimization solution.


{
   "mvrpID": {
      "id": "dca5b50dc5e5df4b5d8b81f4ad56d5ae",
      "message": "Optimization job created",
      "status": "Ok",
      "warning": ["location_index[0] is used for both pickups/deliveries as well as vehicle start/end"]
   }
}

The above API response suggests that the optimization job has been created.

Step 6: Render and Visualize Intermediate Solution

Once we have the reference ID for the MVRP request, we can send the Reference ID to the Route Optimization API endpoint to get the solution. 

API Request

curl --location --request GET 'https://api.nextbillion.io/optimization/v2/result?id=dca5b50dc5e5df4b5d8b81f4ad56d5ae&key={your_api_key}'

API Response

{
    "description": "MVRP Tutorial 2023-11-02T07:21:16.295Z",
    "result": {
        "code": 0,
        "summary": {
            "cost": 37531,
            "routes": 5,
            "unassigned": 0,
            "setup": 0,
            "service": 0,
            "duration": 37531,
            "waiting_time": 0,
            "priority": 0,
            "delivery": [
                18
            ],
            "pickup": [
                18
            ],
            "distance": 237030
        },
        "routes": [
            {
                "vehicle": 2,
                "cost": 6614,
                "steps": [
                    {
                        "type": "start",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 8,
                        "load": [
                            1
                        ],
                        "description": "184, F",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 6,
                        "load": [
                            2
                        ],
                        "description": "183, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 30,
                        "load": [
                            3
                        ],
                        "description": "195, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 14,
                        "load": [
                            4
                        ],
                        "description": "187, M",
                        "distance": 0
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688396308,
                        "duration": 1708,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            13.0328962,
                            77.6271395
                        ],
                        "location_index": 7,
                        "id": 13,
                        "load": [
                            3
                        ],
                        "description": "187, M",
                        "distance": 11042
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397138,
                        "duration": 2538,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            13.0229614,
                            77.65969729999999
                        ],
                        "location_index": 15,
                        "id": 29,
                        "load": [
                            2
                        ],
                        "description": "195, M",
                        "distance": 15736
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398437,
                        "duration": 3837,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            13.0093793,
                            77.7079163
                        ],
                        "location_index": 3,
                        "id": 5,
                        "load": [
                            1
                        ],
                        "description": "183, M",
                        "distance": 24970
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688399219,
                        "duration": 4619,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            13.0108566,
                            77.730516
                        ],
                        "location_index": 4,
                        "id": 7,
                        "load": [
                            0
                        ],
                        "description": "184, F",
                        "distance": 28500
                    },
                    {
                        "type": "end",
                        "arrival": 1688401214,
                        "duration": 6614,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 39717
                    }
                ],
                "service": 0,
                "duration": 6614,
                "waiting_time": 0,
                "priority": 0,
                "delivery": [
                    4
                ],
                "pickup": [
                    4
                ],
                "distance": 39717,
                "geometry": "{|enAia`yM????????a@HWHILEF?H?h@EvA?l@?@?V?DADCBGFjAHb@FhA@t@CPCj@OPADA@A?GE]@I@CB?RAJO^o@FKBAJGz@g@c@m@IKCEYa@Uk@Yg@CAIIQKYU[IGCA?KAw@BUDSBYBWDk@Ha@F_@FQBOFEDED?@CDGJYf@UPOFw@PUBi@HK@WD]@WACAG?QAGAA?GCEAAAECEEEECCACAACACACCA?MCEA??g@?KAK?_@?UBUHOLOJONKLCL?Fo@IEAa@CAAm@GMAaAGe@EyAKw@G]E_AGYAIAKAATCTAX?DAF?NA^?@?JAd@CbB?BEbA{CAi@AcAAW?y@Ds@@cA@u@?qAC{@A{@Cg@A_@AU?Id@I\\GL]r@ADQ\\QROLSRWXMPGPCVAZ?^@h@?LAVAl@El@Gf@QjBC\\Er@CZCNEd@E`@CNALAJCL?HAJE^Cb@A@Eh@G~AEb@CZAVAJM`BAHCHENqAeDe@kACG{@}B]_AM[a@iA]aAk@aBISGOeCwGi@mBISOg@Qc@EKIWY_@QW]u@IQGOGKAGGKACCGEICIEWAKOSMKKIIGOEQGUE]Ae@?_@DUDSDQDIBq@Xo@JGDk@Xk@V_@RKDMFEDGB]POHKDA@[NWLIBE@MDIBC?E@I@K@I?I@G?G?M@W@gABkDH_DF}BHY@q@@cAD_@Ba@@M?o@BmCFO@Q?W@Q@mABy@BC?WBc@BeAJ[BQBcBNaE^_@De@BE@uANuBL{ADkABM?I?gBFeBFG@Y@}@BI@G?kBDc@@o@By@@G@Y?k@@eADO?G@I?A?G?I@G?G?I?i@BmADM?cBDe@BW?M@]@M@O?E@eAFq@Da@FI@OFC@KFIDGFCBKJCDMX_@jAa@tAGVK\\GPCFCJEFWt@Wr@]`AWx@Wt@ADELADGTIVGRWr@GNe@zA[x@Ut@GPUt@w@fC]~@ELAF{@~COf@Qp@Kd@CHY~@K`@u@zBsAbEM\\q@pBwAfEcBdF]dAQd@]hA_@dAc@pAc@vA_@hAELEJEd@e@pAs@~BIRi@`Bc@pAWv@o@dBGTM^Ob@u@zBgAbDy@bCQHEPIPK`@Qb@K^GPITGTCNAJGZGb@Ed@Q`BE\\g@lESbBEh@O~@U`BIb@If@BTI`@]`BQr@Sx@Oh@Uz@]fAMb@GRSf@KVKXGJCHGHAD?@KXABO\\KVEFEFMLOJOFMD}Bx@e@Rm@TKDOFMDq@Xc@PwAh@[L_A\\_A^MFODaBp@KDaE~Ao@TwAj@{Al@g@ToBx@IBNBRDzB`@dEz@D@fAXUjACLO`ANaABMTkAlEz@z@PfAPdAV~@RvAThAmH@IXoBHi@P_BDq@LyABa@lBb@hBd@Pw@ZyAViAb@uBCGEGAA?UAA?G?C@G?E?EUQGCMKCAGEQMYSBIBEBGHWXs@b@}AX}@DMXmAZkALk@BIP}@BQXyANeAHm@BYHk@`@?D?F?TgBHs@Fq@ReB@IBWD_@Da@D]@ED_@Fc@D]@CDWF]V{@Pg@Ng@J]HSFg@\\cARk@`AwCn@mBRk@BK`AoCZ_A`@oAb@oAHWJY@Cb@qAFQHUZ}@BIHIJYTm@Tk@d@wAKC[MDMZaABI`@mAf@{An@mBx@eC\\gAr@oBb@qAh@_B@EnAwDBEd@yAd@wA^eAL_@Xy@Ro@Z_AL]`@mABIIEMAIC]USOKI[WOMWSMIOMe@W_@UQMSOIG_@Wc@[IIWQECQMSOMGKC]MUIKCSGKCKC_@MUGQGQGKCBEBEBGNe@Ty@H[Ru@@INc@La@a@QEEAG@Mq@U}@]CAB@|@\\p@TAL@FDD`@PM`@Ob@AHSt@IZUx@Od@CFXHTHVH\\JRFPDPDXJXJPHFBFBJHRPZPDFDBJFRPLHFDHF^VJFDDHFTLPLPHLHj@`@LJ\\V^k@RYJMDEF?D@XN^PJ]Xy@@Ef@{AL_@t@yBb@qAL_@ZaAHSFSf@{A@Gh@}AVu@Ne@HUZ}@Rm@DMRq@HQLWBEHMFGFGXSHE@AFELEPCn@Kf@GNAV?b@ALAP?\\A\\Cb@Al@Cb@?r@Cr@Ct@CTAX?DAhCCxDMzACPAl@?v@C@NfBGfBENAF?lACxAErBMhAKFApAM`E_@rBSVChAKd@CVCB?x@CbBEPAF?hDKdACz@CD?j@CH?D?LAf@CTA~GOjDI`ACn@CN?HATCD?BAFAJEFADCZMNIFE@AVKb@UDCJGFCNI\\QPIVMl@YJGzAu@h@YLMTWLQJUJ_@DW?W?K?OEa@EOEOOi@Og@Me@Oc@Mc@I_@GWEYAKIu@Ma@iA}CWq@IWQo@EMEKUm@Uq@q@kBm@_BCIm@_Bg@qAe@oAs@kBa@eA_@aAm@aB]{@IUSk@]eAY_AK[GQ]eA[y@Se@MUAECEGMYo@KQACM]g@eA?Cc@}@O_@c@_Ai@iAe@_Ak@iA}AkD}@gBuAsCeA{BKUwA{C}A_DeA}Bc@cAKSsAoCWi@{@iBi@mAMUWo@Ui@m@wAa@cAq@aBSg@m@wASq@GSUcACKCWCQIk@Gc@Ik@E]MeAKy@Gi@C[Gi@CSAQAIAKAOEy@AOIy@?CAGAQAYAUAi@EsA@aA?k@?cB?O?KCU?ECQAGAEAIAEMUQWAAYWWSUQGEKIs@i@QMKIOMeAw@i@c@o@g@OMGGD[\\VJHf@b@b@ZVPp@l@FDBEJ]DUHQNa@@EBE?AAAEGGEUO[Qh@y@`@i@K[EKGOk@uAGMSe@Sg@_AoCIUK]IYQm@?MMs@Mq@a@eCAG?A?A?EHIV[@CHM@M?G?K?C?C?G@E?G?S@W?[?S@}@?]@e@AC?C?CACMw@Cg@A[@i@@_A@W@W?K@M?QB[Ba@@SDe@HiAJuAHo@Di@nA[~@_@Dc@Eb@l@UPGfAe@z@[x@[NEb@QLGXMLE?w@F{AZ@RAZC\\GrA]|@_@|@_@PGHEJEHEJCFAHCFA@K?i@@EF?tELZ@?O?QAYA}@Ay@?S?CC_@E_AC}@IcBG[AICMCMAO?AAE?EAI?KAIAK?ECS?A?]?IAQ?I@_@AI@C?Q@S?K@I?A@Q@S@S@Q?G@WDu@@O@U@K?M@O@M?]?eA?K?a@?Y?k@Cw@?YCeA?MEcBAk@?E?MAQA]?ICy@AO@S@MBMNkAHk@NaA@CVcBLs@DUDQF_@BOJk@Hi@BKLgAD[@K@K?]`@uC@[?C?S?O@g@BeA@o@AU?sC?GAGAGGi@?CIs@AIGgAAA?GAIAOASC[Ee@?ACo@K_@MSSSAA_@SKGGEYK_@K]GU?MB_AwA_@Y]Qi@_@_Ao@SI]GS?OBMHMREJEBI?OCS?IDILILIGMMSWi@_@AAYIQMSG_@O_@UWKa@i@SSKIKEIGIEO@OCKCEAe@Mw@Su@QOEg@M_@IYEGA[E]CSAMIAF@GLHR@\\BZDF@XD^Hf@LNDt@Pv@Rd@LD@JBNBNAHDHFJDJHRR`@h@VJ^T^NRFPLXH@@h@^RVLLHFXN`@XjAn@JDhCpAt@d@HDHDMTHJj@P^Np@Lr@HNcA^FXNp@HBn@?@Dd@BZ@R@N@H?F@@FfA@HHr@?BFh@@F@F?F?rC@TAn@CdAAf@?N?R?BAZa@tC?\\AJAJEZMfACJIh@Kj@CNG^EPETMr@WbBABO`AIj@OjACLALAR@NBx@?H@\\@P?L?D@j@DbB?LBdA?XBv@?j@?X?`@?J?dA?\\ALAN?LAJATANEt@AV?FAPARARAP?@AH?JAR?PAB@HA^?H@P?H?\\?@BR?D@J@H?J@H?D@D?@@NBLBL@HFZHbBB|@D~@B^?B?R@x@@|@@X?P?N@r@@zC@z@@v@Ar@?F?DBfA?F?H?HAT?P?BCh@Ex@@XDlA@b@AXAJAHId@AH?BUbBId@UfAWlAQt@[vAGZKf@ELE`@AFARAJAP?L?HAHA^?B?B?@AF?HAD?D?DAFEJABDPBFAj@Pf@BREj@BF?JERKRCNALG^GXCDE?{B_@Kl@CJSx@St@Sr@CLCHCHCHADABEL?@ABGNELGPABA@KTYd@ORQb@ABADSh@Sh@CHQZKTa@x@Wb@IHYh@OTCDSl@EHETEPKbAKFGBBJ@D@DB^@^AfD?bACjA?^?JDZBd@HfABV@RD\\BLBTBTJz@F`@Jz@VlBBRd@bDFVFZF^`@nA\\dAPh@p@~A`@bAl@xATf@Vn@LVh@jAz@hBVj@rAlC@Dl@nAfA~BzA~CvAxCLVbAzBtArC|@fB~AjDh@hAP\\|@jBZp@DJFLHRTb@N\\Vn@HPHNR`@@DZp@FLDJ^x@DHFPBDJXZdAL`@BJNf@JXZdARh@JVZx@n@bBBHFPPb@`@dAr@jBPd@N^DJf@nA\\`APd@l@`Bp@jBVp@L^FLBJBDBHBHDFBHLXhBzEPFBBFHHVFNJ`@DJBFZ~@h@fBPh@Nd@@BNh@DNBH@HN`@@DHTX~@@FDLTv@X|@J\\JXDLFT\\`AXt@HCFAVGt@OHAh@IHA@?@A`@EVCNCB?TCDAF?`@?NAx@BF@h@BRB`B?F@f@BR?J@dA?z@Ap@ATILIPEFAR?F?\\AT?^@f@@z@Bz@@pABt@?bAAr@Ax@EV?bA@h@@zC@DcA?CBcB@e@?K?A@_@?O@G?E@YBU@UJ@H@X@~@F\\Dv@FxAJd@D`AFL@l@F@@`@BD@n@H?GBMJMNONKNMTITC^?J?J@f@???D@LB@?BBB@B@@@@BBBDDDDDB@@D@FB@?F@P@F?B@V@\\AVEJAh@ITCv@QNGTQXg@FKBE?ADEDENGPC^G`@Gj@IVEXCRCTEv@CJ@@?FBZHXTPJHHB@Xf@Tj@X`@BDHJb@l@{@f@KFC@GJ_@n@KNS@C?ABAHD\\?FA@E@Q@k@NQBu@BiAAc@GkAIKFUHKGZOHCDE@A?A?C?W@o@BwABw@@IFENAVI`@I",
                "description": "SEDAN 2"
            },
            {
                "vehicle": 15,
                "cost": 9378,
                "steps": [
                    {
                        "type": "start",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 10,
                        "load": [
                            1
                        ],
                        "description": "185, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 32,
                        "load": [
                            2
                        ],
                        "description": "196, M",
                        "distance": 0
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398865,
                        "duration": 4265,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9186116,
                            77.47650809999999
                        ],
                        "location_index": 5,
                        "id": 9,
                        "load": [
                            1
                        ],
                        "description": "185, M",
                        "distance": 26339
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688400461,
                        "duration": 5861,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9613508,
                            77.5369594
                        ],
                        "location_index": 16,
                        "id": 31,
                        "load": [
                            0
                        ],
                        "description": "196, M",
                        "distance": 38211
                    },
                    {
                        "type": "end",
                        "arrival": 1688403978,
                        "duration": 9378,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 58691
                    }
                ],
                "service": 0,
                "duration": 9378,
                "waiting_time": 0,
                "priority": 0,
                "delivery": [
                    2
                ],
                "pickup": [
                    2
                ],
                "distance": 58691,
                "geometry": "{|enAia`yM????a@HWHILEF?H?h@EvA?l@?@?V?DADCBGFjAHb@FhA@t@CPCj@OPADA@A?GE]@I@CB?RAJO^o@FKBAJGz@g@`@j@BDT^FJXXJDOj@PBZHF@D@f@ND@`BVBIBAF?N?F@\\BN?DHHRNZDHPXFLPP\\`@LNh@n@rAxADDZ^VZ\\`@b@f@HHHJDDFDHFHBB@H@F?T@B?V?N@X?n@?H?L?`@?N?D@DDBHBRBbADr@Bf@@P@l@Dt@?L@N@PBl@@d@@FFHb@d@^b@r@]xA{@p@_@HEJG|@i@xBsAVOd@Y~BwALIzBmABCnBiAD^?BDHEl@K|AAFIfAIzAAPAPAJC\\C\\?HK~AIpAKzAATALAVKtAe@jG?L_@zEATCl@MrBO`CKhAO~A?DMfAMx@EXO`AQdAEXrA^RDXHn@Nt@RzAb@f@Pj@TXLFBNHNAJD^RNFXLVJTHN@f@AVAdAIHAn@AH?~@???z@Nl@RX?J?d@C@?pAGjAK@?f@EhA?\\Dv@FJ?~@HB?dADXBT@RLl@@H@H?D?Ah@CXCt@CPA^AJIdAGhA?LCd@ANCb@CVE`AIfAANARGdA?DADAVAPEj@AVCb@C`@?BC\\Ez@KpAEnAEt@?JALEz@CFAPCf@A@APAPANDRDNHH?PA`@ANCbAGlAAVEx@ItAALe@DCZG~@GlAA\\C`@Ch@KnAAVMzAKlAAPGl@K~@KbAEXAHAHAFUnBCN?HAH?BE`@Ej@?BALEv@AJAb@?N?F?LBN?B@LH^DT@JFVFXNr@J\\Rv@BP@VGf@EVCL]fBy@tDe@nBCLKf@GVGTCJCRKx@Ij@AFAFANGPADM^CHc@~@GNGLINEFi@hAMV_@v@]n@ABY`@]T_@REBw@\\}Ap@QHuBv@}ChACBC@A@EDED?@e@jAUn@]`AeA`DQr@IXENCNCXGl@AHAT?n@?NBJ?DDPPn@DJNh@Pf@Tz@@DBD@FBDR\\DDBBDDDBFHRNJFRLFBFBRJb@TPHD@RJDBBD@BBBBJF`@BV@D@PDn@Dh@Dz@BZM\\@V?F@D?V?DAJC\\Mh@CHWbAENCLKf@CJ_@~AMf@On@EVS|@G^Or@I^CJADKj@ERAFEXCNG^M`AEXObAAFAJe@xCWzACZABCZ?@AJ?J?P?H@L@H?D?@BTBTBX@F@LBPBRDZFd@DZBTBJ@PBHVzB@F@LBLBT@F@JBLHt@@LDRLjADXX`CBN?@BLLfABPBVDd@@HHr@J`AFl@BN@F@RBX@RBRLhBBN@T?FB`@@J?BBd@Ft@@RDn@HjAB^Fv@BZ@T?FB\\D`@?B@P@D@T@LBZBZDj@N`CDt@CHAH?HBd@Dj@JbBL~ANdC?D@DABBPBHDV?D@DBVAJ?J?JAV?BALAF?DABAFCDCLKTIJGLKL[VKFULWNQJa@TGBYNoAd@c@XGBEBKHIFYRQLm@d@WVMPONKRKTIRIVI`@ADG`@CNENGj@Ed@CVCTCZGd@AT?D?R?Z@R@j@DZJv@@FBPFTLn@B^B^HjADh@F~@Fn@Lv@FVLZNZjBpB@BFBLFBBJFr@j@JJr@j@XT\\Vl@b@DB@@TPFDd@`@tBlBJHn@h@r@l@Xb@JTBDBJ@HDR@L@RBP@P@N?DBf@@b@BX@BFd@J~@?HBNNhBBX@Z@P?L?H?XALA\\C`@AP?DEh@EdACT?NC^AXE|@Cb@Cd@Cp@Al@?@@d@?\\@P?V@J?NAH@RAPETId@I^CJENOl@Mh@ETK`@G^EVCHEVQr@Oh@AB]~@O`@IVERI\\AHAV@`@@VFh@?@D`@BT@RBVB^B~@@H@`@FdA@`@@T@X@XBh@Bt@?H?P@d@Bh@@TBp@BZ?DBJ@T@^@P@V?`@?D@VBTB\\@B@NDNLr@@@BLDLBH@DDRBLFRFTBNBJDPHVDLFPRr@FR\\fALb@BF@DHPDJBH@BBHFPJb@F\\DRBLHd@XtAFZNp@DTH^FZDRVjAFV?BDJBJBFBLL^Nf@JZFRH^BJBLDNDP@HDTDPBJBLDRBRDR?@BJBLB\\Bd@@D@N?b@?@@h@?T?tA@f@@N@JFx@LdAF\\Jv@NbABRBPXlBHj@Hb@Nt@Vp@Zn@FHNVTZHLZf@BDR\\n@dATXX\\TRFEdAm@xA{@L|@DRBDDF?BN\\BFDLd@tAb@hB?@L`@|@UDNL^b@hBJd@Jb@\\dBqAPM@G@DLBZHr@H`@BLDPTnA@FZ~AFVR`AVnBDZHx@B\\BLDf@@JBPBXBR@TJnA@LDb@NtADZPnA@LDVJd@HTJ^DLDHHVBDj@lAZj@HPh@z@PXp@`AX\\JLf@l@TXBDJLVVLNLNPXLRJTDJDH@BBFDNFRBF?BDV@NDVDRFXBJHTDJBLHPJLFFHJLLJJTRNN@@RTJJBDB@LJFBLLD@D@BDBDHJHLHLR\\|AdCDFRZFHDDHJNF@DLVLVR`@DLJTBFBFBFJTFPTv@??BPFb@BLDNBHJTBBFHHLFHFFBDHJJNVXHLLNLNFJTZ@@FHFDVRHJDBd@f@`@b@d@f@BBb@p@HP`@t@NZFJBDDHR`@Vb@Xj@Rb@HPHNFL`@dALd@FXFZP|@ThABPDPBPLh@Jd@TfAJ^HZFVHR^hAFPFTJVDJHTBJBFBF@DHRDLBJHRFRFNJXDJDLDLJRJTNZHRBBFNLRFLHJPZFLBDDDDFNRBDBD@BHJDFFJHJT\\JLFFDFFFd@h@NPHHNNJJJHPNRRFFFDDBDBFDFFDBFDDBHFFDDDFDJHp@h@JHDD^XFBBBLH`@VXRNJJDPNB@l@\\NJRLPLRLTPNJPHLF@?FBDBJFDBD@PHPH@@THDBDBJFNHDBBBHDLJXRNLDDHFNN??FFNLBBJJBDDBB@TT@@b@\\NLHHDDLJXTFFPR@?JLHJDFDH@?T\\JTR^HNHNHNFJDHNVDFFJLPHJHLNRLNJLFFBBBDPPHFFFHFB@DDJJTRDDHFJJDDBDBDDBDFFHBFDHBDFLBHDNDNDHFV@FFPDRLb@H\\Np@N~@@LBRDl@@R?J@L?J@V?V@d@?p@?T?R?LA~@Dv@@JBT@N@F?B@H@N?FBR@L@H?HBP@RDh@BL@L@N@NBX@J@H@J@PFp@FXDTT`ADPBNFRDRDLFd@@H@H@B?D@D?F@DBJ@D?DN|@BHBJ?DBFBNBPH\\Nv@Rr@J^NXJRl@bAv@hAt@fAnAhBXV`@d@v@|@\\\\HHHHFFRRZ^\\b@BFRXfD|FRZNTHJDDLLXV@?bAf@FBn@TZNNHb@T`@VPNNNNVJZNf@L^`@tBFZFRL^JRNTJNFJRTRPNLDDZVNJLJPLFFXTXXJJHHFHPRV\\`@h@LX^n@b@t@`AxAb@x@RZn@|@h@n@tAbB|@bALLb@f@HFJLNNl@r@xB|BRR^b@X\\RVR`@NZN^`@dAFZJ\\MFIFcAtAi@x@Yh@MREJCDEHALAJ?NDT@DHTJVBJ@J@B@D@L??CBABA?CBUh@TTNd@r@pBFTf@dAZ~@T|@BH^fALZTjALv@bBjEHVd@hAzAzDVn@Pb@BFh@zA`AzC@Bp@~Bj@`A^d@~@lA`@`@fAz@XVNPvBxAvAz@l@VvDlAUr@Ux@EPQr@GX[fAYlA]pAOn@Qp@\\JfF|AEBGBE@GBYFm@NSDQDs@Py@d@EBQN[VSRq@l@OP_AdASRSRGFEBSTaA|@CBHBHAfA^|@\\GJ]fAQh@Pi@\\gA{@[eAc@EGIC]TOJMHm@\\m@^EDGFA?m@h@_@Rc@Vq@`@SRQD_@BgAPi@RMNKLGHAB]~@[x@[x@eAnC[x@AB]|@KPQVg@j@A@QJKH{@f@i@RYEWEU@u@OWG]GmAWaGmAA?]KgEqAwC{@sCy@aCq@_Be@c@Qe@UECEAgAi@eB_AeB_A}@c@mDqBWQe@W]SOKk@]wAy@ECQGIEoAi@SKs@Ys@]mAg@OGFS^aAv@eCl@mB|AcFJe@VkAZ{DHa@DODSTkAReABIDSF]Lm@v@sEd@sCJi@\\oBNoAFa@H[JQDG@CBCDIJKJKZADELCTEIGEEKQIWAI?_@Dc@R}@BOXsAHa@H[BQ^aBBK@]EEk@]SOKIa@UGE}@k@YQOIQEYE[CSEOESIc@Yk@_@SOMIIGKEIEGAEAMCGA[CSCoAMUCs@IEAG?c@Gm@GWCw@Oe@K[CQ?oBU[Cm@Cm@Ew@E[COAo@G[CQASCc@E_CS]Ge@OqA_@}@[i@Oe@M[K_@KYIOEOG]KKC]MQGSG]Oi@Sk@WOGmAi@WMUMKGQMIEm@]g@YGEwAcASMWOk@[]Q_Ag@a@Uo@]CAw@c@KGMEKCKCKCu@Q[IQCWGMCWEICuCi@MCUI??o@]{@g@KGGGKIGIEEEGGIEKGGCGAACECEEIMSEGQYEIS]IOS_@IM?A[i@IMCEAACEEEACCAAAECKCEAICGAKCIAICKAYEOCOCSEYEIAECGA@Q@W?G?E@M?IJI@A@ABAD?@ALCFA`@GDA@?r@GdA[d@Op@Ub@Ol@S`Bm@h@Sl@Ud@QHKBM@K?Ko@a@qA{@IIIGEMAOBsA?CRmCLwBDcARkDTuELkCBeABa@NyCFkBLgCDo@@S@IJmA?IBc@@G?OBcAAO?ECYCECGKSMSk@m@EEKISQa@[g@g@GIA?EMCIAO?A@S?SBYBg@J}@@M?O?K?KASMk@IWUi@MQOWMOACKOYa@QWKMIKKKKI]Uc@UEASM_@Qm@[q@]IEGCiAm@SKa@QUKMGkAk@{@e@]Oc@UGAm@WUMGEAAAAEECACCCCECGG[Yg@c@CCGEy@w@CCMMKIIKIGIEKEEACAICQCm@GKAKAG?[EmAGG?A?E?uAOcBMk@EEAGAGA[BICSEKCUEEAKEEAKCEAICICMCOCKEIMSGg@OUCGA[IICK@IAEAKEBG?E@E@ODY?CHm@B[Fw@B_@TiCNoBNkBFaA???O@KBW?I@WBc@?Q@SFI@MB_@Dq@@S@IBYBUCMFg@D[Fg@@A?E@EBKBODOH[BMJ[@ETm@Nc@@C\\}@Pc@DMHQJWTo@d@kA@CFMLYLYDGT]LSHM@I@E?E?GIUKSAAAEGAq@Qq@QYI}Bm@SEmFsAKBgAWGKECFg@D[Ju@Lq@Nw@FUFSJ]FSRw@BS@O@M?KAK?E?KAIAWC[AS?KIKAe@AOCm@?C?AAMHAJAVEn@OHAEO?AGUg@gBAGQsACQEm@Ew@AGACAECCYM]Kq@QcAWeAW?g@GoD?w@CAACeA{@Ai@EAaAGo@IMAwAOk@KMAMCSCi@I[EeAUYEi@Gg@GUCyASOABIPg@n@gCRs@H[H[^}APsALiABWBs@B[@O?I?EAi@Aa@EcAAs@A_@IoA?OA[BM?GAAkAc@WMgAc@k@UGAQGu@YICWI[MOEUIa@McAa@c@OUGKEg@OYKEAAAOEUGQGk@QQEAA[KICYK_AYYKc@OGCICo@Ui@QKEEA}@[e@Oc@OWISIYIcA]aA[oAa@qAa@QISGGCFGLSBG?ECY?A?IImAC]A[?A?AGaAAM??Cq@qB}AbAuAUy@GICAs@e@GEuAu@EFCDKDA@C@CO?AGSACISAEEIIOOYCEIKOUU]EEACCCIKGKCCMQOUEEQWCCSWSWCDCFYj@A@[r@gDq@oBa@aBa@sDu@w@Oq@OgBa@w@OYGKCuA[m@KHq@@GN}@D?D@FCD@F@AGAK?ECI?KAMC{@E{@K_AAKQmBM_BAIC_@AGK}AGg@Ce@AMCWEW?GEUEUYaAIUAEM_@EMOi@GUUy@I[KYCKK_@IYEOEKGUCECCAAEAEAOAG?C?c@C[A_AE{@Cg@AG?e@CSAA?C?GAK??G?E?Q@M@GBGFIDGRUT]NYN]DCHG@I@C?A@C?E@GB[@M@QD}@Ba@@k@Dq@?E@Q@M?IB[@WD}@BU@OBk@NcBH{@@MDYD]D_@Hq@Do@BWBMBS@IBKDc@@M?E@O?G?GAICKAICOEQu@oDGUESEOEMCIAGCGKWM]GMEIEIEKEKCGCKCGAKAK?MAS?M@M@KBI?ADGHIDCHGJCFCDCBCFEDEHKt@m@FGLKNQJGJIFEJGHEHEFCBATK\\MLEHCHAPCLAP?TAHAHCVIJGPKTQRKRGAE?G?C?A@C@CKUCSACCQ?GEU?E?KAY@GBKCc@AQAMC[AOCOMu@CMMk@CSACCOCQ?C?CCSSaDUg@AAIIEEKKOK]QGCm@WIESIYKIGKEKGMIKGEEGG]]CEMOGKi@k@SUGG?Km@q@MMcAkAAAEEEGGOCEIQQe@EMACACI]I]EOKa@Ic@Kq@AEAw@@u@HgBL_CJoB?[AQ?EAQCSIYIQUg@Ue@EGO_@EOCIAAI_@@aA@a@Dc@FUPw@FWH]La@BOPg@DMJ]F]@Q@iAD}@?_@AMAWO}@Mq@Kg@Q{@EUG[G[Ia@Ou@?AKe@G]EUDMCKe@SOEOAQCi@Iu@Ui@QEC_@K[I]MOCGESAICK?K?E?]@A@G@A?I@C?C?EAA?CCAA?C?E?C@EQ?m@Bi@B_@BI?Q?aBFO@{@BC?cBDeADg@B[@q@BUBaAF@CDW@QF}@?uA?WAk@EaACy@?I?KAa@?K?[A{B@MBSFMN[TWNU\\g@T[HMFGNS]QGAg@QSKOGWOMIIGIG[SWSCCs@c@aAm@oAw@OKOIKI[YwAoAIGECaA{@kB{AGGIGII]Y[WMMIGEIAEBWLe@BSDK@Aj@wA@Gl@cBRg@LYBGFKFGPKPMPQNSP]Pm@Ja@HYH[\\wATw@HWLk@Ps@XcBL_AH_A?a@@y@AmAGaAASAIMgAE_@Mc@Kg@COAECCCACAGIEGAEMWGGQOMKMIw@q@MI{@q@m@a@k@a@SKUKSKA?KEOGCAC?AAEAIEEAMGSKOI[Qa@SmBaA[SIGECMIECCCOIYQc@Wa@WQIYQWOOKMIe@U}@g@SMQK{@g@s@c@WQMIj@sAp@cBJWTm@LYLa@JYDKPg@JYN_@r@iBFQHQ\\}@jA{C\\_At@kBBI@?h@}@Zi@Vc@HO\\k@Ta@Ta@NWDIr@qARa@LWBGBM?C?MAmAAMCi@IYEOUaAg@cCCGLEFEHCTK`@QCEEEGMEGIKs@o@uAiAAKAAAECCAECGyAmEM]yAkEOa@{@mCK_@EWAS@Q?EFYFONULQBErAcBd@m@\\c@xA_CXk@Zs@N]BGN[N_@X{@VcA@Al@eCSG[EOEp@mEHi@BOD[BWHu@?CEOCKACAK?C?I@M?G@EFq@@G@I@G^mDZuCD_@@IHaA@O@IVoBFe@Hk@^yCHy@T{B@IfAyI@OFc@NiAPsBBWF{@d@}C^sCJs@RaBj@{GRwBH{@NkD@Q?EBMJ]BQLeA`@aDVsBZ}CDSH_@Rw@BI@EJYBGFIHIROBARMJIVg@NORQNOb@URM^OLEVIVGNCLCVGRAJAXAXA@JArA?B?bAAz@Ch@`@?XAv@IGu@OmB?G@IDCRAnABR?N@d@DX@J@H@F?FAF?HE~@At@ETCPCPCb@KLENE~Ao@TKh@Uh@WZMj@Yf@Wb@Wj@[hBs@L?DCdDiB\\QTMv@a@f@Yz@e@bBkAzAkAhBiBtAoAHILKBEFGbA{@j@k@RU`@a@r@m@l@k@d@e@h@e@d@g@`@e@fAeAr@o@JK`A{@nB_BHGFGJIHG|@o@p@i@tAy@hAo@p@]b@URK|As@t@]bBs@DCl@WJEXMRIH_C?CAGAe@Cm@AQAO?MEu@Am@AQCg@Es@CcACSCIEEEAO?a@?M?I?o@?Y?OAW?C?UAG?IACAICIGGEEEIKIIc@g@]a@W[[_@EEsAyAi@o@MO]a@QQGMQYEIO[ISEIO?]CGAO?G?C@CHaBWEAg@OEAGA[IQCNk@KEYYGKU_@CEa@k@{@f@KFC@GJ_@n@KNS@C?ABAHD\\?FA@E@Q@k@NQBu@BiAAc@GkAIKFUHKGZOHCDE@A?A?C?W@o@BwABw@@IFENAVI`@I",
                "description": "SEDAN 15"
            },
            {
                "vehicle": 4,
                "cost": 7775,
                "steps": [
                    {
                        "type": "start",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 20,
                        "load": [
                            1
                        ],
                        "description": "190, F",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 4,
                        "load": [
                            2
                        ],
                        "description": "182, F",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 2,
                        "load": [
                            3
                        ],
                        "description": "181, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 36,
                        "load": [
                            4
                        ],
                        "description": "198, M",
                        "distance": 0
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397244,
                        "duration": 2644,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8919434,
                            77.6182305
                        ],
                        "location_index": 1,
                        "id": 1,
                        "load": [
                            3
                        ],
                        "description": "181, M",
                        "distance": 15820
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397803,
                        "duration": 3203,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8715901,
                            77.6155747
                        ],
                        "location_index": 18,
                        "id": 35,
                        "load": [
                            2
                        ],
                        "description": "198, M",
                        "distance": 18496
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398865,
                        "duration": 4265,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8424657,
                            77.6462378
                        ],
                        "location_index": 2,
                        "id": 3,
                        "load": [
                            1
                        ],
                        "description": "182, F",
                        "distance": 24998
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688399300,
                        "duration": 4700,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8479159,
                            77.6528024
                        ],
                        "location_index": 10,
                        "id": 19,
                        "load": [
                            0
                        ],
                        "description": "190, F",
                        "distance": 26862
                    },
                    {
                        "type": "end",
                        "arrival": 1688402375,
                        "duration": 7775,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 51318
                    }
                ],
                "service": 0,
                "duration": 7775,
                "waiting_time": 0,
                "priority": 0,
                "delivery": [
                    4
                ],
                "pickup": [
                    4
                ],
                "distance": 51318,
                "geometry": "{|enAia`yM????????a@HWHILEF?H?h@EvA?l@?@?V?DADCBGFjAHb@FhA@t@CPCj@OPADA@A?GE]@I@CB?RAJO^o@FKBAJGz@g@`@j@BDT^FJXXJDOj@PBZHF@D@f@ND@`BVBIBAF?N?F@\\BN?DHHRNZDHPXFLPP\\`@LNh@n@rAxADDZ^VZ\\`@b@f@HHHJDDFDHFHBB@H@F?T@B?V?N@X?n@?H?L?`@?N?D@DDBHBRBbADr@Bf@@P@l@Dt@?L@N@PBl@@d@@FFHb@d@^b@r@]xA{@p@_@HEJG|@i@xBsAVOd@Y~BwALIzBmABCnBiAD^?BDHEl@K|AAFIfAIzAAPAPAJC\\C\\?HK~AIpAKzAATALAVKtAe@jG?L_@zEATCl@MrBO`CKhAO~A?DMfAMx@EXO`AQdAEXrA^RDXHn@Nt@RzAb@f@Pj@TXLFBNHNAJD^RNFXLVJTHN@f@AVAdAIHAn@AH?~@???z@Nl@RX?J?d@C@?pAGjAK@?f@EhA?\\Dv@FJ?~@HB?dADXBT@RLl@@H@H?D?Ah@CXCt@CPA^AJIdAGhA?LCd@ANCb@CVE`AIfAANARGdA?DADAVAPEj@AVCb@C`@?BC\\Ez@KpAEnAEt@?JALEz@CFAPCf@A@APAPANDRDNHHlCXVB`@DPB\\FT@~@Bt@Fl@JBBBDJ?ZD`@?@?h@AhAGXAl@Aj@?l@@P?J?v@?\\@p@@lDJF@Z@d@BN@L@LBhAd@bBt@`@PHDp@ZZNJDb@T\\Pt@`@d@V@?VNLFPHPHn@XZLh@RfAb@\\FXBN?NAXELCVGXMZUZ[RS`@g@z@aA`@e@\\_@NMTKd@ORGd@E@?^?h@BZFZJVL@@\\Nx@`@\\PVLd@VLFd@TFDr@\\@@z@d@h@VTLnBbA`Ah@b@TPJ^Rd@T\\RVLn@\\TLh@XfCpA^RbB~@LFPH\\PNH`@Tv@`@n@^??f@XPJ`@XXT@@ZXPTBDb@h@Vb@NVFP@@DJBHJTHX@BFNH^Lt@?@Hl@Bj@?Z?^@j@AB?l@At@?L?TEbC@d@?T?V@f@@j@@N@f@?L?h@?V?p@ANAdA?N?V?PBTBN@F@F@FH`@BLHXHVFRBJL^N^Vn@DJ^t@@BNZPTLTNRV\\DDFDDFBBDFHL`@\\NRLNTXNRPTX^Z`@PTPVb@j@j@t@PTT\\b@l@HJBELW@OJUTi@dAkBf@cALUVc@r@wAVWjAoAb@_@RSb@]f@]^YnCgBdB}@bCeA^KLEXG\\EXCFAFAX@L?R?X@bAF|BP|@HpBRpF^ZBJ@pBJz@H\\Ft@VFHbAb@TJDODOBIHYFWBIFU@E@MLFFLLVJTFTFv@RvAPlALhABTHh@Jv@Jp@L|@VlBHn@Db@Jn@RtAHn@Dh@D^Jj@Tx@@F\\f@v@hALPJTZp@\\t@LXJVJRd@dAh@hALXB\\FLBDBAjAg@fAk@r@_@PIt@a@JG^U@?NKTOz@o@VQp@e@z@i@JEj@[ZOhAm@PKJEHEHEDCDCDCDEHCDCFCBAHEHGPIpAm@FC~@c@~BgAv@_@bCkA^SZQZO~EgChAi@FEnBeAj@YhAq@XQdAi@|BkAHEFCzBoALGJGb@ShBaAdAi@^SfB{@p@]HEVM^SBBFJDDBDBBFJNHP^JR^d@VVBJFDFHRHVBTD^FLB`@Fv@NJ@l@Hp@FNBtAPJ@R@dANh@HV@DAGPB@IXCFELC?EPETANDTHXBLRr@Lh@D\\?D?DDj@?D@D@JDd@DJ@@?D@F@BBHFP@DDR@FH`@DT?@@DDNFDNFnBv@PFd@PB@jAd@ZNNH^Xx@h@nA~@LJFBJJTLf@XPJXP^RHBDBB@FBZHJ@ZDZFH@@@h@NXJTFj@NHB`@LNDB@@@PDXHHBTDZHB?JBJ@ZFH@RBRD\\FB?LBLDLFHFBDFDBDVPDBPF\\Lp@Vj@TNDPDp@NjB\\HBZFF@lAP|@LD?`ALD?HB@?F?j@FbALOxAADGz@?@\\DbDVIx@M`A?F?GLaAHy@JeABYFy@ZBBYDYDc@@CBEDCHAPAD?B?j@A`@An@Ad@?h@?X?v@@@?t@FB?j@HD@HBLBLB@?d@VDBf@b@HFNPb@ZNNBD?JlATB@TDPFTFDBRHPHNDJDRD@@t@LXFZDj@HH@D@t@LrCb@NBdAPF@H@F@d@HlANLBJ@XD\\JJDj@LXHD?`@Db@F^@L@\\BTAHAHAHAF?H?`@@B@XDTDNFFBf@Nl@PJBJD\\HvBn@TD^JHBHBFBLDRF`@LRH\\JJFf@J~@Fz@Dv@DJ@HBFDHDNHBBh@BD?jAFl@@F@hAF~@F@MFu@NsAP?fADn@Dv@B\\Bb@@fAFd@B`@BdAD|CL~BJrADB@P??lA?nA?d@?e@?oA?mAQ?CAsAE_CKJuAJy@Fs@Hq@@KB_@Di@@OBWBk@B{@Dw@Di@?CDcA@g@Ag@Is@COKy@KaAAIAEM{ACQEWAWDY?_@C[Qc@CKG_@AGGYGWGa@C]CYGSQUGQ?SD]@c@Cg@CcASOOIAONG\\MhAe@@?b@Sj@YdAg@DCFCJENInAk@bBu@`@UXOBCRKb@U^Q\\UZQ@Ap@c@BAVQ\\MNG^MVK\\M`@KZI\\K`A[ZK\\MXGn@O|@Sl@MfA[f@Y`@]LMFGDCFGXSFGDCFGNMDEHIRUXOl@[\\MJCTKLGVKn@Wh@YHEb@Ub@UDCHEDE`@UXQn@_@t@[BAVOr@_@t@g@h@_@`@Wx@i@HEz@s@BC\\WLE`@G|@KLCHARERKPQPUN_@h@{ADMRm@Pi@FUFS?EF_@?M?OD]L[LOVKXINEj@Ql@GNCF?VC^I\\IXK@ALE`@QPMFELKLONEx@EHCHGDIDMDKBIDEBCDCJERE^KFIJK@AFIJEJA~@AZ@R?B@h@Dt@FP@l@DZ@|@DD@h@Fb@BdBFbBLbAFZDJ@^H`ARD@l@Lz@NTFnAR\\?F?F?F?F?rADD?bABX?|CHhABh@@H@nBF`A@~AEfAGp@ARAV@THPFTJLFx@Zx@\\h@Pf@NrAb@VHEIOc@EUAG@q@H}@@KJu@Hk@@GDa@D[D]BOFe@@GLsA@UJs@NmABYZmCDWPsAX_CRwA@CL_AJ{@Bc@@ICg@Ie@Ss@UcA[mAAEYkAAGAGOi@Sy@WeAJ?J?n@?\\@r@Bx@Br@B`@@D?L?h@?J?@WB]@[Ai@Ae@Mg@Oe@GUEECMCs@Bw@?GO?uAEtADN??FCv@Br@BLDDFTNd@Lf@@d@@h@AZC\\AVK?i@?M?E?a@As@Cy@Cs@C]Ao@?K?K?Me@Wm@M[Yo@Q[Sa@]k@S[S]U_@Ue@Qi@Ss@Mg@M[KYIMOIMGOIMGOE_@IQEOEMCGAq@QCAQGKMIMGKGIKEYK]Ic@OA?OE_@IAASGOE_@OGEECEECIAEAC@E?K@CFYFc@H]DWD]@QBO@I?G@G?OCSEKAA~C@@cA?K@y@?I@eABiA@iA?eA?W@aA?M?OUAQ?U?Q?aCEW?I??Q@w@BkA?c@?]?Y?_@?UAe@E}@?UAc@o@BQ?aA@uC?A?_EM?w@@kA@kBNAEW?U@e@?]Bq@A}AZEJAxAORCtAGdBG@?p@C\\IbBu@d@SRIb@Qj@U|Ai@TI`@K|Ac@~@]p@[HEJQ?UMgBKqBS_ASa@AGAM@c@?IASC{@EwA@kADmE@S@oA@sA@{@?oB?[?U?MGI?EAEAcACw@Cm@Sa@CQY}AUaAWy@Ss@KYKU[aAMYsAaDUk@Sg@[m@KOEGOQOKGAE?G?E?M@E@KBIBWHKDMH]TQN[TsA|@e@\\eChB_D~BcCfBgCjB}AhAe@^kBrA_BlAg@\\y@n@eBnA{@n@{@n@o@d@kCjBk@^_@ToIjGOHeI`GyB`Bq@d@oA~@sCrBQN_Ap@_BjA{BbBwCvB{AhAYRcHjFwB~AoA`A{AfAaAr@uDlCeBnAsAbAEBMHEBEDEBGFOJsA`AuB|A{BbBwAdAuB|AYTMJk@d@qAdAwAlAu@h@kB`BYVyApA}@t@q@h@gA~@{@n@y@l@e@Xo@\\k@ZsDpBYN_EtBsBfAWLeFjCuAt@qHzDmDjBqCxAYNiFnCyAp@OJy@b@}Av@yDpB_CrAQHa_@tRch@jXgCrAaAh@QH}@f@wAr@A@uC|Ao@Za@ToAn@}FzCmAp@i@XqDrBe@Xi@V{Av@oCtAgB|@AFWL[Pu@^kAl@QJ_CjAsAr@OHE@iAl@q@\\u@^u@`@MFcAh@gAj@o@\\aB|@]PC@WN_@N_Ab@kAj@s@\\_CdAu@^QFIDeAf@OHGBC@IDKHKFEDE@IDEBWJYLiAn@[Nk@ZKD{@h@q@b@s@f@]XMHEBKHIDEBIDOJKFs@`@A?SJu@^eAh@kAf@A@A@GQCEGMUMKUKWO[EGCGSa@Ym@Qc@_@_AIQGKQa@GKcA{Aq@eAW}@Gg@Gc@Ie@Gq@Gq@Ku@OiAUaBW_CWeBGe@?CMeAEWIc@OmAMgAGe@Ka@M]IZCLCJCFSv@ABg@xAQf@M^[bAQf@[~@Ut@i@bBg@|AM^Wx@i@bBOf@Ql@GRAFYfAy@dCM^Oh@ELENi@`Be@|AKZGVENSGSGGCc@MA?k@Qm@Qu@SEAuAc@iA]OGKC[MKCWGm@O[KA?qA[OGwA_@}@WECEAgA[}@Yk@OWKYK[KSIWIMEQGICQEGCKC[MUIc@M_@O[IQIMEGCMGQIMKMGIGMKECSMQOQQWYIMMMIOU[m@y@_AoAGGMQEEGGCEEGMSW[QUQU]c@OSIKUYQUEEACKKCECCEEW_@c@k@IQU_@KWS_@O]M]IUEMCIEMEKCGESCGCGAGGSCOCKI[AIAMAKAOAO?O?K?K?Q@}@@U?s@?K?K?g@?EAm@AOAu@A]?A?W?a@AY@uB@[AU@u@@c@?KAm@?_@?M?KCi@Ge@?EEQEUCKI]EIAGIUCGAGGOCICEISMUYc@QWGIEGGGEGOQKKMMSO_@Yw@e@q@]u@a@s@a@[OSKqBeAa@U{@e@e@Ua@Ui@YWM[Ok@[]Se@Sq@_@MIUMaAg@eAi@KG]SGCMGSKUM{@e@UK_@SCAg@WQI{@c@[Sy@_@a@SUKYKWECAa@A_@@a@BQDe@NQJMJ[Za@d@_BjBo@n@_@V[N]HE@C@]DA?a@@]C_@IiAc@i@S_@OQISI]QQIKGICKGEC??a@Se@WOIECIGQI]OKGKGQIc@SWMUKIEcBs@o@YWKICKAM?g@C[AIAM?m@Cs@Cw@Cm@AE?_@Au@?A?_@?i@Ai@?m@@Y@iADm@B_AAI?W?c@?aBI]AKAUASA[E[AIAG?WEQAIAWGMCMAMCIAIAG?GAE?MAM?kA@KBIDMFEDCDCDADEL?V@VBLFLDFHFPFH@N?JCJEFGFIHOLS@a@@I@M@[@I?QBO@W@MBUBa@@I?C?ADi@?G@K@S@MBi@@K?I@QB_@@QD}@JoABe@Be@@Q@U@UB[@WBk@@OB_@?EHeA?A?MDm@@IBc@FaAB[B]@OBg@?MFiAHeA?GDu@Du@BaAIAm@AWDSA[Ci@Ca@CIA{@Ia@Eu@GiAAg@Dq@FcBNO@[BQA[Ck@Mq@OC?eA?i@?G?S?kAJM@_@@u@KWIWK[QYMIEEOOIGCYMk@Ug@Q{Ac@u@So@OYISEsA_@KCFYFa@Fc@Hc@F[DYWCu@Og@Ie@KD{@Dk@FaABi@UC{@G}@GDe@Ds@Dg@Ba@FmA@CDu@@O@SHw@w@GYAT{CBW@_@_AMs@?MAOGCASGMGFgA_@Ik@Kw@KC?{AOBg@Bm@@k@Aw@A_@?U?o@?E?CLw@H_C?CAGAe@Cm@AQAO?MEu@Am@AQCg@Es@CcACSCIEEEAO?a@?M?I?o@?Y?OAW?C?UAG?IACAICIGGEEEIKIIc@g@]a@W[[_@EEsAyAi@o@MO]a@QQGMQYEIO[ISEIO?]CGAO?G?C@CHaBWEAg@OEAGA[IQCNk@KEYYGKU_@CEa@k@{@f@KFC@GJ_@n@KNS@C?ABAHD\\?FA@E@Q@k@NQBu@BiAAc@GkAIKFUHKGZOHCDE@A?A?C?W@o@BwABw@@IFENAVI`@I",
                "description": "SEDAN 4"
            },
            {
                "vehicle": 5,
                "cost": 6396,
                "steps": [
                    {
                        "type": "start",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 34,
                        "load": [
                            1
                        ],
                        "description": "197, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 28,
                        "load": [
                            2
                        ],
                        "description": "194, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 18,
                        "load": [
                            3
                        ],
                        "description": "189, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 26,
                        "load": [
                            4
                        ],
                        "description": "193, F",
                        "distance": 0
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397021,
                        "duration": 2421,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.901208,
                            77.6452628
                        ],
                        "location_index": 13,
                        "id": 25,
                        "load": [
                            3
                        ],
                        "description": "193, F",
                        "distance": 13567
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397609,
                        "duration": 3009,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8811382,
                            77.64938389999999
                        ],
                        "location_index": 9,
                        "id": 17,
                        "load": [
                            2
                        ],
                        "description": "189, M",
                        "distance": 16562
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398006,
                        "duration": 3406,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.874665,
                            77.6419787
                        ],
                        "location_index": 14,
                        "id": 27,
                        "load": [
                            1
                        ],
                        "description": "194, M",
                        "distance": 18881
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398947,
                        "duration": 4347,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9202474,
                            77.6205428
                        ],
                        "location_index": 17,
                        "id": 33,
                        "load": [
                            0
                        ],
                        "description": "197, M",
                        "distance": 25660
                    },
                    {
                        "type": "end",
                        "arrival": 1688400996,
                        "duration": 6396,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 37654
                    }
                ],
                "service": 0,
                "duration": 6396,
                "waiting_time": 0,
                "priority": 0,
                "delivery": [
                    4
                ],
                "pickup": [
                    4
                ],
                "distance": 37654,
                "geometry": "{|enAia`yM????????a@HWHILEF?H?h@EvA?l@?@?V?DADCBGFjAHb@FhA@t@CPCj@OPADA@A?GE]@I@CB?RAJO^o@FKBAJGz@g@`@j@BDT^FJXXJDOj@PBZHF@D@f@ND@`BVBIBAF?N?F@\\BN?DHHRNZDHPXFLPP\\`@LNh@n@rAxADDZ^VZ\\`@b@f@HHHJDDFDHFHBB@H@F?T@B?V?N@X?n@?H?L?`@?N?D@DDBHBRBbADr@Bf@@P@l@Dt@?L@N@PBl@@d@@FFHb@d@^b@r@]xA{@p@_@HEJG|@i@xBsAVOd@Y~BwALIzBmABCnBiAD^?BDHEl@K|AAFIfAIzAAPAPAJC\\C\\?HK~AIpAKzAATALAVKtAe@jG?L_@zEATCl@MrBO`CKhAO~A?DMfAMx@EXO`AQdAEXrA^RDXHn@Nt@RzAb@f@Pj@TXLFBNHNAJD^RNFXLVJTHN@f@AVAdAIHAn@AH?~@???z@Nl@RX?J?d@C@?pAGjAK@?f@EhA?\\Dv@FJ?~@HB?dADXBT@RLl@@H@H?D?Ah@CXCt@CPA^AJIdAGhA?LCd@ANCb@CVE`AIfAANARGdA?DADAVAPEj@AVCb@C`@?BC\\Ez@KpAEnAEt@?JALEz@CFAPCf@A@APAPANDRDNHHlCXVB`@DPB\\FT@~@Bt@Fl@JBBBDJ?ZD`@?@?h@AhAGXAl@Aj@?l@@P?J?v@?\\@p@@lDJF@Z@d@BN@L@LBhAd@bBt@`@PHDp@ZZNJDb@T\\Pt@`@d@V@?VNLFPHPHn@XZLh@RfAb@\\FXBN?NAXELCVGXMZUZ[RS`@g@z@aA`@e@\\_@NMTKd@ORGd@E@?^?h@BZFZJVL@@\\Nx@`@\\PVLd@VLFd@TFDr@\\@@z@d@h@VTLnBbA`Ah@b@TPJ^Rd@T\\RVLn@\\TLh@XfCpA^RbB~@LFPH\\PNH`@Tv@`@n@^??f@XPJ`@XXT@@ZXPTBDb@h@Vb@NVFP@@DJBHJTHX@BFNH^Lt@?@Hl@Bj@?Z?^@j@AB?l@At@?L\\Md@QTIVKZMp@[BAPKVWFGLKd@m@PSHKTYh@k@DET[LOFGFCHAF?DR@H@H@BBV@b@p@CB@BB?R?PCXCd@CV?BAP@DDBF@f@Db@DNBXBL@D?BCt@w@j@o@b@c@DGh@i@\\Np@Z`@NVJNDB@JBJBF@H@N@VBL@r@FTBx@Jj@Dp@HH@@@`@c@zA_BJAJ@JBF@BBB?@@B@DBDBHFHDFDFBdA^LFh@TF@Hg@HSFQTi@Te@Pe@Rg@Rg@Tk@lAcDTm@rAcDDGHINMf@e@j@m@TUNOBCFCF?F?D?B@d@BRBP@hBP~AN|@HJJN@RBF?B@B?BEBE@EHQDELYRYN_@DGFMHQRWNUL_@X}@HWDKBKDOFUFO?ADOTu@FWBID@DB\\HNAJBp@TZLB@j@RNFNFbA^D@l@V@@n@ZTHRJVJNDF@b@JD@B?@@J@`@HNBlAVNDJ@XDVBJ@`@D\\Dn@?J@B?z@@d@@r@BzBBP@lA@V@n@@|CF@?N?T@FAL@F?F?F?H?D?F@B?D?@?F@D?F@F?V?rABb@?T?V@L?^@J@bBAf@?bA?bA?P?P?t@@XLP?J?p@@fA@n@?lBB`A@l@@P?zA@~A@@iAxD@@}B~ABB?H@H@JBJFHFPLTHZHH?p@Br@BB?`@@L?H?H@T@B?J?T?Z?Z}@b@WNO`@u@j@cADGl@_Av@qAR]LWFI\\k@`@w@`@s@|@yA|@}AXg@LSBG??P]BEj@cA`@u@fAmBpA_Cn@sAT?J@P@F?G?QAKAU?h@kAd@w@h@{@Xa@V_@RY^_@f@_@PI^OVIb@QJIJOHQBS?cE?MAMCICGEMIQEEY_@CC?C@E\\gAHWDMTq@FSDK^mARm@La@Tu@H@L?R?bA@Z@X?P@R@v@B~@F^BR@R@dAD^@L@`@BJ?\\@h@B`@@h@BL?|@DD@|@LZDt@BjCFFN@@@DJPDDLRHHHFFDLFFDr@\\`@TlAj@~@`@zAx@nAb@LDL@FAd@Q`@UVMDETORMh@[XE\\@h@JLDWr@K`@l@@b@?@?v@@^@D?L@B?H?FANALE@?VQVQTQLKDCDCPITCR@`@DL@H@D?N@F@h@BR@z@DP@J?^BJ?P@D@l@BbAFF?jAFD?jADdBC@?x@ED?TCXMXQVUHIJKTWBCJWBCDMtA^PFf@N^LVHb@LZFHB`@Np@RB?H@\\@V@n@BNBJ@LBRBLAVA^@RFNHRRJNHJRPHBD?\\@Z?TDHBb@LPBd@FXJH@ZDj@J?@@\\FVNXBDT`@DFd@v@@D\\Lz@g@v@m@j@a@ZWDCDEBCDClAeAPOLKNMNMxAqA`@_@VUDHBDl@k@fB{APOrAiA~AqAHHFFDD}AnAYTcAx@}@v@{BlBCBe@^FHBDRnAH^LdABNJn@RdAXlB@FTpAVlAT~ABPJp@@@@HFl@B`@@T@l@@`@FtB@TDj@DZ@X?`@CZYfAADCLCJiA@sA?rA?hAABKBM@EXgAB[?a@AYE[Ek@AUGuBAa@Am@AUCa@Gm@AIAAKq@CQU_BWmAUqAAGYmBSeAKo@COMeAI_@SoACEGI{ArAIF_CrBsB~A_@V{@j@SLc@T_B|@IDg@X_ClAc@TqAn@e@VaCnAGBmAn@iCrAoCtAe@Vs@`@wAt@eB|@g@XQJqBdAyAt@MFJPsAn@qCxAkAl@u@^QNMFULo@X{At@ID_@Rw@`@AQYNi@ZIDIDa@VSJSJSLOHC@MFWNWJ_@RMFo@Xk@ZC@i@XA?MF_@Rm@Z]R}@b@m@Za@TKDm@Zm@\\c@TIDe@VGBSJYN}Ax@m@Zm@\\s@^m@ZKFGFGBYNYPYNu@\\QJMFEBEBYNy@b@WJEBOHKFGBGBQH?@OHQJIDIFwAr@e@VUJIDw@b@[Pg@VuAp@g@Vm@\\GBy@b@MFID}Ax@OHo@ZmAn@uAt@QJSLSJqAv@_Bx@QJu@^g@VULe@TSJo@\\i@VWNULa@RGBk@Zs@^y@`@QJQJe@Rg@Zc@TYLGD_@PIDa@Ta@TGBYNi@ZSLuAt@a@Xk@Zi@Va@TcBx@o@X_@T_CjAWL[Pu@^kAl@QJ_CjAsAr@OHE@iAl@q@\\u@^u@`@MFcAh@gAj@o@\\aB|@]PC@WN_@N_Ab@kAj@s@\\_CdAu@^QFIDeAf@OHGBC@IDKHKFEDE@IDEBWJYLiAn@[Nk@ZKD{@h@q@b@s@f@]XMHEBKHIDEBIDOJKFs@`@A?SJi@XKDeAh@kAf@A@A@GQCEGMUMKUKWO[EGCGSa@Ym@Qc@_@_AIQGKQa@GKcA{Aq@eAW}@Gg@Gc@Ie@Gq@Gq@Ku@OiAUaBW_CWeBGe@?CMeAEWIc@OmAMgAGe@Ka@M]IZCLCJCFSv@ABg@xAQf@M^[bAQf@[~@Ut@i@bBg@|AM^Wx@i@bBOf@Ql@GRAFYfAy@dCM^Oh@ELENi@`Be@|AKZGVENSGSGGCc@MA?k@Qm@Qu@SEAuAc@iA]OGKC[MKCWGm@O[KA?qA[OGwA_@}@WECEAgA[}@Yk@OWKYK[KSIWIMEQGICQEGCKC[MUIc@M_@O[IQIMEGCMGQIMKMGIGMKECSMQOQQWYIMMMIOU[m@y@_AoAGGMQEEGGCEEGMSW[QUQU]c@OSIKUYQUEEACKKCECCEEW_@c@k@IQU_@KWS_@O]M]IUEMCIEMEKCGESCGCGAGGSCOCKI[AIAMAKAOAO?O?K?K?Q@}@@U?s@?K?K?g@?EAm@AOAu@A]?A?W?a@AY@uB@[AU@u@@c@?KAm@?_@?M?KCi@Ge@?EEQEUCKI]EIAGIUCGAGGOCICEISMUYc@QWGIEGGGEGOQKKMMSO_@Yw@e@q@]u@a@s@a@[OSKqBeAa@U{@e@e@Ua@Ui@YWM[Ok@[]Se@Sq@_@MIUMaAg@eAi@KG]SGCMGSKUM{@e@UK_@SCAg@WQI{@c@[Sy@_@a@SUKYKWECAa@A_@@a@BQDe@NQJMJ[Za@d@_BjBo@n@_@V[N]HE@C@]DA?a@@]C_@IiAc@i@S_@OQISI]QQIKGICKGEC??a@Se@WOIECIGQI]OKGKGQIc@SWMUKIEcBs@o@YWKICKAM?g@C[AIAM?m@Cs@Cw@Cm@AE?_@Au@?A?_@?i@Ai@?m@@Y@iADm@B_AAI?W?c@?aBI]AKAUASA[E[AIAG?WEQAIAWGMCMAMCIAIAG?GAE?MAM?kA@KBIDMFEDCDCDADEL?V@VBLFLDFHFPFH@N?JCJEFGFIHOLS@a@@I@M@[@I?QBO@W@MBUBa@@I?C?ADi@?G@K@S@MBi@@K?I@QB_@@QD}@JoABe@Be@@Q@U@UB[@WBk@@OB_@?EHeA?A?MDm@@IBc@FaAB[B]@OBg@?MFiAHeA?GDu@Du@BaAIAm@AWDSA[Ci@Ca@CIA{@Ia@Eu@GiAAg@Dq@FcBNO@[BQA[Ck@Mq@OC?eA?i@?G?S?kAJM@_@@u@KWIWK[QYMIEEOOIGCYMk@Ug@Q{Ac@u@So@OYISEsA_@KCFYFa@Fc@Hc@F[DYWCu@Og@Ie@KD{@Dk@FaABi@UC{@G}@GDe@Ds@Dg@Ba@FmA@CDu@@O@SHw@w@GYAT{CBW@_@_AMs@?MAOGCASGMGFgA_@Ik@Kw@KC?{AOBg@Bm@@k@Aw@A_@?U?o@?E?CLw@H_C?CAGAe@Cm@AQAO?MEu@Am@AQCg@Es@CcACSCIEEEAO?a@?M?I?o@?Y?OAW?C?UAG?IACAICIGGEEEIKIIc@g@]a@W[[_@EEsAyAi@o@MO]a@QQGMQYEIO[ISEIO?]CGAO?G?C@CHaBWEAg@OEAGA[IQCNk@KEYYGKU_@CEa@k@{@f@KFC@GJ_@n@KNS@C?ABAHD\\?FA@E@Q@k@NQBu@BiAAc@GkAIKFUHKGZOHCDE@A?A?C?W@o@BwABw@@IFENAVI`@I",
                "description": "SEDAN 5"
            },
            {
                "vehicle": 6,
                "cost": 7368,
                "steps": [
                    {
                        "type": "start",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 24,
                        "load": [
                            1
                        ],
                        "description": "192, F",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 16,
                        "load": [
                            2
                        ],
                        "description": "188, F",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 12,
                        "load": [
                            3
                        ],
                        "description": "186, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "id": 22,
                        "load": [
                            4
                        ],
                        "description": "191, F",
                        "distance": 0
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688396264,
                        "duration": 1664,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9638686,
                            77.7091384
                        ],
                        "location_index": 11,
                        "id": 21,
                        "load": [
                            3
                        ],
                        "description": "191, F",
                        "distance": 10161
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397712,
                        "duration": 3112,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9334552,
                            77.7479798
                        ],
                        "location_index": 12,
                        "id": 23,
                        "load": [
                            2
                        ],
                        "description": "192, F",
                        "distance": 18115
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398765,
                        "duration": 4165,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9853422,
                            77.75951669999999
                        ],
                        "location_index": 6,
                        "id": 11,
                        "load": [
                            1
                        ],
                        "description": "186, M",
                        "distance": 25094
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688399779,
                        "duration": 5179,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            13.017728,
                            77.762081
                        ],
                        "location_index": 8,
                        "id": 15,
                        "load": [
                            0
                        ],
                        "description": "188, F",
                        "distance": 30749
                    },
                    {
                        "type": "end",
                        "arrival": 1688401968,
                        "duration": 7368,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 0,
                        "load": [
                            0
                        ],
                        "distance": 49650
                    }
                ],
                "service": 0,
                "duration": 7368,
                "waiting_time": 0,
                "priority": 0,
                "delivery": [
                    4
                ],
                "pickup": [
                    4
                ],
                "distance": 49650,
                "geometry": "{|enAia`yM????????a@HWHILEF?H?h@EvA?l@?@?V?DADCBGFjAHb@FhA@t@CPCj@OPADA@A?GE]@I@CB?RAJO^o@FKBAJGz@g@`@j@BDT^FJXXJDOj@PBZHF@D@f@ND@`BVBIBAF?N?F@\\BN?DHHRNZDHPXFLPP\\`@LNh@n@rAxADDZ^VZ\\`@b@f@HHHJDDFDHFHBB@H@F?T@B?V?N@X?n@?H?L?`@?N?D@DDBHBRBbADr@Bf@@P@l@Dt@?L@N@PBl@@d@@FFHb@d@^b@r@]xA{@p@_@HEJG|@i@xBsAVOd@Y~BwALIzBmABCnBiAbAm@h@[j@]d@YrAu@PMlAw@JGdAm@t@a@pAw@XQ|@c@fBcAJGfBcAfAw@TMd@_@TQRODEp@q@t@u@fA}@NE@?TI`@GZCt@ILAb@?PAP?D?J?PIhA@H?^?\\?F_@BYFaABa@@e@Be@BWBiAD]H[@M@q@F_EHaC?_@DeBB_A@g@@Y?EBU@O@MJkADe@Js@Lu@H_@VaAn@mBDORm@JWNc@La@j@eBRa@N]j@{A?Al@}AN_@DId@oAl@wAL_@Xu@Tk@^cANa@DIL[L]^eANe@BI@EDI@GDMH_@Dc@Ba@?[AOCqACu@IiBE}@AYG?eCJ?k@A[EgAKqBKgCIuBEaACq@IeBA_@G{A?EGiB?GCc@KsACo@PANAd@CF?NAVCD?AI?CMoASqBK{@CUGm@AIIq@AKAGAOEa@g@_FG{@OyAQcBMoAIo@CSMgAIo@CYEa@AMCUCYKoAGg@UqBQkBMmASwBE_@I_AAKCa@AIGa@EYAWAMCWCYA[Cc@?[?WBs@@i@Bo@Bo@By@@C@o@?K?I@G?I@G?G@G@W@M@O?K?Q@S@a@Bu@Bo@@WB_@@U@KB_@AO?G?C?O?A@mAFwBBe@@U?I@M@[XyH@o@@Y@S@YBg@FaB@k@@U@c@DiABa@@Y@O?G@Q??@I?EBS@IBU@I@G?O@[@K@]BeA@}@FwC@SFgBLwDDaAEO?YFcEHiAGCKBg@OQDGB_@L??A?iAVg@JODuBb@SF]Fk@LC?A@_APE@QFOL]D_AJy@H]DaAJQBq@FQB_DZQ@k@FE@gALyC\\SBm@FmANwBVv@lHXvCB^uAPLjAJfAT|BU}BKgAMkAtAQC_@YwCw@mHvBWlAOl@GRCYsCIaAKaAKcAzAOtAM`@ELAVCd@Gd@Ex@KYqDAOBi@kAM@Mr@FfBPr@FH_C`AB|@BfADzADBs@B_A?MDcDDiCBoB?C@i@?qEB_B?}AL@|CHbCBv@?|ADT@hCN?S?_@As@?q@Aq@Ac@?Q?e@?g@?G?_@?YAU?E?Y?KAiA?S?{@?MAuBAc@?s@AcB?UIuB?uAEsBA_@?]IuDEuACq@?[AKAWA_@A[Eu@SyDGy@M{AWyCGm@Ca@MiACW[sDMmAIw@C]Iy@ImAAq@?U@w@@y@@w@?u@@aA?Q?K@M?I?_A@s@?Q@c@Ac@?[A_A?a@?Y?W?G?]?m@?{@?m@?{@?S?G?gABo@@s@?u@Bq@H_@Hm@F[Ls@BSBU@S?O?O?OCUCIGOEMISAECMACAC?E@EBEBEBCDAF@FBFBJFFDJHFFFDBFBF@DBFRd@FLHJFHHFJHv@\\v@\\HDRDPDPBV?^BVFZFP?H?H?LABAXGRATAZBD?PDJBHBZPLBJDP?PCJCb@M^GVETEZKd@Y`@Md@Mh@Kx@O\\Eb@Kd@GXEPARAZEVE\\KXMTKZGd@G`@CVEVEJILMHMLODCDELGJCb@Kv@YfAUbA[`A]RGTCH?F@NANA@?HAHCLGJIJKNQPQXQl@YXO^EH@P@x@BdBFZ?`AEh@CtACv@?B?zA?D?fACpAAD?r@EfAEZAf@EvBKRCd@CLGB?ZKl@KHALCNAh@Az@FDBFBf@Tl@VFFFJFHDDLJNR`@b@LUPk@BI@EJSDQf@eBP{@Je@RaABMv@OXI^EB?^Ej@Ap@?H?p@?B?F?j@BH@l@FXBz@DB?v@Df@@\\@l@Br@Bp@Fq@Gs@Cm@C]Ag@Aw@EC?{@EYCm@GIAk@CG?C?q@?I?q@?k@@_@DC?_@DYHw@NCLS`AKd@Qz@g@dBEPKRADCHQj@MTa@c@OSMKEEGIGKGGm@Wg@UGCEC{@Gi@@O@MBI@m@J[JC?MFe@BSBwBJg@D[@gADs@DE?qA@gABE?{A?C?w@?uABi@BaAD[?eBGy@CQAIA_@DYNm@XYPQPOPKJKHMFIBI@A?O@O@GAI?UBSFaA\\cAZgATw@Xc@JKBMFEDEBMNILMLKHWDWDa@Be@F[FUJYL]JWD[DS@Q@YDe@Fc@J]Dy@Ni@Je@La@Le@X[JUDWD_@Fc@LKBQBQ?KEMC[QICKCQEE?[CU@S@YFC@M@I?I?Q?[GWG_@CW?QCQESEIEw@]w@]KIIGGIIKGMSe@CGAECGCGGEGGKIGEKG@FBFAHAFC@G?G?GAEAGCACACs@_@WKOIYKGAs@UMGqAg@w@[yAo@OI_@OWMgBw@_@OECaDuAg@SICCAC?KAK?G?_@AK?SEKAMCm@Mo@M_B_@YGMCWGIA_@Ki@Mo@OKCc@K[Gq@OQEc@Ik@Mg@Ka@IOC_AUq@Oa@IOE[GMCs@Os@QYEMEi@Iq@Me@IKAIAs@OMAKCMCM?MAi@Ga@EUCgBS_AI_AGWAK?QCkAIy@G}@ECA_BIy@Ga@AeAIo@Eu@Eu@G]CMAK?KAKAQAKA??eAKKAc@Es@GWCAAKAc@EsBUE?s@Ku@KuDe@@KT}EDmAJsABe@Dk@JaAJ{@Lg@BoE@KBe@BeA@W@q@?K?O?Q@s@A[AYyBYQCsAOoAO_@EcFk@c@EMAwAMc@GG?k@GeBO{@MMAKCGAWC}B[IAIAe@IsJcBeASi@K{@SHi@KCJBIh@e@KiMmC[CQ?IBGDGBKNGJGJGDG@I?wJkB}AYkCe@kAUWEoAUGCqBc@o@M_Dq@cC[uAOm@IWCM?GKAKDw@D]TaBHa@HcADa@@OFwA@O?k@@q@P_C?CDm@FwA?CFqALw@DQDSHm@HEHAlDN?K{CQ]CE?[Ee@Go@EE@CDADAFCr@ChAOrDAJIhAQzBCVKx@AJAJADAJEHG@}@IqAKGt@GpAIlAEv@I~@AJK`BATEXk@bEBPDPz@Fz@FFBFFBF?L?@?F?X_@`ECP?R?F?D???@A???SE[Eg@B[BG@{AV]D[BuBXC?A@G?_@Di@Fg@FaALyARA?A?A?A?s@Hk@HE@KCQBUDWBG@iANi@FC@m@He@FaC^M@s@Jq@D]Di@FgANa@DM@_BLM?mAAG?[?_@AYCs@Kg@IkA[IEs@]Y]mCsA]OgAm@g@Ue@SuCoAc@Sm@[e@Ug@Uc@SWMe@SKGYMc@S[OOGOG]OUOi@WYMWGcBy@m@YmAi@_@Q_Bc@UK_@MUIeB]kAWo@K]Ee@Is@Ke@E]E_@CSCa@E_AIc@EcACo@E]AKAK?S?cBCS?OA{B@kBHoDNwBHYBK?M?I@Q@I?i@@c@BcDJ[@{BLy@D_AF_@@o@H}AXM@QDeB\\e@N{Ah@_Bh@SHOFe@ToAj@OFMDcAd@OFKDo@Xa@R{Ap@{BbAkAj@eA^o@Pq@L]Fu@Fo@D[@Y@S?iACw@EQAgBSyASyBg@yAWwASKCmBWoFw@g@G{AUSCmBYwB[s@KoC_@IAGAuFi@[Ei@?iA@M?qJf@aE?}HI}BM_ACWAe@Ek@pDkDjJ}@vCCTo@BW@YDy@BaAROF\\j@PZxA`Cf@z@NT`AtAPVr@hA`ErGjBvCpAtBn@bAbA~Aj@x@LRDHLP|@vAZf@zA`Cx@nAx@pAp@fAvBdDfBlClAnB`A|AxA|BNVl@`AxCrEfDdFl@~@lBzCjBtCb@r@d@t@h@|@^j@fAfBDJd@n@lApB^j@r@fAf@v@tAxB\\j@rAvBV`@h@z@j@z@zCxE~@xAjBpCl@`An@`Aj@~@FJNPdBpCT^t@lAXb@h@x@Vd@r@vAzAdDr@|AzAhD|@jBpArCTIx@hBLX`@|@HR|BfF@DnCdGXj@nAnCx@bBP^\\t@\\t@^x@HRdA`ClDvHFNR^`@x@t@dBZt@xAbDVh@pAtCp@xAT`@\\v@FHZl@Xl@zA|Cj@hAx@~Ad@`At@vAf@bA`@z@lAbCLVZl@KHGDIFKFGDIFVh@fAvBxBlEt@xAZl@`@t@pAhCZn@\\r@DAFAF?FARAL\\Zp@l@hBf@~Ab@lAp@fBf@hAf@`ARZl@n@lAdAfAp@ZPd@Rn@Vt@\\r@ZNFPHXLNHnAn@VLXNr@`@zAfAhAz@xAfAz@p@\\VJHf@b@b@ZVPp@l@FDRLDDZRh@b@d@^\\VZVHFR`@FNBJ@D@DB^@^AfD?bACjA?^?JDZBd@HfABV@RD\\BLBTBTJz@F`@Jz@VlBBRd@bDFVFZF^`@nA\\dAPh@p@~A`@bAl@xATf@Vn@LVh@jAz@hBVj@rAlC@Dl@nAfA~BzA~CvAxCLVbAzBtArC|@fB~AjDh@hAP\\|@jBZp@DJFLHRTb@N\\Vn@HPHNR`@@DZp@FLDJ^x@DHFPBDJXZdAL`@BJNf@JXZdARh@JVZx@n@bBBHFPPb@`@dAr@jBPd@N^DJf@nA\\`APd@l@`Bp@jBVp@L^FLBJBDBHBHDFBHLXhBzEPFBBFHHVFNJ`@DJBFZ~@h@fBPh@Nd@@BNh@DNBH@HN`@@DHTX~@@FDLTv@X|@J\\JXDLFT\\`AXt@HCFAVGt@OHAh@IHA@?@A`@EVCNCB?TCDAF?`@?NAx@BF@h@BRB`B?F@f@BR?J@dA?z@Ap@ATILIPEFAR?F?\\AT?^@f@@z@Bz@@pABt@?bAAr@Ax@EV?bA@h@@zC@DcA?CBcB@e@?K?A@_@?O@G?E@YBU@UJ@H@X@~@F\\Dv@FxAJd@D`AFL@l@F@@`@BD@n@H?GBMJMNONKNMTITC^?J?J@f@???D@LB@?BBB@B@@@@BBBDDDDDB@@D@FB@?F@P@F?B@V@\\AVEJAh@ITCv@QNGTQXg@FKBE?ADEDENGPC^G`@Gj@IVEXCRCTEv@CJ@@?FBZHXTPJHHB@Xf@Tj@X`@BDHJb@l@{@f@KFC@GJ_@n@KNS@C?ABAHD\\?FA@E@Q@k@NQBu@BiAAc@GkAIKFUHKGZOHCDE@A?A?C?W@o@BwABw@@IFENAVI`@I",
                "description": "SEDAN 6"
            }
        ]
    },
    "status": "Ok",
    "message": ""
}

The API returns 5 optimized routes, that will resemble the following visual representation.

optimized routes

If you want to visualize the optimized routing solution along with the sequencing of the stops, the NB.ai Optimization Tester tool is available at NB.AI MVRP Playground App.

Step 7: Optimize the Solution for the Furthest Employee

Our next objective is to set the furthest employee from the office to be the start location of the driver’s journey. This strategic approach minimizes each employee’s time spent in the vehicle.

We evaluate all employee groups created by the optimizer and determine the furthest employee by computing a Distance Matrix with the office as the origin and employee locations as destinations.


{
   "distanceMatrix": {
      "status": "Ok",
      "rows": [
         [
            [1708, 11042],
            [1543, 7877],
            [1707, 9481],
            [2254, 12440]
         ]
      ]
   }
}

We apply some basic logic by parsing the distance matrix output to pick the employee for which the distance is the furthest from the office.


{
   "furthestEmployeeStep": {
      "type": "pickup",
      "arrival": 1688394600,
      "duration": 0,
      "service": 0,
      "waiting_time": 0,
      "location": [12.978527, 77.665694],
      "location_index": 0,
      "id": 16,
      "load": [4],
      "description": "188, F",
      "distance": 0
   },
   "furthestEmployee": "12.978527,77.665694",
   "furthestEmployeeStepDrop": {
      "type": "delivery",
      "arrival": 1688399353,
      "duration": 4753,
      "service": 0,
      "waiting_time": 0,
      "location": [13.017728, 77.762081],
      "location_index": 8,
      "id": 15,
      "load": [0],
      "description": "188, F",
      "distance": 31217
   },
   "furthestEmployeeDrop": "13.017728,77.762081"
}

Step 8: Build the Problem for Each Employee Group

Now we build the  JSON objects that will be submitted to the MVRP endpoint for each employee group. We are as before building the shipments which each consist of employee pickup locations in the city region with the main difference that we apply the optimization to a subset i.e one single employee group. In addition, we set new constraints:

  • The driver start location is the furthest employee location to ensure the furthest employee is picked up first (for pickups).
  • The driver’s start location is the office (for drops).

{
   "OptimizationProblem2": {
      "vehicles": [
         {
            "id": 15,
            "description": "SEDAN 15",
            "capacity": [4],
            "max_travel_cost": 9600,
            "start_index": 4,
            "end_index": 5
         }
      ],
      "shipments": [
         {
            "amount": [1],
            "delivery": {
               "location": [12.9186116, 77.47650809999999],
               "id": 1,
               "location_index": 0,
               "description": "185, M"
            },
            "pickup": {
               "location": [12.978527, 77.665694],
               "id": 2,
               "location_index": 1,
               "description": "185, M",
               "time_windows": [
                  [1688394600, 1688395500]
               ]
            }
         },
         {
            "amount": [1],
            "delivery": {
               "location": [12.9613508, 77.5369594],
               "id": 3,
               "location_index": 2,
               "description": "196, M"
            },
            "pickup": {
               "location": [12.978527, 77.665694],
               "id": 4,
               "location_index": 3,
               "description": "196, M",
               "time_windows": [
                  [1688394600, 1688395500]
               ]
            }
         }
      ],
      "locations": {
         "id": 1,
         "location": [
            "12.9186116,77.47650809999999",
            "12.978527,77.665694",
            "12.9613508,77.5369594",
            "12.978527,77.665694",
            "12.978527,77.665694",
            "12.9186116,77.47650809999999"
         ]
      },
      "options": {
         "objective": {
            "travel_cost": "duration",
            "routing": {
               "mode": "car",
               "traffic_timestamp": 1688391900
            }
         }
      }
   }
}



{
   "mvrpID2": {
      "id": "b74660af05894efc27624334391ec506",
      "message": "Optimization job created",
      "status": "Ok"
   }
}

The reference id can be sent to the Route Optimization API to retrieve the optimized result.

API Request

curl --location --request GET 'https://api.nextbillion.io/optimization/v2/result?id=b74660af05894efc27624334391ec506&key={your_api_key}'

API Request

{
    "description": "MVRP Tutorial 2023-11-06T09:44:19.848Z",
    "result": {
        "code": 0,
        "summary": {
            "cost": 4869,
            "routes": 1,
            "unassigned": 0,
            "setup": 0,
            "service": 0,
            "duration": 4869,
            "waiting_time": 0,
            "priority": 0,
            "delivery": [
                2
            ],
            "pickup": [
                2
            ],
            "distance": 31088
        },
        "routes": [
            {
                "vehicle": 15,
                "cost": 4869,
                "steps": [
                    {
                        "type": "start",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 4,
                        "load": [
                            0
                        ],
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 1,
                        "id": 2,
                        "load": [
                            1
                        ],
                        "description": "185, M",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 3,
                        "id": 4,
                        "load": [
                            2
                        ],
                        "description": "196, M",
                        "distance": 0
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397892,
                        "duration": 3292,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9613508,
                            77.5369594
                        ],
                        "location_index": 2,
                        "id": 3,
                        "load": [
                            1
                        ],
                        "description": "196, M",
                        "distance": 20357
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688399469,
                        "duration": 4869,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9186116,
                            77.47650809999999
                        ],
                        "location_index": 0,
                        "id": 1,
                        "load": [
                            0
                        ],
                        "description": "185, M",
                        "distance": 31088
                    },
                    {
                        "type": "end",
                        "arrival": 1688399469,
                        "duration": 4869,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.9186116,
                            77.47650809999999
                        ],
                        "location_index": 5,
                        "load": [
                            0
                        ],
                        "distance": 31088
                    }
                ],
                "service": 0,
                "duration": 4869,
                "waiting_time": 0,
                "priority": 0,
                "delivery": [
                    2
                ],
                "pickup": [
                    2
                ],
                "distance": 31088,
                "geometry": "{|enAia`yM????a@HWHILEF?H?h@EvA?l@?@?V?DADCBGFjAHb@FhA@t@CPCj@OPADA@A?GE]@I@CB?RAJO^o@FKBAJGz@g@`@j@BDT^FJXXJDOj@PBZHF@D@f@ND@`BVBIBAF?N?F@\\BN?DHHRNZDHPXFLPP\\`@LNh@n@rAxADDZ^VZ\\`@b@f@HHHJDDFDHFHBB@H@F?T@B?V?N@X?n@?H?L?`@?N?D@DDBHBRBbADr@Bf@@P@l@Dt@?L@N@PBl@@d@@F?BI~BSHYLKDm@VEBcBr@u@\\}Ar@SJc@Tq@\\iAn@uAx@q@h@}@n@IFKHGFIFoB~AaAz@KJs@n@gAdAa@d@e@f@i@d@e@d@m@j@s@l@a@`@STk@j@cAz@GFCDMJIHuAnAiBhB{AjAcBjA{@d@g@Xw@`@UL]PeDhBEBELaAb@i@Po@X_@TqAp@[Ne@Tg@RGBq@XcA^QFKBODUFQBE?MBSB_@BQ?Y@m@@IGG?G@DHb@tAVx@@@\\hANb@BFNf@Pj@J\\Pj@Nh@BJZjADP@BDJDTLb@FTBJ@FDL@@FTLb@DR@FDNJVHVH\\L^HXDNFPJ\\J\\L`@FTDPBH@FJ\\J^FXBDDVDPBJDN@HDLBRPv@BNDJ@FFRJ^HLTv@H\\DJHb@Vr@@DFTNh@@FHTFXLf@j@vBJXXrANb@@JFNDT@NFXBP@PJp@Fh@Bd@BZBf@H`BBd@HzAFfB@`@Bn@D~@Db@Bj@Dl@Db@?BDP@JBBDL?@HPJVNTLT`@r@DHFJFHDDAH?FAR?FAJ@Z@X@T@PFv@B^?d@?t@?V?@Ej@ANAHIz@AHIh@Iv@??In@Gj@Ij@Gh@Gh@AHSlBCR?J?B?~@@N@TBl@Dh@?BBb@Bh@Bj@@H@`@Bf@@ND`A?D@b@?J?J@D?DBL@LBRBPH\\DLHTJPBDHJb@d@RTVVLLb@\\ZLZJdA\\jA^x@VXJNDVJFBF@JHLNNVDLFNDR@F@BBFBLDTFJHJFFDBHB\\NZHl@Rh@JXBX?F?Z?@?fACv@CV?N@L?FDL?B?L?\\?N?JDDB@D?JCDED[RCFc@VEBi@TQHi@VSFEB_@Ng@TQHe@RcAd@[LqB|@o@Xe@T\\^VXDDTN`@JLDLD`@HZFN@N@b@BN?h@?x@?^?N?R?J?b@@NBP@h@FXB|@Lf@FTD]pAEPCNOh@Ol@CJ?LGZELGVIZU`AELEL_@xAEPCFp@JNDLBB?bAVh@LVFENaAfEEVwA`GUbAKd@K^]zAa@nBe@nBs@~CGVAFCFENCN{@lDOr@k@bCEPCJe@zBENS~@A@ER_@~A_BzGGV}@vDfBX|BZLBLBnAPjC`@F@LNH@VB?HAJ?P@tB?x@Aj@?b@CtC?\\?@?F?D?@@J@@@F@BDJHRj@z@LPPVBB|@tAFHx@pA@?^l@PVXd@@@PXBBj@v@HLz@dARXr@|@v@dATXLPRR??RPh@`@VRLHfAz@JFHHHFFDFFBRFJHNN@h@GLAZCpBSv@Ml@Ip@KzAU~Ca@RCf@G|@O\\Ex@Kr@Kd@IZETDF@@?NDNJHHHJDLm@d@WVMPONKRKTIRIVI`@ADG`@CNENGj@Ed@CVCTCZGd@AT?D?R?Z@R@j@DZJv@@FBPFTLn@B^B^HjADh@F~@Fn@Lv@FVLZNZjBpB@BFBLFBBJFr@j@JJr@j@XT\\Vl@b@DB@@TPFDd@`@tBlBJHn@h@r@l@Xb@JTBDBJ@HDR@L@RBP@P@N?DBf@@b@BX@BFd@J~@?HBNNhBBX@Z@P?L?H?XALA\\C`@AP?DEh@EdACT?NC^AXE|@Cb@Cd@Cp@Al@?@@d@?\\@P?V@J?NAH@RAPETId@I^CJENOl@Mh@ETK`@G^EVCHEVQr@Oh@AB]~@O`@IVERI\\AHAV@`@@VFh@?@D`@BT@RBVB^B~@@H@`@FdA@`@@T@X@XBh@Bt@?H?P@d@Bh@@TBp@BZ?DBJ@T@^@P@V?`@?D@VBTB\\@B@NDNLr@@@BLDLBH@DDRBLFRFTBNBJDPHVDLFPRr@FR\\fALb@BF@DHPDJBH@BBHFPJb@F\\DRBLHd@XtAFZNp@DTH^FZDRVjAFV?BDJBJBFBLL^Nf@JZFRH^BJBLDNDP@HDTDPBJBLDRBRDR?@BJBLB\\Bd@@D@N?b@?@@h@?T?tA@f@@N@JFx@LdAF\\Jv@NbABRBPXlBHj@Hb@Nt@Vp@Zn@FHNVTZHLZf@BDR\\n@dATXX\\TR`Az@LFPJf@XFB@@DBNLVZ^`@^v@FJDHBHLf@Lp@`@fBJh@BHFTH\\FRDLBZHr@H`@BLDPTnA@FZ~AFVR`AVnBDZHx@B\\BLDf@@JBPBXBR@TJnA@LDb@NtADZPnA@LDVJd@HTJ^DLDHHVBDj@lAZj@HPh@z@PXp@`AX\\JLf@l@TXBDJLVVLNLNPXLRJTDJDH@BBFDNFRBF?BDV@NDVDRFXBJHTDJBLHPJLFFHJLLJJTRNN@@RTJJBDB@LJFBLLD@D@BDBDHJHLHLR\\|AdCDFRZFHDDHJ?PHPHLd@dAHRHPTh@HZDNDXHd@@DDPFTFNFL??NVBFDFCJADAFCDm@V_@NGBEBMDSDi@LC@WDg@LQDKD]HE@SDA@SDm@NI@?D@FC@[F{@RQJMDi@j@_@^GFIHUTONYZQVIHEDaAv@]\\SPQVKF[P[LC@y@TE@w@Pq@JE?UB[BI@K@SB?C?C?IPCCIAAGUAC_AiBeDz@}@VcIpCc@JQsACQEm@Ew@AGACAECCYM]Kq@QcAWeAW?g@GoD?w@CAACeA{@Ai@L@VHjAZjD`AVJZLh@Z\\VBBRPNLNLr@l@VTBBx@p@`@^FFDDLPHRHLDJR`@Tf@`@|@Rn@FNFPl@S\\MXI|@W`@GTCPCFAf@EZCp@Kv@QDAt@SBATK^UFGbAaA~@_A`@a@Z]JK\\[PQJKJIFG@MB]Bg@@KV_B?QD[?IFc@BQFw@HyBDy@Bc@Ba@Fm@Fk@D]@IBODWDa@BS@O@S@[@MGi@Kg@CKCII[VVFHFFFDJFBB@?N?D@D@BDBDHJHLHLR\\|AdCDFRZFHDDHJ?PHPHLd@dAHRHPTh@HZDNDXHd@@DDPFTFNFL??NVBFDFLRVKJNVXHLLNLNFJTZ@@FHFDVRHJDBd@f@`@b@d@f@BBb@p@HP`@t@NZFJBDDHR`@Vb@Xj@Rb@HPHNFL`@dALd@FXFZP|@ThABPDPBPLh@Jd@TfAJ^HZFVHR^hAFPFTJVDJHTBJBFBF@DHRDLBJHRFRFNJXDJDLDLJRJTNZHRBBFNLRFLHJPZFLBDDDDFNRBDBD@BHJDFFJHJT\\JLFFDFFFd@h@NPHHNNJJJHPNRRFFFDDBDBFDFFDBFDDBHFFDDDFDJHp@h@JHDD^XFBBBLH`@VXRNJJDPNB@l@\\NJRLPLRLTPNJPHLF@?FBDBJFDBD@PHPH@@THDBDBJFNHDBBBHDLJXRNLDDHFNN??FFNLBBJJBDDBB@TT@@b@\\NLHHDDLJXTFFPR@?JLHJDFDH@?T\\JTR^HNHNHNFJDHNVDFFJLPHJHLNRLNJLFFBBBDPPHFFFHFB@DDJJTRDDHFJJDDBDBDDBDFFHBFDHBDFLBHDNDNDHFV@FFPDRLb@H\\Np@N~@@LBRDl@@R?J@L?J@V?V@d@?p@?T?R?LA~@Dv@@JBT@N@F?B@H@N?FBR@L@H?HBP@RDh@BL@L@N@NBX@J@H@J@PFp@FXDTT`ADPBNFRDRDLFd@@H@H@B?D@D?F@DBJ@D?DN|@BHBJ?DBFBNBPH\\Nv@Rr@J^NXJRl@bAv@hAt@fAnAhBXV`@d@v@|@\\\\HHHHFFRRZ^\\b@BFRXfD|FRZNTHJDDLLXV@?bAf@FBn@TZNNHb@T`@VPNNNNVJZNf@L^`@tBFZFRL^JRNTJNFJRTRPNLDDZVNJLJPLFFXTXXJJHHFHPRV\\`@h@LX^n@b@t@`AxAb@x@RZn@|@h@n@tAbB|@bALLb@f@HFJLNNl@r@xB|BRR^b@X\\RVR`@NZN^`@dAFZJ\\MFIFcAtAi@x@Yh@MREJCDEHALAJ?NDT@DHTJVBJ@J@B@D@L??CBABA?CBUh@TTNd@r@pBFTf@dAZ~@T|@BH^fALZTjALv@bBjEHVd@hAzAzDVn@Pb@BFh@zA`AzC@Bp@~BUVe@r@f@dAsA|EO^dAZTF^LD@l@Pl@PPDhAZTDHBtEfACN_@lAY~@[nA[pAOl@Qr@[rA|FzA]hCIl@q@l@OP_AdASRSRGFEBSTaA|@CBHBHAfA^|@\\GJ]fAQh@??",
                "description": "SEDAN 15"
            }
        ]
    },
    "status": "Ok",
    "message": ""
}

The visual representation of the above optimization solution will resemble the following image.

Sedan 15 route

To visualize the optimized routing solution along with the sequencing of the stops, the NB.ai Optimization Tester tool is available.

Step 9: Optimizing Route for Escort Service

In cases where the first pickup from an employee’s home or the last drop to an employee’s home falls between 6 pm and 6 am and the employee is female, we dispatch an escort. Two scenarios are considered:

Case 1: Employees less than 4

The vehicle is not at full passenger capacity (less than 4 employees). In this case, we add an escort to the vehicle.

Case 2: Employees more than 4

In this scenario, male and female employees are divided into separate groups,  and the female group is assigned an escort. This process is executed as an optimization problem.

For this case, we created an optimization problem, and the following optimization job was created.

{
   "mvrpEscortID": {
      "id": "838ed059acf380cc0c3e2fe05f0b25ff",
      "message": "Optimization job created",
      "status": "Ok"
   }
}

Retrieving the optimized result for the above optimization job.

API Request 
curl --location --request GET 'https://api.nextbillion.io/optimization/v2/result?id=838ed059acf380cc0c3e2fe05f0b25ff&key={your_api_key}'
API Response
{
    "description": "MVRP Tutorial 2023-11-06T10:13:35.568Z",
    "result": {
        "code": 0,
        "summary": {
            "cost": 3410,
            "routes": 1,
            "unassigned": 0,
            "setup": 0,
            "service": 0,
            "duration": 3410,
            "waiting_time": 0,
            "priority": 0,
            "delivery": [
                3
            ],
            "pickup": [
                3
            ],
            "distance": 25573
        },
        "routes": [
            {
                "vehicle": 4,
                "cost": 3410,
                "steps": [
                    {
                        "type": "start",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 6,
                        "load": [
                            0
                        ],
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 3,
                        "id": 4,
                        "load": [
                            1
                        ],
                        "description": "190, F",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 1,
                        "id": 2,
                        "load": [
                            2
                        ],
                        "description": "999, E",
                        "distance": 0
                    },
                    {
                        "type": "pickup",
                        "arrival": 1688394600,
                        "duration": 0,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.978527,
                            77.665694
                        ],
                        "location_index": 5,
                        "id": 6,
                        "load": [
                            3
                        ],
                        "description": "182, F",
                        "distance": 0
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688397615,
                        "duration": 3015,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8479159,
                            77.6528024
                        ],
                        "location_index": 2,
                        "id": 3,
                        "load": [
                            2
                        ],
                        "description": "190, F",
                        "distance": 23709
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398010,
                        "duration": 3410,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8424657,
                            77.6462378
                        ],
                        "location_index": 0,
                        "id": 1,
                        "load": [
                            1
                        ],
                        "description": "999, E",
                        "distance": 25573
                    },
                    {
                        "type": "delivery",
                        "arrival": 1688398010,
                        "duration": 3410,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8424657,
                            77.6462378
                        ],
                        "location_index": 4,
                        "id": 5,
                        "load": [
                            0
                        ],
                        "description": "182, F",
                        "distance": 25573
                    },
                    {
                        "type": "end",
                        "arrival": 1688398010,
                        "duration": 3410,
                        "service": 0,
                        "waiting_time": 0,
                        "location": [
                            12.8424657,
                            77.6462378
                        ],
                        "location_index": 7,
                        "load": [
                            0
                        ],
                        "distance": 25573
                    }
                ],
                "service": 0,
                "duration": 3410,
                "waiting_time": 0,
                "priority": 0,
                "delivery": [
                    3
                ],
                "pickup": [
                    3
                ],
                "distance": 25573,
                "geometry": "{|enAia`yM??????a@HWHILEF?H?h@EvA?l@?@?V?DADCBGFjAHb@FhA@t@CPCj@OPADA@A?GE]@I@CB?RAJO^o@FKBAJGz@g@`@j@BDT^FJXXJDOj@PBZHF@D@f@ND@`BVBIBAF?N?F@\\BN?DHHRNZDHPXFLPP\\`@LNh@n@rAxADDZ^VZ\\`@b@f@HHHJDDFDHFHBB@H@F?T@B?V?N@X?n@?H?L?`@?N?D@DDBHBRBbADr@Bf@@P@l@Dt@?L@N@PBl@@d@@F?BI~BMv@?B?D?n@?T@^@v@Aj@Cl@Cf@C^IdBEj@dAFf@Bd@BzAHx@Bd@DN@`ABUzCX@v@FIv@ARANEt@ABGlAC`@Ef@Er@Ed@En@KzAEv@NB~B^d@Jf@Ht@NVBH@EXO`AQdAEXrA^RDXHn@Nt@RzAb@f@Pj@TXLFBNHNAJD^RNFXLVJTHN@f@AVAdAIHAn@AH?~@???z@Nl@RX?J?d@C@?pAGjAK@?f@EhA?\\Dv@FJ?~@HB?dADXBT@RLl@@H@H?D?Ah@CXCt@CPA^AJIdAGhA?LCd@ANCb@CVE`AIfAANARGdA?DADAVAPEj@AVCb@C`@?BC\\Ez@KpAEnAEt@?JALEz@CFAPCf@A@APAPANDRDNHHlCXVB`@DPB\\FT@~@Bt@Fl@JBBBDJ?ZD`@?@?h@AhAGXAl@Aj@?l@@P?J?v@?\\@p@@lDJF@Z@d@BN@L@LBhAd@bBt@`@PHDp@ZZNJDb@T\\Pt@`@d@V@?VNLFPHPHn@XZLh@RfAb@\\FXBN?NAXELCVGXMZUZ[RS`@g@z@aA`@e@\\_@NMTKd@ORGd@E@?^?h@BZFZJVL@@\\Nx@`@\\PVLd@VLFd@TFDr@\\@@z@d@h@VTLnBbA`Ah@b@TPJ^Rd@T\\RVLn@\\TLh@XfCpA^RbB~@LFPH\\PNH`@Tv@`@n@^??f@XPJ`@XXT@@ZXPTBDb@h@Vb@NVFP@@DJBHJTHX@BFNH^Lt@?@Hl@Bj@?Z?^@j@AB?l@At@?L?TEbC@d@?T?V@f@@j@@N@f@?L?h@?V?p@ANAdA?N?V?PBTBN@F@F@FH`@BLHXHVFRBJL^N^Vn@DJ^t@@BNZPTLTNRV\\|@{@\\Y~CuCp@e@v@}@NOBDBDHNZb@Vd@|@w@zBoBHKRXV^Xd@NRPXLT`@p@BDLRr@fAf@]^YnCgBdB}@bCeA^KLEXG\\EXCFAFAX@L?R?X@bAF|BP|@HpBRpF^ZBJ@pBJz@H\\Ft@VFHbAb@TJDODOBIHYFWBIFU@E@MLFFLLVJTFTFv@RvAPlALhABTHh@Jv@Jp@L|@VlBHn@Db@Jn@RtAHn@Dh@D^Jj@Tx@@F\\f@v@hALPJTZp@\\t@LXJVJRd@dAh@hALXB\\FLBDBAjAg@fAk@r@_@PIt@a@JG^U@?NKTOz@o@VQp@e@z@i@JEj@[ZOhAm@PKJEHEHEDCDCDCDEHCDCFCBAHEHGPIpAm@FC~@c@~BgAv@_@bCkA^SZQZO~EgChAi@FEnBeAj@YhAq@XQdAi@|BkAHEFCzBoALGJGb@SF?bCmAbAi@xC{Af@W\\QvC_BXQx@_@~@g@`CmAfB_AvAu@p@]tC{Al@_@BAfB_Aj@YPIz@e@`CmANI\\Sdg@wWx^}RRI|BwAxDqBtAu@JGp@]DEBAFEbDoAbE{BbDcBzCaBnHyDhAo@xDqBr@]ZQnDiB`CoApBgAvC}Ad@Y^Sz@o@hA}@v@m@p@i@vCgCBEdCyBn@i@dByAhA_Af@_@HG^YpByA~AkAlCoBrDqCFGJGDCDEDEFCDExB}AlA{@xDsCz@o@rAcAlBwA~AoAbHgFZU|AkArCqBvB_BtAeAhAy@XSr@g@vAgAdCmBnCmBnHoFNKpIkGLKd@[LMrBwAjA}@bAu@h@_@`CeBZUnCsB~AmA\\WfCkBzBaBpF_Ef@]lCqBj@a@l@a@`@[\\UNMNKPKFCJERGXGNAF?J?B@D?H@p@@J?F@FLFRHRFRJVRd@l@zAh@nA^z@Vl@Td@Zn@Pf@JVDLJ\\Nj@Hj@Fp@Y`@BZL`D?ZCF?L?T?Z?nBAz@ArAAnAARElEAjADvABz@@R?HAb@@L@FR`@R~@JpBLfB?TKPIDq@Z_A\\}Ab@a@JUH}Ah@k@Tc@PSHe@RcBt@]Hq@BA?eBFuAFSByANK@[D@|ACp@?\\Ad@?TDVO@AjBAjA?v@~DL@?tC?`AAP?n@C@b@?TD|@@d@?T?^?X?\\?b@CjAAv@?PH?V?`CDP?T?P?T@?N?LA`A?V?dAAhAChAAdA?HAx@?JAbA_DA@@DJBR?NAF?FAHCNAPE\\EVI\\Gb@GXAB?JAD@B@DBHDDDBFD^NNDRF@@^HND@?b@N\\HXJJDFHFJHLJLPFB@p@PF@LBNDPD^HNDLFNHLFNHHLJXLZLf@Rr@Ph@Td@T^R\\RZ\\j@R`@PZXn@LZVl@Ld@J?J?n@?\\@r@Bx@Br@B`@@D?L?h@?J?@WB]@[Ai@Ae@Mg@Oe@GUEECMCs@Bw@?GO?uAE????",
                "description": "SEDAN 4"
            }
        ]
    },
    "status": "Ok",
    "message": ""
}

The visual representation of the above optimization solution will resemble the following image.

Sedan 4 route

The male employees are assigned to non-assigned vehicles and the optimization process is repeated.

{
   "distanceMatrixMale": {
      "status": "Ok",
      "rows": [ [] ]
   },
   "distanceMatrixMaleIdx": {
      "0": "12.8919434,77.6182305",
      "1": "12.8715901,77.6155747"
   },
   "furthestEmployeePickupMale": "12.8715901,77.6155747",
   "OptimizationProblemMale": {
      "vehicles": [
         {
            "id": 1,
            "description": "SEDAN 1",
            "capacity": [],
            "max_travel_cost": 9600,
            "start_index": 4,
            "end_index": 5
         }
      ],
      "shipments": [
         {
            "amount": [],
            "delivery": {},
            "pickup": {}
         },
         {
            "amount": [],
            "delivery": {},
            "pickup": {}
         }
      ],
      "locations": {
         "id": 1,
         "location": [
            "12.8919434,77.6182305",
            "12.978527,77.665694",
            "12.8715901,77.6155747",
            "12.978527,77.665694",
            "12.978527,77.665694",
            "12.8715901,77.6155747"
         ]
      },
      "options": {
         "objective": {
            "travel_cost": "duration",
            "routing": {}
         }
      }
   },
   "mvrpMaleGroupID": {
      "id": "493a6577dc9da9e9e8170352361f10cc",
      "message": "Optimization job created",
      "status": "Ok"
   }
}

The visualization of the following optimization job will resemble the following image.

male group optimized routes

Our multi-step approach involves pre-processing to create employee groups, running distance matrix calculations within each group to identify the furthest employee, and conducting optimization within each group. This approach fulfills the following objectives:

  • Provides specific pickup times for each employee.
  • Minimizes time spent in the vehicle.
  • Ensures timely arrival before the office shift begins.

Additionally, we address the edge case where a female employee is either the first to be picked up or the last to be dropped by introducing an escort.