Table of Contents
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:
- Minimizing Employee Time Spent in Transit: The solution aims to reduce the time employees spend in vehicles during their commute.
- Punctual Arrival at the Office: Employees are required to arrive at the office before the designated log-in time.
- 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.
Vehicles Data
Similarly, the following sample vehicle CSV is tailored for our use case.
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:
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.
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.
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.
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.
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.