Class: Google::Cloud::Optimization::V1::InjectedSolutionConstraint::ConstraintRelaxation

Inherits:
Object
  • Object
show all
Extended by:
Protobuf::MessageExts::ClassMethods
Includes:
Protobuf::MessageExts
Defined in:
proto_docs/google/cloud/optimization/v1/fleet_routing.rb

Overview

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.

Defined Under Namespace

Classes: Relaxation

Instance Attribute Summary collapse

Instance Attribute Details

#relaxations::Array<::Google::Cloud::Optimization::V1::InjectedSolutionConstraint::ConstraintRelaxation::Relaxation>

Returns All the visit constraint relaxations that will apply to visits on routes with vehicles in vehicle_indices.

Returns:



2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
# File 'proto_docs/google/cloud/optimization/v1/fleet_routing.rb', line 2564

class ConstraintRelaxation
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # 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.
  # @!attribute [rw] level
  #   @return [::Google::Cloud::Optimization::V1::InjectedSolutionConstraint::ConstraintRelaxation::Relaxation::Level]
  #     The constraint relaxation level that applies when the conditions
  #     at or after `threshold_time` AND at least `threshold_visit_count` are
  #     satisfied.
  # @!attribute [rw] threshold_time
  #   @return [::Google::Protobuf::Timestamp]
  #     The time at or after which the relaxation `level` may be applied.
  # @!attribute [rw] threshold_visit_count
  #   @return [::Integer]
  #     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.
  class Relaxation
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # 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.
    module Level
      # Implicit default relaxation level: no constraints are relaxed,
      # i.e., all visits are fully constrained.
      #
      # This value must not be explicitly used in `level`.
      LEVEL_UNSPECIFIED = 0

      # 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_AFTER_THRESHOLD = 1

      # 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_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD = 2

      # 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.
      RELAX_ALL_AFTER_THRESHOLD = 3
    end
  end
end

#vehicle_indices::Array<::Integer>

Returns 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).

Returns:

  • (::Array<::Integer>)

    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).



2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
# File 'proto_docs/google/cloud/optimization/v1/fleet_routing.rb', line 2564

class ConstraintRelaxation
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # 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.
  # @!attribute [rw] level
  #   @return [::Google::Cloud::Optimization::V1::InjectedSolutionConstraint::ConstraintRelaxation::Relaxation::Level]
  #     The constraint relaxation level that applies when the conditions
  #     at or after `threshold_time` AND at least `threshold_visit_count` are
  #     satisfied.
  # @!attribute [rw] threshold_time
  #   @return [::Google::Protobuf::Timestamp]
  #     The time at or after which the relaxation `level` may be applied.
  # @!attribute [rw] threshold_visit_count
  #   @return [::Integer]
  #     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.
  class Relaxation
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # 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.
    module Level
      # Implicit default relaxation level: no constraints are relaxed,
      # i.e., all visits are fully constrained.
      #
      # This value must not be explicitly used in `level`.
      LEVEL_UNSPECIFIED = 0

      # 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_AFTER_THRESHOLD = 1

      # 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_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD = 2

      # 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.
      RELAX_ALL_AFTER_THRESHOLD = 3
    end
  end
end