ShipmentModel(mapping=None, *, ignore_unknown_fields=False, **kwargs)
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:
- the cost of routing the vehicles (sum of cost per total time, cost per travel time, and fixed cost over all vehicles).
- the unperformed shipment penalties.
- the cost of the global duration of the shipments
.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields
Attributes
Name | Description |
shipments |
MutableSequence[google.cloud.optimization_v1.types.Shipment]
Set of shipments which must be performed in the model. |
vehicles |
MutableSequence[google.cloud.optimization_v1.types.Vehicle]
Set of vehicles which can be used to perform visits. |
max_active_vehicles |
int
Constrains the maximum number of active vehicles. A vehicle is active if its route performs at least one shipment. This can be used to limit the number of routes in the case where there are fewer drivers than vehicles and that the fleet of vehicles is heterogeneous. The optimization will then select the best subset of vehicles to use. Must be strictly positive. This field is a member of oneof _ _max_active_vehicles .
|
global_start_time |
google.protobuf.timestamp_pb2.Timestamp
Global start and end time of the model: no times outside of this range can be considered valid. The model's time span must be less than a year, i.e. the global_end_time and the global_start_time must be
within 31536000 seconds of each other.
When using cost_per_*hour fields, you might want to set
this window to a smaller interval to increase performance
(eg. if you model a single day, you should set the global
time limits to that day). If unset, 00:00:00 UTC, January 1,
1970 (i.e. seconds: 0, nanos: 0) is used as default.
|
global_end_time |
google.protobuf.timestamp_pb2.Timestamp
If unset, 00:00:00 UTC, January 1, 1971 (i.e. seconds: 31536000, nanos: 0) is used as default. |
global_duration_cost_per_hour |
float
The "global duration" of the overall plan is the difference between the earliest effective start time and the latest effective end time of all vehicles. Users can assign a cost per hour to that quantity to try and optimize for earliest job completion, for example. This cost must be in the same unit as Shipment.penalty_cost. |
duration_distance_matrices |
MutableSequence[google.cloud.optimization_v1.types.ShipmentModel.DurationDistanceMatrix]
Specifies duration and distance matrices used in the model. If this field is empty, Google Maps or geodesic distances will be used instead, depending on the value of the use_geodesic_distances field. If it is not empty,
use_geodesic_distances cannot be true and neither
duration_distance_matrix_src_tags nor
duration_distance_matrix_dst_tags can be empty.
Usage examples:
- There are two locations: locA and locB.
- 1 vehicle starting its route at locA and ending it at
locA.
- 1 pickup visit request at locB.
::
model {
vehicles { start_tags: "locA" end_tags: "locA" }
shipments { pickups { tags: "locB" } }
duration_distance_matrix_src_tags: "locA"
duration_distance_matrix_src_tags: "locB"
duration_distance_matrix_dst_tags: "locA"
duration_distance_matrix_dst_tags: "locB"
duration_distance_matrices {
rows { # from: locA
durations { seconds: 0 } meters: 0 # to: locA
durations { seconds: 100 } meters: 1000 # to: locB
}
rows { # from: locB
durations { seconds: 102 } meters: 990 # to: locA
durations { seconds: 0 } meters: 0 # to: locB
}
}
}
- There are three locations: locA, locB and locC.
- 1 vehicle starting its route at locA and ending it at
locB, using matrix "fast".
- 1 vehicle starting its route at locB and ending it at
locB, using matrix "slow".
- 1 vehicle starting its route at locB and ending it at
locB, using matrix "fast".
- 1 pickup visit request at locC.
::
model {
vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
shipments { pickups { tags: "locC" } }
duration_distance_matrix_src_tags: "locA"
duration_distance_matrix_src_tags: "locB"
duration_distance_matrix_src_tags: "locC"
duration_distance_matrix_dst_tags: "locB"
duration_distance_matrix_dst_tags: "locC"
duration_distance_matrices {
vehicle_start_tag: "fast"
rows { # from: locA
durations { seconds: 1000 } meters: 2000 # to: locB
durations { seconds: 600 } meters: 1000 # to: locC
}
rows { # from: locB
durations { seconds: 0 } meters: 0 # to: locB
durations { seconds: 700 } meters: 1200 # to: locC
}
rows { # from: locC
durations { seconds: 702 } meters: 1190 # to: locB
durations { seconds: 0 } meters: 0 # to: locC
}
}
duration_distance_matrices {
vehicle_start_tag: "slow"
rows { # from: locA
durations { seconds: 1800 } meters: 2001 # to: locB
durations { seconds: 900 } meters: 1002 # to: locC
}
rows { # from: locB
durations { seconds: 0 } meters: 0 # to: locB
durations { seconds: 1000 } meters: 1202 # to: locC
}
rows { # from: locC
durations { seconds: 1001 } meters: 1195 # to: locB
durations { seconds: 0 } meters: 0 # to: locC
}
}
}
|
duration_distance_matrix_src_tags |
MutableSequence[str]
Tags defining the sources of the duration and distance matrices; duration_distance_matrices(i).rows(j) defines
durations and distances from visits with tag
duration_distance_matrix_src_tags(j) to other visits in
matrix i.
Tags correspond to
VisitRequest.tags
or
Vehicle.start_tags.
A given VisitRequest or Vehicle must match exactly
one tag in this field. Note that a Vehicle 's source,
destination and matrix tags may be the same; similarly a
VisitRequest 's source and destination tags may be the
same. All tags must be different and cannot be empty
strings. If this field is not empty, then
duration_distance_matrices must not be empty.
|
duration_distance_matrix_dst_tags |
MutableSequence[str]
Tags defining the destinations of the duration and distance matrices; duration_distance_matrices(i).rows(j).durations(k)
(resp. duration_distance_matrices(i).rows(j).meters(k))
defines the duration (resp. the distance) of the travel from
visits with tag duration_distance_matrix_src_tags(j) to
visits with tag duration_distance_matrix_dst_tags(k) in
matrix i.
Tags correspond to
VisitRequest.tags
or
Vehicle.start_tags.
A given VisitRequest or Vehicle must match exactly
one tag in this field. Note that a Vehicle 's source,
destination and matrix tags may be the same; similarly a
VisitRequest 's source and destination tags may be the
same. All tags must be different and cannot be empty
strings. If this field is not empty, then
duration_distance_matrices must not be empty.
|
transition_attributes |
MutableSequence[google.cloud.optimization_v1.types.TransitionAttributes]
Transition attributes added to the model. |
shipment_type_incompatibilities |
MutableSequence[google.cloud.optimization_v1.types.ShipmentTypeIncompatibility]
Sets of incompatible shipment_types (see ShipmentTypeIncompatibility ).
|
shipment_type_requirements |
MutableSequence[google.cloud.optimization_v1.types.ShipmentTypeRequirement]
Sets of shipment_type requirements (see
ShipmentTypeRequirement ).
|
precedence_rules |
MutableSequence[google.cloud.optimization_v1.types.ShipmentModel.PrecedenceRule]
Set of precedence rules which must be enforced in the model. |
break_rules |
MutableSequence[google.cloud.optimization_v1.types.ShipmentModel.BreakRule]
Deprecated: No longer used. Set of break rules used in the model. Each vehicle specifies the BreakRule that applies
to it via the
Vehicle.break_rule_indices
field (which must be a singleton).
|
Classes
BreakRule
BreakRule(mapping=None, *, ignore_unknown_fields=False, **kwargs)
Deprecated: Use top level [BreakRule][] instead. 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:
- during the travel between two visits (which includes the time right before or right after a visit, but not in the middle of a visit), in which case it extends the corresponding transit time between the visits,
- or before the vehicle start (the vehicle may not start in the middle of a break), in which case it does not affect the vehicle start time.
- or after the vehicle end (ditto, with the vehicle end time).
DurationDistanceMatrix
DurationDistanceMatrix(mapping=None, *, ignore_unknown_fields=False, **kwargs)
Specifies a duration and distance matrix from visit and vehicle start locations to visit and vehicle end locations.
PrecedenceRule
PrecedenceRule(mapping=None, *, ignore_unknown_fields=False, **kwargs)
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