Forced Routes

In some cases, one may have a routing problem where the sequence of stops is already known and only the desired travel times, polylines, and driving directions are desired. In the first example, we have only a single vehicle with a single shift and we force it to visit a sequence of stops. Note that it would be very easy to add more stops to this route, but no optimization is done in this case. One important note is that the sequence of stops must be feasible for the associated shift – in other words, if the optimization engine computes the travel time and determines that it is not possible to visit the provided sequence of stops within the time for the shift, then no route is returned. In this case, a simple solution may be to increase the length of the shift.

Single Forced Route

{
    "forced_routes": [
        {
            "shift_id": "v1 shift",
            "stops": [
                {
                    "stop_id": "688798",
                    "stop_type": "order"
                },
                {
                    "stop_id": "677048",
                    "stop_type": "order"
                },
                {
                    "stop_id": "692039",
                    "stop_type": "order"
                },
                {
                    "stop_id": "690020",
                    "stop_type": "order"
                },
                {
                    "stop_id": "689105",
                    "stop_type": "order"
                }
            ]
        }
    ],
    "constraints": [
        {
            "penalty_per_violation": 1,
            "violation_increment": 1,
            "constraint_name": "limit travel",
            "max_travel_time_seconds": 0,
            "constraint_type": "Travel_Time"
        },
        {
            "violation_increment": 1,
            "constraint_name": "visit as many orders as possible",
            "penalty_per_violation": 10000,
            "constraint_type": "Visit_Range"
        }
    ],
    "orders": [
        {
            "order_id": "688798",
            "duration": 60,
            "location_id": "loc1"
        },
        {
            "order_id": "689105",
            "duration": 60,
            "location_id": "loc3"
        },
        {
            "order_id": "692039",
            "duration": 60,
            "location_id": "loc5"
        },
        {
            "order_id": "583368",
            "duration": 60,
            "location_id": "loc6"
        },
        {
            "order_id": "677048",
            "duration": 60,
            "location_id": "loc7"
        },
        {
            "order_id": "685086",
            "duration": 60,
            "location_id": "loc8"
        },
        {
            "order_id": "690020",
            "duration": 60,
            "location_id": "loc9"
        }
    ],
    "vehicles": [
        {
            "shifts": [
                {
                    "end_location_id": "loc11",
                    "break_end": [
                        "2017-08-24T13:00:00-04:00"
                    ],
                    "break_start": [
                        "2017-08-24T12:00:00-04:00"
                    ],
                    "shift_start": "2017-08-24T08:00:00-04:00",
                    "shift_id": "v1 shift",
                    "start_location_id": "loc11",
                    "shift_end": "2017-08-24T18:00:00-04:00"
                }
            ],
            "vehicle_id": "Vehicle 1"
        }
    ],
    "locations": [
        {
            "latitude": 33.3300399,
            "longitude": -84.07639,
            "location_id": "loc1"
        },
        {
            "latitude": 34.07687,
            "longitude": -84.52763,
            "location_id": "loc3"
        },
        {
            "latitude": 34.02463,
            "longitude": -84.1256499,
            "location_id": "loc5"
        },
        {
            "latitude": 33.78583,
            "longitude": -84.30268,
            "location_id": "loc6"
        },
        {
            "latitude": 34.07687,
            "longitude": -84.5738499,
            "location_id": "loc7"
        },
        {
            "latitude": 33.98557,
            "longitude": -83.7661399,
            "location_id": "loc8"
        },
        {
            "latitude": 34.02403,
            "longitude": -84.69128,
            "location_id": "loc9"
        },
        {
            "latitude": 33.57832,
            "longitude": -84.26431,
            "location_id": "loc11"
        }
    ]
}

img

The sequence of stops could be made more efficient but no re-ordering of a forced route is allowed.

Multiple Forced Routes

In this example, we force the routes for all four shifts. Note that breaks can be incorporated but again the sequence of stops in the route cannot be changed.

{
    "forced_routes": [
        {
            "stops": [
                {
                    "stop_id": "loc20",
                    "stop_type": "location"
                },
                {
                    "stop_id": "665537",
                    "stop_type": "order"
                },
                {
                    "stop_id": "623404",
                    "stop_type": "order"
                },
                {
                    "stop_id": "688798",
                    "stop_type": "order"
                },
                {
                    "stop_id": "674660",
                    "stop_type": "order"
                },
                {
                    "stop_id": "685382",
                    "stop_type": "order"
                },
                {
                    "stop_id": "693854",
                    "stop_type": "order"
                },
                {
                    "stop_id": "688899",
                    "stop_type": "order"
                },
                {
                    "stop_id": "392888",
                    "stop_type": "order"
                },
                {
                    "stop_id": "413170",
                    "stop_type": "order"
                },
                {
                    "stop_id": "583368",
                    "stop_type": "order"
                },
                {
                    "stop_id": "691287",
                    "stop_type": "order"
                },
                {
                    "stop_id": "691449",
                    "stop_type": "order"
                },
                {
                    "stop_id": "678545",
                    "stop_type": "order"
                },
                {
                    "stop_id": "649953",
                    "stop_type": "order"
                },
                {
                    "stop_id": "693192",
                    "stop_type": "order"
                },
                {
                    "stop_id": "loc20",
                    "stop_type": "location"
                }
            ],
            "shift_id": "v1shift"
        },
        {
            "stops": [
                {
                    "stop_id": "loc99",
                    "stop_type": "location"
                },
                {
                    "stop_id": "690020",
                    "stop_type": "order"
                },
                {
                    "stop_id": "693098",
                    "stop_type": "order"
                },
                {
                    "stop_id": "683931",
                    "stop_type": "order"
                },
                {
                    "stop_id": "340637",
                    "stop_type": "order"
                },
                {
                    "stop_id": "loc99",
                    "stop_type": "location"
                }
            ],
            "shift_id": "v2shift"
        },
        {
            "stops": [
                {
                    "stop_id": "loc16",
                    "stop_type": "location"
                },
                {
                    "stop_id": "692431",
                    "stop_type": "order"
                },
                {
                    "stop_id": "685945",
                    "stop_type": "order"
                },
                {
                    "stop_id": "692829",
                    "stop_type": "order"
                },
                {
                    "stop_id": "685086",
                    "stop_type": "order"
                },
                {
                    "stop_id": "640723",
                    "stop_type": "order"
                },
                {
                    "stop_id": "loc16",
                    "stop_type": "location"
                }
            ],
            "shift_id": "v3shift"
        },
        {
            "stops": [
                {
                    "stop_id": "loc100",
                    "stop_type": "location"
                },
                {
                    "stop_id": "695124",
                    "stop_type": "order"
                },
                {
                    "stop_id": "677048",
                    "stop_type": "order"
                },
                {
                    "stop_id": "689105",
                    "stop_type": "order"
                },
                {
                    "stop_id": "694498",
                    "stop_type": "order"
                },
                {
                    "stop_id": "617086",
                    "stop_type": "order"
                },
                {
                    "stop_id": "693858",
                    "stop_type": "order"
                },
                {
                    "stop_id": "509217",
                    "stop_type": "order"
                },
                {
                    "stop_id": "692039",
                    "stop_type": "order"
                },
                {
                    "stop_id": "692592",
                    "stop_type": "order"
                },
                {
                    "stop_id": "695743",
                    "stop_type": "order"
                },
                {
                    "stop_id": "loc100",
                    "stop_type": "location"
                }
            ],
            "shift_id": "v4shift"
        }
    ],
    "orders": [
        {
            "duration": 600,
            "order_id": "688798",
            "location_id": "loc1"
        },
        {
            "duration": 600,
            "order_id": "689105",
            "location_id": "loc3"
        },
        {
            "duration": 1800,
            "order_id": "692039",
            "location_id": "loc5"
        },
        {
            "duration": 600,
            "order_id": "583368",
            "location_id": "loc6"
        },
        {
            "duration": 600,
            "order_id": "677048",
            "location_id": "loc7"
        },
        {
            "duration": 600,
            "order_id": "685086",
            "location_id": "loc8"
        },
        {
            "duration": 600,
            "order_id": "690020",
            "location_id": "loc9"
        },
        {
            "duration": 600,
            "order_id": "674660",
            "location_id": "loc11"
        },
        {
            "duration": 600,
            "order_id": "413170",
            "location_id": "loc13"
        },
        {
            "duration": 600,
            "order_id": "685945",
            "location_id": "loc14"
        },
        {
            "duration": 600,
            "order_id": "692592",
            "location_id": "loc15"
        },
        {
            "duration": 600,
            "order_id": "678545",
            "location_id": "loc17"
        },
        {
            "duration": 600,
            "order_id": "692829",
            "location_id": "loc18"
        },
        {
            "duration": 600,
            "order_id": "695124",
            "location_id": "loc19"
        },
        {
            "duration": 600,
            "order_id": "693192",
            "location_id": "loc21"
        },
        {
            "duration": 600,
            "order_id": "649953",
            "location_id": "loc22"
        },
        {
            "duration": 600,
            "order_id": "694498",
            "location_id": "loc23"
        },
        {
            "duration": 600,
            "order_id": "693854",
            "location_id": "loc24"
        },
        {
            "duration": 600,
            "order_id": "688899",
            "location_id": "loc25"
        },
        {
            "duration": 600,
            "order_id": "617086",
            "location_id": "loc26"
        },
        {
            "duration": 600,
            "order_id": "340637",
            "location_id": "loc27"
        },
        {
            "duration": 600,
            "order_id": "693098",
            "location_id": "loc28"
        },
        {
            "duration": 600,
            "order_id": "683931",
            "location_id": "loc29"
        },
        {
            "duration": 600,
            "order_id": "685382",
            "location_id": "loc30"
        },
        {
            "duration": 600,
            "order_id": "691449",
            "location_id": "loc31"
        },
        {
            "duration": 600,
            "order_id": "509217",
            "location_id": "loc32"
        },
        {
            "duration": 600,
            "order_id": "691287",
            "location_id": "loc33"
        },
        {
            "duration": 600,
            "order_id": "640723",
            "location_id": "loc34"
        },
        {
            "duration": 600,
            "order_id": "665537",
            "location_id": "loc35"
        },
        {
            "duration": 600,
            "order_id": "693858",
            "location_id": "loc36"
        },
        {
            "duration": 600,
            "order_id": "392888",
            "location_id": "loc37"
        },
        {
            "duration": 600,
            "order_id": "623404",
            "location_id": "loc38"
        },
        {
            "duration": 600,
            "order_id": "695743",
            "location_id": "loc39"
        },
        {
            "duration": 600,
            "order_id": "692431",
            "location_id": "loc40"
        }
    ],
    "locations": [
        {
            "latitude": 33.3300399,
            "location_id": "loc1",
            "longitude": -84.07639
        },
        {
            "latitude": 33.5179638,
            "location_id": "loc2",
            "longitude": -84.4153667
        },
        {
            "latitude": 34.07687,
            "location_id": "loc3",
            "longitude": -84.52763
        },
        {
            "latitude": 33.73872,
            "location_id": "loc4",
            "longitude": -85.15883
        },
        {
            "latitude": 34.02463,
            "location_id": "loc5",
            "longitude": -84.1256499
        },
        {
            "latitude": 33.78583,
            "location_id": "loc6",
            "longitude": -84.30268
        },
        {
            "latitude": 34.07687,
            "location_id": "loc7",
            "longitude": -84.5738499
        },
        {
            "latitude": 33.98557,
            "location_id": "loc8",
            "longitude": -83.7661399
        },
        {
            "latitude": 34.02403,
            "location_id": "loc9",
            "longitude": -84.69128
        },
        {
            "latitude": 33.57832,
            "location_id": "loc11",
            "longitude": -84.26431
        },
        {
            "latitude": 33.56882,
            "location_id": "loc12",
            "longitude": -84.51451
        },
        {
            "latitude": 33.8200999,
            "location_id": "loc13",
            "longitude": -84.30606
        },
        {
            "latitude": 33.98078,
            "location_id": "loc14",
            "longitude": -84.02126
        },
        {
            "latitude": 33.98596,
            "location_id": "loc15",
            "longitude": -84.20871
        },
        {
            "latitude": 34.098671,
            "location_id": "loc16",
            "longitude": -83.789905
        },
        {
            "latitude": 33.68959,
            "location_id": "loc17",
            "longitude": -84.3739
        },
        {
            "latitude": 33.8965699,
            "location_id": "loc18",
            "longitude": -84.08495
        },
        {
            "latitude": 34.0078,
            "location_id": "loc19",
            "longitude": -84.5491
        },
        {
            "latitude": 33.44852,
            "location_id": "loc20",
            "longitude": -84.78468
        },
        {
            "latitude": 33.45099,
            "location_id": "loc21",
            "longitude": -84.7372199
        },
        {
            "latitude": 33.7084199,
            "location_id": "loc22",
            "longitude": -84.44377
        },
        {
            "latitude": 34.0286,
            "location_id": "loc23",
            "longitude": -84.37416
        },
        {
            "latitude": 33.82054,
            "location_id": "loc24",
            "longitude": -84.23121
        },
        {
            "latitude": 33.83828,
            "location_id": "loc25",
            "longitude": -84.21402
        },
        {
            "latitude": 34.05614,
            "location_id": "loc26",
            "longitude": -84.31995
        },
        {
            "latitude": 33.7435386,
            "location_id": "loc27",
            "longitude": -84.6712
        },
        {
            "latitude": 33.99045,
            "location_id": "loc28",
            "longitude": -84.8082699
        },
        {
            "latitude": 33.84614,
            "location_id": "loc29",
            "longitude": -84.7469
        },
        {
            "latitude": 33.68736,
            "location_id": "loc30",
            "longitude": -84.23972
        },
        {
            "latitude": 33.7757999,
            "location_id": "loc31",
            "longitude": -84.3845599
        },
        {
            "latitude": 34.19941,
            "location_id": "loc32",
            "longitude": -84.1556
        },
        {
            "latitude": 33.75112,
            "location_id": "loc33",
            "longitude": -84.35911
        },
        {
            "latitude": 33.9854531,
            "location_id": "loc34",
            "longitude": -83.707189
        },
        {
            "latitude": 33.52079,
            "location_id": "loc35",
            "longitude": -84.36567
        },
        {
            "latitude": 34.104,
            "location_id": "loc36",
            "longitude": -84.2661811
        },
        {
            "latitude": 33.88826,
            "location_id": "loc37",
            "longitude": -84.20234
        },
        {
            "latitude": 33.4439,
            "location_id": "loc38",
            "longitude": -84.32034
        },
        {
            "latitude": 33.96681,
            "location_id": "loc39",
            "longitude": -84.23654
        },
        {
            "latitude": 34.1162,
            "location_id": "loc40",
            "longitude": -83.81919
        },
        {
            "latitude": 34.07697,
            "location_id": "loc99",
            "longitude": -85.0148499
        },
        {
            "latitude": 33.9157,
            "location_id": "loc100",
            "longitude": -84.52097
        }
    ],
    "vehicles": [
        {
            "shifts": [
                {
                    "end_location_id": "loc20",
                    "shift_start": "2017-08-24T08:05:00-04:00",
                    "break_start": [
                        "2017-08-24T12:00:00-04:00"
                    ],
                    "shift_id": "v1shift",
                    "shift_end": "2017-08-24T17:10:00-04:00",
                    "break_end": [
                        "2017-08-24T13:00:00-04:00"
                    ],
                    "start_location_id": "loc20"
                }
            ],
            "vehicle_id": "Vehicle1"
        },
        {
            "shifts": [
                {
                    "end_location_id": "loc99",
                    "shift_start": "2017-08-24T10:05:00-04:00",
                    "break_start": [
                        "2017-08-24T12:00:00-04:00"
                    ],
                    "shift_id": "v2shift",
                    "shift_end": "2017-08-24T15:10:00-04:00",
                    "break_end": [
                        "2017-08-24T13:00:00-04:00"
                    ],
                    "start_location_id": "loc99"
                }
            ],
            "vehicle_id": "Vehicle2"
        },
        {
            "shifts": [
                {
                    "end_location_id": "loc16",
                    "shift_start": "2017-08-24T07:05:00-04:00",
                    "break_start": [
                        "2017-08-24T09:00:00-04:00"
                    ],
                    "shift_id": "v3shift",
                    "shift_end": "2017-08-24T13:10:00-04:00",
                    "break_end": [
                        "2017-08-24T10:00:00-04:00"
                    ],
                    "start_location_id": "loc16"
                }
            ],
            "vehicle_id": "Vehicle3"
        },
        {
            "shifts": [
                {
                    "end_location_id": "loc100",
                    "shift_start": "2017-08-24T09:05:00-04:00",
                    "break_start": [
                        "2017-08-24T12:00:00-04:00"
                    ],
                    "shift_id": "v4shift",
                    "shift_end": "2017-08-24T16:10:00-04:00",
                    "break_end": [
                        "2017-08-24T13:00:00-04:00"
                    ],
                    "start_location_id": "loc100"
                }
            ],
            "vehicle_id": "Vehicle4"
        }
    ],
    "constraints": [
        {
            "violation_increment": 1,
            "constraint_name": "limit travel",
            "penalty_per_violation": 1,
            "max_travel_time_seconds": 0,
            "constraint_type": "Travel_Time"
        },
        {
            "constraint_name": "visit as many orders as possible",
            "penalty_per_violation": 10000,
            "violation_increment": 1,
            "constraint_type": "Visit_Range"
        }
    ]
}