ConstraintRelaxation(mapping=None, *, ignore_unknown_fields=False, **kwargs)
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.
Attributes
Name | Description |
relaxations |
Sequence[google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation]
All the visit constraint relaxations that will apply to visits on routes with vehicles in ``vehicle_indices``. |
vehicle_indices |
Sequence[int]
Specifies the vehicle indices to which the visit constraint ``relaxations`` apply. If empty, this is considered the default and the ``relaxations`` apply to all vehicles that are not specified in other ``constraint_relaxations``. There can be at most one default, i.e., at most one constraint relaxation field is allowed empty ``vehicle_indices``. A vehicle index can only be listed once, even within several ``constraint_relaxations``. A vehicle index is mapped the same as ShipmentRoute.vehicle_index, if ``interpret_injected_solutions_using_labels`` is true (see ``fields`` comment). |
Inheritance
builtins.object > proto.message.Message > ConstraintRelaxationClasses
Relaxation
Relaxation(mapping=None, *, ignore_unknown_fields=False, **kwargs)
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:
route.visits(j).start_time >= relaxations(i).threshold_time
ANDj + 1 >= relaxations(i).threshold_visit_count
Similarly, the vehicle start is relaxed to relaxations(i).level
if it satisfies:
vehicle_start_time >= relaxations(i).threshold_time
ANDrelaxations(i).threshold_visit_count == 0
and the vehicle end is relaxed torelaxations(i).level
if it satisfies:vehicle_end_time >= relaxations(i).threshold_time
ANDroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
To apply a relaxation level if a visit meets the
threshold_visit_count
OR the threshold_time
add two
relaxations
with the same level
: one with only
threshold_visit_count
set and the other with only
threshold_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.