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
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.
google.protobuf.timestamp_pb2.Timestamp
The time at or after which the relaxation level may be
applied.
threshold_visit_count
int
The number of visits at or after which the relaxation
level may be applied. If threshold_visit_count is 0
(or unset), the level may be applied directly at the
vehicle start.
If it is route.visits_size() + 1, the level may only
be applied to the vehicle end. If it is more than
route.visits_size() + 1, level is not applied at all
for that route.
Classes
Level
Level(value)
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.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[],[],null,["# Class Relaxation (1.11.2)\n\nVersion latestkeyboard_arrow_down\n\n- [1.11.2 (latest)](/python/docs/reference/optimization/latest/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.11.0](/python/docs/reference/optimization/1.11.0/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.10.0](/python/docs/reference/optimization/1.10.0/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.9.1](/python/docs/reference/optimization/1.9.1/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.8.5](/python/docs/reference/optimization/1.8.5/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.7.0](/python/docs/reference/optimization/1.7.0/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.6.0](/python/docs/reference/optimization/1.6.0/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.5.0](/python/docs/reference/optimization/1.5.0/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.4.3](/python/docs/reference/optimization/1.4.3/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.3.2](/python/docs/reference/optimization/1.3.2/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.2.0](/python/docs/reference/optimization/1.2.0/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.1.3](/python/docs/reference/optimization/1.1.3/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [1.0.1](/python/docs/reference/optimization/1.0.1/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation)\n- [0.1.1](/python/docs/reference/optimization/0.1.1/google.cloud.optimization_v1.types.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation) \n\n Relaxation(mapping=None, *, ignore_unknown_fields=False, **kwargs)\n\nIf `relaxations` is empty, the start time and sequence of all\nvisits on `routes` are fully constrained and no new visits may be\ninserted or added to those routes. Also, a vehicle's start and end\ntime in `routes` is fully constrained, unless the vehicle is empty\n(i.e., has no visits and has `used_if_route_is_empty` set to false\nin the model).\n\n`relaxations(i).level` specifies the constraint relaxation level\napplied to a visit #j that satisfies:\n\n- `route.visits(j).start_time \u003e= relaxations(i).threshold_time` AND\n- `j + 1 \u003e= relaxations(i).threshold_visit_count`\n\nSimilarly, the vehicle start is relaxed to `relaxations(i).level`\nif it satisfies:\n\n- `vehicle_start_time \u003e= relaxations(i).threshold_time` AND\n- `relaxations(i).threshold_visit_count == 0` and the vehicle end is relaxed to `relaxations(i).level` if it satisfies:\n- `vehicle_end_time \u003e= relaxations(i).threshold_time` AND\n- `route.visits_size() + 1 \u003e= relaxations(i).threshold_visit_count`\n\nTo apply a relaxation level if a visit meets the\n`threshold_visit_count` OR the `threshold_time` add two\n`relaxations` with the same `level`: one with only\n`threshold_visit_count` set and the other with only\n`threshold_time` set. If a visit satisfies the conditions of\nmultiple `relaxations`, the most relaxed level applies. As a\nresult, from the vehicle start through the route visits in order to\nthe vehicle end, the relaxation level becomes more relaxed: i.e.,\nthe relaxation level is non-decreasing as the route progresses.\n\nThe timing and sequence of route visits that do not satisfy the\nthreshold conditions of any `relaxations` are fully constrained\nand no visits may be inserted into these sequences. Also, if a\nvehicle start or end does not satisfy the conditions of any\nrelaxation the time is fixed, unless the vehicle is empty.\n\nClasses\n-------\n\n### Level\n\n Level(value)\n\nExpresses the different constraint relaxation levels, which\nare applied for a visit and those that follow when it satisfies\nthe threshold conditions.\n\nThe enumeration below is in order of increasing relaxation. \n\n This value must not be explicitly used in `level`.\n RELAX_VISIT_TIMES_AFTER_THRESHOLD (1):\n Visit start times and vehicle start/end times\n will be relaxed, but each visit remains bound to\n the same vehicle and the visit sequence must be\n observed: no visit can be inserted between them\n or before them.\n RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD (2):\n Same as `RELAX_VISIT_TIMES_AFTER_THRESHOLD`, but the visit\n sequence is also relaxed: visits can only be performed by\n this vehicle, but can potentially become unperformed.\n RELAX_ALL_AFTER_THRESHOLD (3):\n Same as `RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD`,\n but the vehicle is also relaxed: visits are completely free\n at or after the threshold time and can potentially become\n unperformed."]]