Package Classes (1.11.0) (original) (raw)

Summary of entries of Classes for optimization.

FleetRoutingAsyncClient

A service for optimizing vehicle tours.

Validity of certain types of fields:

FleetRoutingClient

A service for optimizing vehicle tours.

Validity of certain types of fields:

AggregatedMetrics

Aggregated metrics forShipmentRoute (resp. forOptimizeToursResponseover allTransitionand/or Visit(resp. over allShipmentRoute) elements.

CostsEntry

The abstract base class for a message.

MaxLoadsEntry

The abstract base class for a message.

AsyncModelMetadata

The long running operation metadata for async model related methods.

State

Possible states of the operation.

BatchOptimizeToursRequest

Request to batch optimize tours as an asynchronous operation. Each input file should contain one OptimizeToursRequest, and each output file will contain one OptimizeToursResponse. The request contains information to read/write and parse the files. All the input and output files should be under the same project.

AsyncModelConfig

Information for solving one optimization model asynchronously.

BatchOptimizeToursResponse

Response to a BatchOptimizeToursRequest. This is returned in the LRO Operation after the operation is complete.

BreakRule

Rules to generate time breaks for a vehicle (e.g. lunch breaks). A break is a contiguous period of time during which the vehicle remains idle at its current position and cannot perform any visit. A break may occur:

BreakRequest

The sequence of breaks (i.e. their number and order) that apply to each vehicle must be known beforehand. The repeatedBreakRequest\ s define that sequence, in the order in which they must occur. Their time windows (earliest_start_time /latest_start_time) may overlap, but they must be compatible with the order (this is checked).

FrequencyConstraint

One may further constrain the frequency and duration of the breaks specified above, by enforcing a minimum break frequency, such as "There must be a break of at least 1 hour every 12 hours". Assuming that this can be interpreted as "Within any sliding time window of 12h, there must be at least one break of at least one hour", that example would translate to the following FrequencyConstraint:

::

{ min_break_duration { seconds: 3600 } # 1 hour. max_inter_break_duration { seconds: 39600 } # 11 hours (12 - 1 = 11). }

The timing and duration of the breaks in the solution will respect all such constraints, in addition to the time windows and minimum durations already specified in the BreakRequest.

A FrequencyConstraint may in practice apply to non-consecutive breaks. For example, the following schedule honors the "1h every 12h" example:

::

 04:00 vehicle start
  .. performing travel and visits ..
 09:00 1 hour break
 10:00 end of the break
  .. performing travel and visits ..
 12:00 20-min lunch break
 12:20 end of the break
  .. performing travel and visits ..
 21:00 1 hour break
 22:00 end of the break
  .. performing travel and visits ..
 23:59 vehicle end

CapacityQuantity

Deprecated: UseVehicle.LoadLimit.Intervalinstead.

CapacityQuantityInterval

Deprecated: UseVehicle.LoadLimit.Intervalinstead.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

DataFormat

Data formats for input and output files.

DistanceLimit

A limit defining a maximum distance which can be traveled. It can be either hard or soft.

If a soft limit is defined, both soft_max_meters andcost_per_kilometer_above_soft_max must be defined and be nonnegative.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

GcsDestination

The Google Cloud Storage location where the output file will be written to.

GcsSource

The Google Cloud Storage location where the input file will be read from.

InjectedSolutionConstraint

Solution injected in the request including information about which visits must be constrained and how they must be constrained.

ConstraintRelaxation

For a group of vehicles, specifies at what threshold(s) constraints on visits will be relaxed and to which level. Shipments listed in the skipped_shipment field are constrained to be skipped; i.e., they cannot be performed.

Relaxation

If relaxations is empty, the start time and sequence of all visits on routes are fully constrained and no new visits may be inserted or added to those routes. Also, a vehicle's start and end time in routes is fully constrained, unless the vehicle is empty (i.e., has no visits and has used_if_route_is_empty set to false in the model).

relaxations(i).level specifies the constraint relaxation level applied to a visit #j that satisfies:

Similarly, the vehicle start is relaxed to relaxations(i).levelif it satisfies:

To apply a relaxation level if a visit meets thethreshold_visit_count OR the threshold_time add tworelaxations with the same level: one with onlythreshold_visit_count set and the other with onlythreshold_time set. If a visit satisfies the conditions of multiple relaxations, the most relaxed level applies. As a result, from the vehicle start through the route visits in order to the vehicle end, the relaxation level becomes more relaxed: i.e., the relaxation level is non-decreasing as the route progresses.

The timing and sequence of route visits that do not satisfy the threshold conditions of any relaxations are fully constrained and no visits may be inserted into these sequences. Also, if a vehicle start or end does not satisfy the conditions of any relaxation the time is fixed, unless the vehicle is empty.

Level

Expresses the different constraint relaxation levels, which are applied for a visit and those that follow when it satisfies the threshold conditions.

The enumeration below is in order of increasing relaxation.

    This value must not be explicitly used in `level`.
RELAX_VISIT_TIMES_AFTER_THRESHOLD (1):
    Visit start times and vehicle start/end times
    will be relaxed, but each visit remains bound to
    the same vehicle and the visit sequence must be
    observed: no visit can be inserted between them
    or before them.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD (2):
    Same as `RELAX_VISIT_TIMES_AFTER_THRESHOLD`, but the visit
    sequence is also relaxed: visits can only be performed by
    this vehicle, but can potentially become unperformed.
RELAX_ALL_AFTER_THRESHOLD (3):
    Same as `RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD`,
    but the vehicle is also relaxed: visits are completely free
    at or after the threshold time and can potentially become
    unperformed.

InputConfig

The desired input location information.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

Location

Encapsulates a location (a geographic point, and an optional heading).

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

OptimizeToursRequest

Request to be given to a tour optimization solver which defines the shipment model to solve as well as optimization parameters.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

SearchMode

Mode defining the behavior of the search, trading off latency versus solution quality. In all modes, the global request deadline is enforced.

SolvingMode

Defines how the solver should handle the request. In all modes butVALIDATE_ONLY, if the request is invalid, you will receive anINVALID_REQUEST error. Seemax_validation_errorsto cap the number of errors returned.

    *IMPORTANT*: not all infeasible shipments are returned here,
    but only the ones that are detected as infeasible during
    preprocessing.

OptimizeToursResponse

Response after solving a tour optimization problem containing the routes followed by each vehicle, the shipments which have been skipped and the overall cost of the solution.

Metrics

Overall metrics, aggregated over all routes.

CostsEntry

The abstract base class for a message.

OptimizeToursValidationError

Describes an error encountered when validating anOptimizeToursRequest.

FieldReference

Specifies a context for the validation error. A FieldReferencealways refers to a given field in this file and follows the same hierarchical structure. For example, we may specify element #2 ofstart_time_windows of vehicle #5 using:

::

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

We however omit top-level entities such as OptimizeToursRequestor ShipmentModel to avoid crowding the message.

This message has oneof_ fields (mutually exclusive fields). For each oneof, at most one member field can be set at the same time. Setting any member of the oneof automatically clears all other members.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

OutputConfig

The desired output location.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

RouteModifiers

Encapsulates a set of optional conditions to satisfy when calculating vehicle routes. This is similar to RouteModifiers in the Google Maps Platform API; see:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Shipment

The shipment of a single item, from one of its pickups to one of its deliveries. For the shipment to be considered as performed, a unique vehicle must visit one of its pickup locations (and decrease its spare capacities accordingly), then visit one of its delivery locations later on (and therefore re-increase its spare capacities accordingly).

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

Load

When performing a visit, a predefined amount may be added to the vehicle load if it's a pickup, or subtracted if it's a delivery. This message defines such amount. Seeload_demands.

LoadDemandsEntry

The abstract base class for a message.

VisitRequest

Request for a visit which can be done by a vehicle: it has a geo-location (or two, see below), opening and closing times represented by time windows, and a service duration time (time spent by the vehicle once it has arrived to pickup or drop off goods).

LoadDemandsEntry

The abstract base class for a message.

ShipmentModel

A shipment model contains a set of shipments which must be performed by a set of vehicles, while minimizing the overall cost, which is the sum of:

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

BreakRule

Deprecated: Use top levelBreakRuleinstead. Rules to generate time breaks for a vehicle (e.g. lunch breaks). A break is a contiguous period of time during which the vehicle remains idle at its current position and cannot perform any visit. A break may occur:

BreakRequest

The sequence of breaks (i.e. their number and order) that apply to each vehicle must be known beforehand. The repeatedBreakRequest\ s define that sequence, in the order in which they must occur. Their time windows (earliest_start_time /latest_start_time) may overlap, but they must be compatible with the order (this is checked).

FrequencyConstraint

One may further constrain the frequency and duration of the breaks specified above, by enforcing a minimum break frequency, such as "There must be a break of at least 1 hour every 12 hours". Assuming that this can be interpreted as "Within any sliding time window of 12h, there must be at least one break of at least one hour", that example would translate to the following FrequencyConstraint:

::

{ min_break_duration { seconds: 3600 } # 1 hour. max_inter_break_duration { seconds: 39600 } # 11 hours (12 - 1 = 11). }

The timing and duration of the breaks in the solution will respect all such constraints, in addition to the time windows and minimum durations already specified in the BreakRequest.

A FrequencyConstraint may in practice apply to non-consecutive breaks. For example, the following schedule honors the "1h every 12h" example:

::

 04:00 vehicle start
  .. performing travel and visits ..
 09:00 1 hour break
 10:00 end of the break
  .. performing travel and visits ..
 12:00 20-min lunch break
 12:20 end of the break
  .. performing travel and visits ..
 21:00 1 hour break
 22:00 end of the break
  .. performing travel and visits ..
 23:59 vehicle end

DurationDistanceMatrix

Specifies a duration and distance matrix from visit and vehicle start locations to visit and vehicle end locations.

Row

Specifies a row of the duration and distance matrix.

PrecedenceRule

A precedence rule between two events (each event is the pickup or the delivery of a shipment): the "second" event has to start at least offset_duration after "first" has started.

Several precedences can refer to the same (or related) events, e.g., "pickup of B happens after delivery of A" and "pickup of C happens after pickup of B".

Furthermore, precedences only apply when both shipments are performed and are otherwise ignored.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

ShipmentRoute

A vehicle's route can be decomposed, along the time axis, like this (we assume there are n visits):

::

 |            |            |          |       |  T[2], |        |      |
 | Transition |  Visit #0  |          |       |  V[2], |        |      |
 |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
 |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
 |            |            |          |       | T[n-1] |        |      |
 ^            ^            ^          ^       ^        ^        ^      ^

vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle start (arrival) (departure) start end start end end

Note that we make a difference between:

Invariants:

Zooming in, here is what happens during a Transition and aVisit:

::

---+-------------------------------------+-----------------------------+--> | TRANSITION[i] | VISIT[i] | | | | | * TRAVEL: the vehicle moves from | PERFORM the visit: | | VISIT[i-1].departure_location to | | | VISIT[i].arrival_location, which | * Spend some time: | | takes a given travel duration | the "visit duration". | | and distance | | | | * Load or unload | | * BREAKS: the driver may have | some quantities from the | | breaks (e.g. lunch break). | vehicle: the "demand". | | | | | * WAIT: the driver/vehicle does | | | nothing. This can happen for | | | many reasons, for example when | | | the vehicle reaches the next | | | event's destination before the | | | start of its time window | | | | | | * DELAY: right before the next | | | arrival. E.g. the vehicle and/or | | | driver spends time unloading. | | | | | ---+-------------------------------------+-----------------------------+--> ^ ^ ^ V[i-1].end V[i].start V[i].end

Lastly, here is how the TRAVEL, BREAKS, DELAY and WAIT can be arranged during a transition.

A (complex) example:

::

                              TRANSITION[i]

--++-----+-----------------------------------------------------------++--> || | | | | | | || || T | B | T | | B | | D || || r | r | r | W | r | W | e || || a | e | a | a | e | a | l || || v | a | v | i | a | i | a || || e | k | e | t | k | t | y || || l | | l | | | | || || | | | | | | || --++-----------------------------------------------------------------++-->

Break

Data representing the execution of a break.

Delay

Deprecated: UseShipmentRoute.Transition.delay_durationinstead. Time interval spent on the route resulting from aTransitionAttributes.delay.

EncodedPolyline

The encoded representation of a polyline. More information on polyline encoding can be found here:

https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

RouteCostsEntry

The abstract base class for a message.

Transition

Transition between two events on the route. See the description ofShipmentRoute.

If the vehicle does not have a start_location and/orend_location, the corresponding travel metrics are 0.

VehicleLoadsEntry

The abstract base class for a message.

TravelStep

Deprecated: UseShipmentRoute.Transitioninstead. Travel between each visit along the route: from the vehicle's start_location to the first visit'sarrival_location, then from the first visit'sdeparture_location to the second visit's arrival_location, and so on until the vehicle's end_location. This accounts only for the actual travel between visits, not counting the waiting time, the time spent performing a visit, nor the distance covered during a visit.

Invariant: travel_steps_size() == visits_size() + 1.

If the vehicle does not have a start_ and/or end_location, the corresponding travel metrics are 0 and/or empty.

VehicleLoad

Reports the actual load of the vehicle at some point along the route, for a given type (seeTransition.vehicle_loads).

Visit

A visit performed during a route. This visit corresponds to a pickup or a delivery of a Shipment.

LoadDemandsEntry

The abstract base class for a message.

ShipmentTypeIncompatibility

Specifies incompatibilties between shipments depending on their shipment_type. The appearance of incompatible shipments on the same route is restricted based on the incompatibility mode.

IncompatibilityMode

Modes defining how the appearance of incompatible shipments are restricted on the same route.

    -  If both are pickups only (no deliveries) or deliveries
       only (no pickups), they cannot share the same vehicle at
       all.
    -  If one of the shipments has a delivery and the other a
       pickup, the two shipments can share the same vehicle iff
       the former shipment is delivered before the latter is
       picked up.

ShipmentTypeRequirement

Specifies requirements between shipments based on their shipment_type. The specifics of the requirement are defined by the requirement mode.

RequirementMode

Modes defining the appearance of dependent shipments on a route.

    A "dependent" shipment pickup must therefore have either:

    -  A delivery-only "required" shipment delivered on the
       route after, or
    -  A "required" shipment picked up on the route before it,
       and if the "required" shipment has a delivery, this
       delivery must be performed after the "dependent"
       shipment's pickup.
IN_SAME_VEHICLE_AT_DELIVERY_TIME (3):
    Same as before, except the "dependent" shipments need to
    have a "required" shipment on their vehicle at the time of
    their *delivery*.

SkippedShipment

Specifies details of unperformed shipments in a solution. For trivial cases and/or if we are able to identify the cause for skipping, we report the reason here.

Reason

If we can explain why the shipment was skipped, reasons will be listed here. If the reason is not the same for all vehicles,reason will have more than 1 element. A skipped shipment cannot have duplicate reasons, i.e. where all fields are the same except for example_vehicle_index. Example:

::

reasons { code: DEMAND_EXCEEDS_VEHICLE_CAPACITY example_vehicle_index: 1 example_exceeded_capacity_type: "Apples" } reasons { code: DEMAND_EXCEEDS_VEHICLE_CAPACITY example_vehicle_index: 3 example_exceeded_capacity_type: "Pears" } reasons { code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT example_vehicle_index: 1 }

The skipped shipment is incompatible with all vehicles. The reasons may be different for all vehicles but at least one vehicle's "Apples" capacity would be exceeded (including vehicle 1), at least one vehicle's "Pears" capacity would be exceeded (including vehicle 3) and at least one vehicle's distance limit would be exceeded (including vehicle 1).

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

Code

Code identifying the reason type. The order here is meaningless. In particular, it gives no indication of whether a given reason will appear before another in the solution, if both apply.

    Note that for this computation we use the geodesic
    distances.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT (4):
    The minimum time necessary to perform this shipment,
    including travel time, wait time and service time exceeds
    the vehicle's `route_duration_limit`.

    Note: travel time is computed in the best-case scenario,
    namely as geodesic distance x 36 m/s (roughly 130 km/hour).
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT (5):
    Same as above but we only compare minimum travel time and
    the vehicle's `travel_duration_limit`.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS (6):
    The vehicle cannot perform this shipment in the best-case
    scenario (see
    `CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT` for
    time computation) if it starts at its earliest start time:
    the total time would make the vehicle end after its latest
    end time.
VEHICLE_NOT_ALLOWED (7):
    The `allowed_vehicle_indices` field of the shipment is not
    empty and this vehicle does not belong to it.

TimeWindow

Time windows constrain the time of an event, such as the arrival time at a visit, or the start and end time of a vehicle.

Hard time window bounds, start_time and end_time, enforce the earliest and latest time of the event, such thatstart_time <= event_time <= end_time. The soft time window lower bound, soft_start_time, expresses a preference for the event to happen at or after soft_start_time by incurring a cost proportional to how long before soft_start_time the event occurs. The soft time window upper bound, soft_end_time, expresses a preference for the event to happen at or before soft_end_time by incurring a cost proportional to how long after soft_end_timethe event occurs. start_time, end_time, soft_start_timeand soft_end_time should be within the global time limits (seeShipmentModel.global_start_timeandShipmentModel.global_end_time) and should respect:

::

 0 <= `start_time` <= `soft_start_time` <= `end_time` and
 0 <= `start_time` <= `soft_end_time` <= `end_time`.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

TransitionAttributes

Specifies attributes of transitions between two consecutive visits on a route. Several TransitionAttributes may apply to the same transition: in that case, all extra costs add up and the strictest constraint or limit applies (following natural "AND" semantics).

Vehicle

Models a vehicle in a shipment problem. Solving a shipment problem will build a route starting from start_location and ending atend_location for this vehicle. A route is a sequence of visits (see ShipmentRoute).

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

DurationLimit

A limit defining a maximum duration of the route of a vehicle. It can be either hard or soft.

When a soft limit field is defined, both the soft max threshold and its associated cost must be defined together.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

The abstract base class for a message.

LoadLimit

Defines a load limit applying to a vehicle, e.g. "this truck may only carry up to 3500 kg". Seeload_limits.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

Interval

Interval of acceptable load amounts.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields

LoadLimitsEntry

The abstract base class for a message.

TravelMode

Travel modes which can be used by vehicles.

These should be a subset of the Google Maps Platform Routes Preferred API travel modes, see:https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

UnloadingPolicy

Policy on how a vehicle can be unloaded. Applies only to shipments having both a pickup and a delivery.

Other shipments are free to occur anywhere on the route independent of unloading_policy.

Waypoint

Encapsulates a waypoint. Waypoints mark arrival and departure locations of VisitRequests, and start and end locations of Vehicles.

This message has oneof_ fields (mutually exclusive fields). For each oneof, at most one member field can be set at the same time. Setting any member of the oneof automatically clears all other members.

.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields