Class ConstraintRelaxation (1.1.0)

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

NameDescription
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 > ConstraintRelaxation

Classes

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 AND
  • j + 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 AND
  • relaxations(i).threshold_visit_count == 0 and the vehicle end is relaxed to relaxations(i).level if it satisfies:
  • vehicle_end_time >= relaxations(i).threshold_time AND
  • route.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.