Skip to content

Maximum route duration

Info

This feature is configurable via .json input, without the need for code customization and is available for both the Marketplace app and Platform. You can find a list of all available features.

Field name Required Data type SI Unit Defined on Example Configurable via defaults
max_duration No int seconds vehicle {"max_duration": 123}

It may be useful to set a hard limit on the maximum duration of a route for a vehicle. For example, if the vehicle or vehicle driver has a limited availability. This limit can be set via the max_duration feature on vehicles. The duration is given in seconds.

Please note that the max_duration includes any time spent traveling, waiting at stops, and servicing them.

Info

When defining start_time and end_time on a vehicle there is a time duration defined by end_time - start_time. The route duration is limited by the most constrained duration between end_time - start_time and max_duration.

Here is an example defining different maximum durations for vehicles. A sample output obtained after solving the problem is also shown.

{
  "defaults": {
    "vehicles": {
      "speed": 5,
      "start_time": "2023-01-01T12:00:00Z"
    },
    "stops": {
      "unplanned_penalty": 20000,
      "duration": 300
    }
  },
  "stops": [
    {
      "id": "Fushimi Inari Taisha",
      "location": { "lon": 135.772695, "lat": 34.967146 }
    },
    {
      "id": "Kiyomizu-dera",
      "location": { "lon": 135.78506, "lat": 34.994857 }
    },
    {
      "id": "Nijō Castle",
      "location": { "lon": 135.748134, "lat": 35.014239 }
    },
    {
      "id": "Kyoto Imperial Palace",
      "location": { "lon": 135.762057, "lat": 35.025431 }
    },
    {
      "id": "Gionmachi",
      "location": { "lon": 135.775682, "lat": 35.002457 }
    },
    {
      "id": "Kinkaku-ji",
      "location": { "lon": 135.728898, "lat": 35.039705 }
    },
    {
      "id": "Arashiyama Bamboo Forest",
      "location": { "lon": 135.672009, "lat": 35.017209 }
    }
  ],
  "vehicles": [
    {
      "id": "v1",
      "max_duration": 1800
    },
    {
      "id": "v2",
      "max_duration": 1200
    }
  ]
}
{
  "options": {
    "check": {
      "duration": 30000000000,
      "verbosity": "off"
    },
    "format": {
      "disable": {
        "progression": true
      }
    },
    "model": {
      "constraints": {
        "disable": {
          "attributes": false,
          "capacities": null,
          "capacity": false,
          "distance_limit": false,
          "groups": false,
          "maximum_duration": false,
          "maximum_stops": false,
          "maximum_wait_stop": false,
          "maximum_wait_vehicle": false,
          "mixing_items": false,
          "precedence": false,
          "start_time_windows": false,
          "vehicle_end_time": false,
          "vehicle_start_time": false
        },
        "enable": {
          "cluster": false
        }
      },
      "objectives": {
        "capacities": "",
        "cluster": 0,
        "distance": 0,
        "early_arrival_penalty": 1,
        "late_arrival_penalty": 1,
        "min_stops": 1,
        "stop_balance": 0,
        "travel_duration": 0,
        "unplanned_penalty": 1,
        "vehicle_activation_penalty": 1,
        "vehicles_duration": 1
      },
      "properties": {
        "disable": {
          "duration_groups": false,
          "durations": false,
          "initial_solution": false,
          "stop_duration_multipliers": false
        },
        "maximum_time_horizon": 15552000
      },
      "validate": {
        "disable": {
          "resources": false,
          "start_time": false
        },
        "enable": {
          "matrix": false,
          "matrix_asymmetry_tolerance": 20
        }
      }
    },
    "solve": {
      "duration": 10000000000,
      "iterations": 50,
      "parallel_runs": 1,
      "plateau": {
        "absolute_threshold": -1,
        "delay": 0,
        "duration": 0,
        "iterations": 0,
        "relative_threshold": 0
      },
      "run_deterministically": true,
      "solver": {
        "plan_group_size": {
          "delta": 0,
          "delta_after_iterations": 1000000000,
          "max_value": 2,
          "min_value": 2,
          "snap_back_after_improvement": true,
          "start_value": 2,
          "zigzag": true
        },
        "unplan_units": {
          "delta": 2,
          "delta_after_iterations": 125,
          "max_value": -1,
          "min_value": 2,
          "snap_back_after_improvement": true,
          "start_value": 2,
          "zigzag": true
        },
        "unplan_weights": "Vehicle:3,Island:1,Location:293"
      },
      "start_solutions": 1
    }
  },
  "solutions": [
    {
      "objective": {
        "name": "1 * vehicles_duration + 1 * unplanned_penalty",
        "objectives": [
          {
            "base": 2751.797765016556,
            "factor": 1,
            "name": "vehicles_duration",
            "value": 2751.797765016556
          },
          {
            "base": 40000,
            "factor": 1,
            "name": "unplanned_penalty",
            "value": 40000
          }
        ],
        "value": 42751.797765016556
      },
      "unplanned": [
        {
          "id": "Arashiyama Bamboo Forest",
          "location": {
            "lat": 35.017209,
            "lon": 135.672009
          }
        },
        {
          "id": "Kinkaku-ji",
          "location": {
            "lat": 35.039705,
            "lon": 135.728898
          }
        }
      ],
      "vehicles": [
        {
          "id": "v1",
          "route": [
            {
              "arrival_time": "2023-01-01T12:00:00Z",
              "cumulative_travel_duration": 0,
              "duration": 300,
              "end_time": "2023-01-01T12:05:00Z",
              "start_time": "2023-01-01T12:00:00Z",
              "stop": {
                "id": "Fushimi Inari Taisha",
                "location": {
                  "lat": 34.967146,
                  "lon": 135.772695
                }
              },
              "travel_duration": 0
            },
            {
              "arrival_time": "2023-01-01T12:15:56Z",
              "cumulative_travel_distance": 3280,
              "cumulative_travel_duration": 656,
              "duration": 300,
              "end_time": "2023-01-01T12:20:56Z",
              "start_time": "2023-01-01T12:15:56Z",
              "stop": {
                "id": "Kiyomizu-dera",
                "location": {
                  "lat": 34.994857,
                  "lon": 135.78506
                }
              },
              "travel_distance": 3280,
              "travel_duration": 656
            },
            {
              "arrival_time": "2023-01-01T12:24:56Z",
              "cumulative_travel_distance": 4481,
              "cumulative_travel_duration": 896,
              "duration": 300,
              "end_time": "2023-01-01T12:29:56Z",
              "start_time": "2023-01-01T12:24:56Z",
              "stop": {
                "id": "Gionmachi",
                "location": {
                  "lat": 35.002457,
                  "lon": 135.775682
                }
              },
              "travel_distance": 1201,
              "travel_duration": 240
            }
          ],
          "route_duration": 1796,
          "route_stops_duration": 900,
          "route_travel_distance": 4481,
          "route_travel_duration": 896
        },
        {
          "id": "v2",
          "route": [
            {
              "arrival_time": "2023-01-01T12:00:00Z",
              "cumulative_travel_duration": 0,
              "duration": 300,
              "end_time": "2023-01-01T12:05:00Z",
              "start_time": "2023-01-01T12:00:00Z",
              "stop": {
                "id": "Nijō Castle",
                "location": {
                  "lat": 35.014239,
                  "lon": 135.748134
                }
              },
              "travel_duration": 0
            },
            {
              "arrival_time": "2023-01-01T12:10:55Z",
              "cumulative_travel_distance": 1776,
              "cumulative_travel_duration": 355,
              "duration": 300,
              "end_time": "2023-01-01T12:15:55Z",
              "start_time": "2023-01-01T12:10:55Z",
              "stop": {
                "id": "Kyoto Imperial Palace",
                "location": {
                  "lat": 35.025431,
                  "lon": 135.762057
                }
              },
              "travel_distance": 1776,
              "travel_duration": 355
            }
          ],
          "route_duration": 955,
          "route_stops_duration": 600,
          "route_travel_distance": 1776,
          "route_travel_duration": 355
        }
      ]
    }
  ],
  "statistics": {
    "result": {
      "custom": {
        "activated_vehicles": 2,
        "max_duration": 0.123,
        "max_stops_in_vehicle": 3,
        "max_travel_duration": 0.123,
        "min_duration": 0.123,
        "min_stops_in_vehicle": 2,
        "min_travel_duration": 0.123,
        "unplanned_stops": 2
      },
      "duration": 0.123,
      "value": 0.123
    },
    "run": {
      "duration": 0.123,
      "iterations": 50
    },
    "schema": "v1"
  },
  "version": {
    "sdk": "VERSION"
  }
}