# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/cloud/optimization/v1/fleet_routing.proto

require 'google/api/annotations_pb'
require 'google/api/client_pb'
require 'google/api/field_behavior_pb'
require 'google/cloud/optimization/v1/async_model_pb'
require 'google/longrunning/operations_pb'
require 'google/protobuf/duration_pb'
require 'google/protobuf/timestamp_pb'
require 'google/type/latlng_pb'
require 'google/protobuf'

Google::Protobuf::DescriptorPool.generated_pool.build do
  add_file("google/cloud/optimization/v1/fleet_routing.proto", :syntax => :proto3) do
    add_message "google.cloud.optimization.v1.OptimizeToursRequest" do
      optional :parent, :string, 1
      optional :timeout, :message, 2, "google.protobuf.Duration"
      optional :model, :message, 3, "google.cloud.optimization.v1.ShipmentModel"
      optional :solving_mode, :enum, 4, "google.cloud.optimization.v1.OptimizeToursRequest.SolvingMode"
      proto3_optional :max_validation_errors, :int32, 5
      optional :search_mode, :enum, 6, "google.cloud.optimization.v1.OptimizeToursRequest.SearchMode"
      repeated :injected_first_solution_routes, :message, 7, "google.cloud.optimization.v1.ShipmentRoute"
      optional :injected_solution_constraint, :message, 8, "google.cloud.optimization.v1.InjectedSolutionConstraint"
      repeated :refresh_details_routes, :message, 9, "google.cloud.optimization.v1.ShipmentRoute"
      optional :interpret_injected_solutions_using_labels, :bool, 10
      optional :consider_road_traffic, :bool, 11
      optional :populate_polylines, :bool, 12
      optional :populate_transition_polylines, :bool, 13
      optional :allow_large_deadline_despite_interruption_risk, :bool, 14
      optional :use_geodesic_distances, :bool, 15
      proto3_optional :geodesic_meters_per_second, :double, 16
      optional :label, :string, 17
      optional :populate_travel_step_polylines, :bool, 20
    end
    add_enum "google.cloud.optimization.v1.OptimizeToursRequest.SolvingMode" do
      value :DEFAULT_SOLVE, 0
      value :VALIDATE_ONLY, 1
      value :DETECT_SOME_INFEASIBLE_SHIPMENTS, 2
    end
    add_enum "google.cloud.optimization.v1.OptimizeToursRequest.SearchMode" do
      value :SEARCH_MODE_UNSPECIFIED, 0
      value :RETURN_FAST, 1
      value :CONSUME_ALL_AVAILABLE_TIME, 2
    end
    add_message "google.cloud.optimization.v1.OptimizeToursResponse" do
      repeated :routes, :message, 1, "google.cloud.optimization.v1.ShipmentRoute"
      optional :request_label, :string, 3
      repeated :skipped_shipments, :message, 4, "google.cloud.optimization.v1.SkippedShipment"
      repeated :validation_errors, :message, 5, "google.cloud.optimization.v1.OptimizeToursValidationError"
      optional :metrics, :message, 6, "google.cloud.optimization.v1.OptimizeToursResponse.Metrics"
      optional :total_cost, :double, 2
    end
    add_message "google.cloud.optimization.v1.OptimizeToursResponse.Metrics" do
      optional :aggregated_route_metrics, :message, 1, "google.cloud.optimization.v1.AggregatedMetrics"
      optional :skipped_mandatory_shipment_count, :int32, 2
      optional :used_vehicle_count, :int32, 3
      optional :earliest_vehicle_start_time, :message, 4, "google.protobuf.Timestamp"
      optional :latest_vehicle_end_time, :message, 5, "google.protobuf.Timestamp"
      map :costs, :string, :double, 10
      optional :total_cost, :double, 6
    end
    add_message "google.cloud.optimization.v1.BatchOptimizeToursRequest" do
      optional :parent, :string, 1
      repeated :model_configs, :message, 2, "google.cloud.optimization.v1.BatchOptimizeToursRequest.AsyncModelConfig"
    end
    add_message "google.cloud.optimization.v1.BatchOptimizeToursRequest.AsyncModelConfig" do
      optional :display_name, :string, 1
      optional :input_config, :message, 2, "google.cloud.optimization.v1.InputConfig"
      optional :output_config, :message, 3, "google.cloud.optimization.v1.OutputConfig"
      optional :enable_checkpoints, :bool, 4
    end
    add_message "google.cloud.optimization.v1.BatchOptimizeToursResponse" do
    end
    add_message "google.cloud.optimization.v1.ShipmentModel" do
      repeated :shipments, :message, 1, "google.cloud.optimization.v1.Shipment"
      repeated :vehicles, :message, 2, "google.cloud.optimization.v1.Vehicle"
      proto3_optional :max_active_vehicles, :int32, 4
      optional :global_start_time, :message, 5, "google.protobuf.Timestamp"
      optional :global_end_time, :message, 6, "google.protobuf.Timestamp"
      optional :global_duration_cost_per_hour, :double, 7
      repeated :duration_distance_matrices, :message, 8, "google.cloud.optimization.v1.ShipmentModel.DurationDistanceMatrix"
      repeated :duration_distance_matrix_src_tags, :string, 9
      repeated :duration_distance_matrix_dst_tags, :string, 10
      repeated :transition_attributes, :message, 11, "google.cloud.optimization.v1.TransitionAttributes"
      repeated :shipment_type_incompatibilities, :message, 12, "google.cloud.optimization.v1.ShipmentTypeIncompatibility"
      repeated :shipment_type_requirements, :message, 13, "google.cloud.optimization.v1.ShipmentTypeRequirement"
      repeated :precedence_rules, :message, 14, "google.cloud.optimization.v1.ShipmentModel.PrecedenceRule"
      repeated :break_rules, :message, 15, "google.cloud.optimization.v1.ShipmentModel.BreakRule"
    end
    add_message "google.cloud.optimization.v1.ShipmentModel.DurationDistanceMatrix" do
      repeated :rows, :message, 1, "google.cloud.optimization.v1.ShipmentModel.DurationDistanceMatrix.Row"
      optional :vehicle_start_tag, :string, 2
    end
    add_message "google.cloud.optimization.v1.ShipmentModel.DurationDistanceMatrix.Row" do
      repeated :durations, :message, 1, "google.protobuf.Duration"
      repeated :meters, :double, 2
    end
    add_message "google.cloud.optimization.v1.ShipmentModel.PrecedenceRule" do
      proto3_optional :first_index, :int32, 1
      optional :first_is_delivery, :bool, 3
      proto3_optional :second_index, :int32, 2
      optional :second_is_delivery, :bool, 4
      optional :offset_duration, :message, 5, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.ShipmentModel.BreakRule" do
      repeated :break_requests, :message, 1, "google.cloud.optimization.v1.ShipmentModel.BreakRule.BreakRequest"
      repeated :frequency_constraints, :message, 2, "google.cloud.optimization.v1.ShipmentModel.BreakRule.FrequencyConstraint"
    end
    add_message "google.cloud.optimization.v1.ShipmentModel.BreakRule.BreakRequest" do
      optional :earliest_start_time, :message, 1, "google.protobuf.Timestamp"
      optional :latest_start_time, :message, 2, "google.protobuf.Timestamp"
      optional :min_duration, :message, 3, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.ShipmentModel.BreakRule.FrequencyConstraint" do
      optional :min_break_duration, :message, 1, "google.protobuf.Duration"
      optional :max_inter_break_duration, :message, 2, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.Shipment" do
      repeated :pickups, :message, 1, "google.cloud.optimization.v1.Shipment.VisitRequest"
      repeated :deliveries, :message, 2, "google.cloud.optimization.v1.Shipment.VisitRequest"
      map :load_demands, :string, :message, 14, "google.cloud.optimization.v1.Shipment.Load"
      proto3_optional :penalty_cost, :double, 4
      repeated :allowed_vehicle_indices, :int32, 5
      repeated :costs_per_vehicle, :double, 6
      repeated :costs_per_vehicle_indices, :int32, 7
      proto3_optional :pickup_to_delivery_relative_detour_limit, :double, 8
      optional :pickup_to_delivery_absolute_detour_limit, :message, 9, "google.protobuf.Duration"
      optional :pickup_to_delivery_time_limit, :message, 10, "google.protobuf.Duration"
      optional :shipment_type, :string, 11
      optional :label, :string, 12
      optional :ignore, :bool, 13
      repeated :demands, :message, 3, "google.cloud.optimization.v1.CapacityQuantity"
    end
    add_message "google.cloud.optimization.v1.Shipment.VisitRequest" do
      optional :arrival_location, :message, 1, "google.type.LatLng"
      optional :arrival_waypoint, :message, 2, "google.cloud.optimization.v1.Waypoint"
      optional :departure_location, :message, 3, "google.type.LatLng"
      optional :departure_waypoint, :message, 4, "google.cloud.optimization.v1.Waypoint"
      repeated :tags, :string, 5
      repeated :time_windows, :message, 6, "google.cloud.optimization.v1.TimeWindow"
      optional :duration, :message, 7, "google.protobuf.Duration"
      optional :cost, :double, 8
      map :load_demands, :string, :message, 12, "google.cloud.optimization.v1.Shipment.Load"
      repeated :visit_types, :string, 10
      optional :label, :string, 11
      repeated :demands, :message, 9, "google.cloud.optimization.v1.CapacityQuantity"
    end
    add_message "google.cloud.optimization.v1.Shipment.Load" do
      optional :amount, :int64, 2
    end
    add_message "google.cloud.optimization.v1.ShipmentTypeIncompatibility" do
      repeated :types, :string, 1
      optional :incompatibility_mode, :enum, 2, "google.cloud.optimization.v1.ShipmentTypeIncompatibility.IncompatibilityMode"
    end
    add_enum "google.cloud.optimization.v1.ShipmentTypeIncompatibility.IncompatibilityMode" do
      value :INCOMPATIBILITY_MODE_UNSPECIFIED, 0
      value :NOT_PERFORMED_BY_SAME_VEHICLE, 1
      value :NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY, 2
    end
    add_message "google.cloud.optimization.v1.ShipmentTypeRequirement" do
      repeated :required_shipment_type_alternatives, :string, 1
      repeated :dependent_shipment_types, :string, 2
      optional :requirement_mode, :enum, 3, "google.cloud.optimization.v1.ShipmentTypeRequirement.RequirementMode"
    end
    add_enum "google.cloud.optimization.v1.ShipmentTypeRequirement.RequirementMode" do
      value :REQUIREMENT_MODE_UNSPECIFIED, 0
      value :PERFORMED_BY_SAME_VEHICLE, 1
      value :IN_SAME_VEHICLE_AT_PICKUP_TIME, 2
      value :IN_SAME_VEHICLE_AT_DELIVERY_TIME, 3
    end
    add_message "google.cloud.optimization.v1.Vehicle" do
      optional :travel_mode, :enum, 1, "google.cloud.optimization.v1.Vehicle.TravelMode"
      optional :start_location, :message, 3, "google.type.LatLng"
      optional :start_waypoint, :message, 4, "google.cloud.optimization.v1.Waypoint"
      optional :end_location, :message, 5, "google.type.LatLng"
      optional :end_waypoint, :message, 6, "google.cloud.optimization.v1.Waypoint"
      repeated :start_tags, :string, 7
      repeated :end_tags, :string, 8
      repeated :start_time_windows, :message, 9, "google.cloud.optimization.v1.TimeWindow"
      repeated :end_time_windows, :message, 10, "google.cloud.optimization.v1.TimeWindow"
      proto3_optional :travel_duration_multiple, :double, 11
      optional :unloading_policy, :enum, 12, "google.cloud.optimization.v1.Vehicle.UnloadingPolicy"
      map :load_limits, :string, :message, 30, "google.cloud.optimization.v1.Vehicle.LoadLimit"
      optional :cost_per_hour, :double, 16
      optional :cost_per_traveled_hour, :double, 17
      optional :cost_per_kilometer, :double, 18
      optional :fixed_cost, :double, 19
      optional :used_if_route_is_empty, :bool, 20
      optional :route_duration_limit, :message, 21, "google.cloud.optimization.v1.Vehicle.DurationLimit"
      optional :travel_duration_limit, :message, 22, "google.cloud.optimization.v1.Vehicle.DurationLimit"
      optional :route_distance_limit, :message, 23, "google.cloud.optimization.v1.DistanceLimit"
      map :extra_visit_duration_for_visit_type, :string, :message, 24, "google.protobuf.Duration"
      optional :break_rule, :message, 25, "google.cloud.optimization.v1.BreakRule"
      optional :label, :string, 27
      optional :ignore, :bool, 28
      repeated :break_rule_indices, :int32, 29
      repeated :capacities, :message, 13, "google.cloud.optimization.v1.CapacityQuantity"
      repeated :start_load_intervals, :message, 14, "google.cloud.optimization.v1.CapacityQuantityInterval"
      repeated :end_load_intervals, :message, 15, "google.cloud.optimization.v1.CapacityQuantityInterval"
    end
    add_message "google.cloud.optimization.v1.Vehicle.LoadLimit" do
      proto3_optional :max_load, :int64, 1
      optional :soft_max_load, :int64, 2
      optional :cost_per_unit_above_soft_max, :double, 3
      optional :start_load_interval, :message, 4, "google.cloud.optimization.v1.Vehicle.LoadLimit.Interval"
      optional :end_load_interval, :message, 5, "google.cloud.optimization.v1.Vehicle.LoadLimit.Interval"
    end
    add_message "google.cloud.optimization.v1.Vehicle.LoadLimit.Interval" do
      optional :min, :int64, 1
      proto3_optional :max, :int64, 2
    end
    add_message "google.cloud.optimization.v1.Vehicle.DurationLimit" do
      optional :max_duration, :message, 1, "google.protobuf.Duration"
      optional :soft_max_duration, :message, 2, "google.protobuf.Duration"
      proto3_optional :cost_per_hour_after_soft_max, :double, 3
      optional :quadratic_soft_max_duration, :message, 4, "google.protobuf.Duration"
      proto3_optional :cost_per_square_hour_after_quadratic_soft_max, :double, 5
    end
    add_enum "google.cloud.optimization.v1.Vehicle.TravelMode" do
      value :TRAVEL_MODE_UNSPECIFIED, 0
      value :DRIVING, 1
    end
    add_enum "google.cloud.optimization.v1.Vehicle.UnloadingPolicy" do
      value :UNLOADING_POLICY_UNSPECIFIED, 0
      value :LAST_IN_FIRST_OUT, 1
      value :FIRST_IN_FIRST_OUT, 2
    end
    add_message "google.cloud.optimization.v1.TimeWindow" do
      optional :start_time, :message, 1, "google.protobuf.Timestamp"
      optional :end_time, :message, 2, "google.protobuf.Timestamp"
      optional :soft_start_time, :message, 3, "google.protobuf.Timestamp"
      optional :soft_end_time, :message, 4, "google.protobuf.Timestamp"
      proto3_optional :cost_per_hour_before_soft_start_time, :double, 5
      proto3_optional :cost_per_hour_after_soft_end_time, :double, 6
    end
    add_message "google.cloud.optimization.v1.CapacityQuantity" do
      optional :type, :string, 1
      optional :value, :int64, 2
    end
    add_message "google.cloud.optimization.v1.CapacityQuantityInterval" do
      optional :type, :string, 1
      proto3_optional :min_value, :int64, 2
      proto3_optional :max_value, :int64, 3
    end
    add_message "google.cloud.optimization.v1.DistanceLimit" do
      proto3_optional :max_meters, :int64, 1
      proto3_optional :soft_max_meters, :int64, 2
      proto3_optional :cost_per_kilometer_above_soft_max, :double, 3
    end
    add_message "google.cloud.optimization.v1.TransitionAttributes" do
      optional :src_tag, :string, 1
      optional :excluded_src_tag, :string, 2
      optional :dst_tag, :string, 3
      optional :excluded_dst_tag, :string, 4
      optional :cost, :double, 5
      optional :cost_per_kilometer, :double, 6
      optional :distance_limit, :message, 7, "google.cloud.optimization.v1.DistanceLimit"
      optional :delay, :message, 8, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.Waypoint" do
      optional :side_of_road, :bool, 3
      oneof :location_type do
        optional :location, :message, 1, "google.cloud.optimization.v1.Location"
        optional :place_id, :string, 2
      end
    end
    add_message "google.cloud.optimization.v1.Location" do
      optional :lat_lng, :message, 1, "google.type.LatLng"
      proto3_optional :heading, :int32, 2
    end
    add_message "google.cloud.optimization.v1.BreakRule" do
      repeated :break_requests, :message, 1, "google.cloud.optimization.v1.BreakRule.BreakRequest"
      repeated :frequency_constraints, :message, 2, "google.cloud.optimization.v1.BreakRule.FrequencyConstraint"
    end
    add_message "google.cloud.optimization.v1.BreakRule.BreakRequest" do
      optional :earliest_start_time, :message, 1, "google.protobuf.Timestamp"
      optional :latest_start_time, :message, 2, "google.protobuf.Timestamp"
      optional :min_duration, :message, 3, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.BreakRule.FrequencyConstraint" do
      optional :min_break_duration, :message, 1, "google.protobuf.Duration"
      optional :max_inter_break_duration, :message, 2, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute" do
      optional :vehicle_index, :int32, 1
      optional :vehicle_label, :string, 2
      optional :vehicle_start_time, :message, 5, "google.protobuf.Timestamp"
      optional :vehicle_end_time, :message, 6, "google.protobuf.Timestamp"
      repeated :visits, :message, 7, "google.cloud.optimization.v1.ShipmentRoute.Visit"
      repeated :transitions, :message, 8, "google.cloud.optimization.v1.ShipmentRoute.Transition"
      optional :has_traffic_infeasibilities, :bool, 9
      optional :route_polyline, :message, 10, "google.cloud.optimization.v1.ShipmentRoute.EncodedPolyline"
      repeated :breaks, :message, 11, "google.cloud.optimization.v1.ShipmentRoute.Break"
      optional :metrics, :message, 12, "google.cloud.optimization.v1.AggregatedMetrics"
      map :route_costs, :string, :double, 17
      optional :route_total_cost, :double, 18
      repeated :end_loads, :message, 13, "google.cloud.optimization.v1.CapacityQuantity"
      repeated :travel_steps, :message, 14, "google.cloud.optimization.v1.ShipmentRoute.TravelStep"
      optional :vehicle_detour, :message, 15, "google.protobuf.Duration"
      optional :delay_before_vehicle_end, :message, 16, "google.cloud.optimization.v1.ShipmentRoute.Delay"
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute.Delay" do
      optional :start_time, :message, 1, "google.protobuf.Timestamp"
      optional :duration, :message, 2, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute.Visit" do
      optional :shipment_index, :int32, 1
      optional :is_pickup, :bool, 2
      optional :visit_request_index, :int32, 3
      optional :start_time, :message, 4, "google.protobuf.Timestamp"
      map :load_demands, :string, :message, 11, "google.cloud.optimization.v1.Shipment.Load"
      optional :detour, :message, 6, "google.protobuf.Duration"
      optional :shipment_label, :string, 7
      optional :visit_label, :string, 8
      repeated :arrival_loads, :message, 9, "google.cloud.optimization.v1.CapacityQuantity"
      optional :delay_before_start, :message, 10, "google.cloud.optimization.v1.ShipmentRoute.Delay"
      repeated :demands, :message, 5, "google.cloud.optimization.v1.CapacityQuantity"
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute.Transition" do
      optional :travel_duration, :message, 1, "google.protobuf.Duration"
      optional :travel_distance_meters, :double, 2
      optional :traffic_info_unavailable, :bool, 3
      optional :delay_duration, :message, 4, "google.protobuf.Duration"
      optional :break_duration, :message, 5, "google.protobuf.Duration"
      optional :wait_duration, :message, 6, "google.protobuf.Duration"
      optional :total_duration, :message, 7, "google.protobuf.Duration"
      optional :start_time, :message, 8, "google.protobuf.Timestamp"
      optional :route_polyline, :message, 9, "google.cloud.optimization.v1.ShipmentRoute.EncodedPolyline"
      map :vehicle_loads, :string, :message, 11, "google.cloud.optimization.v1.ShipmentRoute.VehicleLoad"
      repeated :loads, :message, 10, "google.cloud.optimization.v1.CapacityQuantity"
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute.VehicleLoad" do
      optional :amount, :int64, 1
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute.EncodedPolyline" do
      optional :points, :string, 1
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute.Break" do
      optional :start_time, :message, 1, "google.protobuf.Timestamp"
      optional :duration, :message, 2, "google.protobuf.Duration"
    end
    add_message "google.cloud.optimization.v1.ShipmentRoute.TravelStep" do
      optional :duration, :message, 1, "google.protobuf.Duration"
      optional :distance_meters, :double, 2
      optional :traffic_info_unavailable, :bool, 3
      optional :route_polyline, :message, 4, "google.cloud.optimization.v1.ShipmentRoute.EncodedPolyline"
    end
    add_message "google.cloud.optimization.v1.SkippedShipment" do
      optional :index, :int32, 1
      optional :label, :string, 2
      repeated :reasons, :message, 3, "google.cloud.optimization.v1.SkippedShipment.Reason"
    end
    add_message "google.cloud.optimization.v1.SkippedShipment.Reason" do
      optional :code, :enum, 1, "google.cloud.optimization.v1.SkippedShipment.Reason.Code"
      proto3_optional :example_vehicle_index, :int32, 2
      optional :example_exceeded_capacity_type, :string, 3
    end
    add_enum "google.cloud.optimization.v1.SkippedShipment.Reason.Code" do
      value :CODE_UNSPECIFIED, 0
      value :NO_VEHICLE, 1
      value :DEMAND_EXCEEDS_VEHICLE_CAPACITY, 2
      value :CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT, 3
      value :CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT, 4
      value :CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT, 5
      value :CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS, 6
      value :VEHICLE_NOT_ALLOWED, 7
    end
    add_message "google.cloud.optimization.v1.AggregatedMetrics" do
      optional :performed_shipment_count, :int32, 1
      optional :travel_duration, :message, 2, "google.protobuf.Duration"
      optional :wait_duration, :message, 3, "google.protobuf.Duration"
      optional :delay_duration, :message, 4, "google.protobuf.Duration"
      optional :break_duration, :message, 5, "google.protobuf.Duration"
      optional :visit_duration, :message, 6, "google.protobuf.Duration"
      optional :total_duration, :message, 7, "google.protobuf.Duration"
      optional :travel_distance_meters, :double, 8
      map :max_loads, :string, :message, 9, "google.cloud.optimization.v1.ShipmentRoute.VehicleLoad"
      map :costs, :string, :double, 10
      optional :total_cost, :double, 11
    end
    add_message "google.cloud.optimization.v1.InjectedSolutionConstraint" do
      repeated :routes, :message, 1, "google.cloud.optimization.v1.ShipmentRoute"
      repeated :skipped_shipments, :message, 2, "google.cloud.optimization.v1.SkippedShipment"
      repeated :constraint_relaxations, :message, 3, "google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation"
    end
    add_message "google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation" do
      repeated :relaxations, :message, 1, "google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation"
      repeated :vehicle_indices, :int32, 2
    end
    add_message "google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation" do
      optional :level, :enum, 1, "google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level"
      optional :threshold_time, :message, 2, "google.protobuf.Timestamp"
      optional :threshold_visit_count, :int32, 3
    end
    add_enum "google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level" do
      value :LEVEL_UNSPECIFIED, 0
      value :RELAX_VISIT_TIMES_AFTER_THRESHOLD, 1
      value :RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, 2
      value :RELAX_ALL_AFTER_THRESHOLD, 3
    end
    add_message "google.cloud.optimization.v1.OptimizeToursValidationError" do
      optional :code, :int32, 1
      optional :display_name, :string, 2
      repeated :fields, :message, 3, "google.cloud.optimization.v1.OptimizeToursValidationError.FieldReference"
      optional :error_message, :string, 4
      optional :offending_values, :string, 5
    end
    add_message "google.cloud.optimization.v1.OptimizeToursValidationError.FieldReference" do
      optional :name, :string, 1
      optional :sub_field, :message, 3, "google.cloud.optimization.v1.OptimizeToursValidationError.FieldReference"
      oneof :index_or_key do
        optional :index, :int32, 2
        optional :key, :string, 4
      end
    end
  end
end

module Google
  module Cloud
    module Optimization
      module V1
        OptimizeToursRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.OptimizeToursRequest").msgclass
        OptimizeToursRequest::SolvingMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.OptimizeToursRequest.SolvingMode").enummodule
        OptimizeToursRequest::SearchMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.OptimizeToursRequest.SearchMode").enummodule
        OptimizeToursResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.OptimizeToursResponse").msgclass
        OptimizeToursResponse::Metrics = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.OptimizeToursResponse.Metrics").msgclass
        BatchOptimizeToursRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.BatchOptimizeToursRequest").msgclass
        BatchOptimizeToursRequest::AsyncModelConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.BatchOptimizeToursRequest.AsyncModelConfig").msgclass
        BatchOptimizeToursResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.BatchOptimizeToursResponse").msgclass
        ShipmentModel = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentModel").msgclass
        ShipmentModel::DurationDistanceMatrix = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentModel.DurationDistanceMatrix").msgclass
        ShipmentModel::DurationDistanceMatrix::Row = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentModel.DurationDistanceMatrix.Row").msgclass
        ShipmentModel::PrecedenceRule = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentModel.PrecedenceRule").msgclass
        ShipmentModel::BreakRule = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentModel.BreakRule").msgclass
        ShipmentModel::BreakRule::BreakRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentModel.BreakRule.BreakRequest").msgclass
        ShipmentModel::BreakRule::FrequencyConstraint = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentModel.BreakRule.FrequencyConstraint").msgclass
        Shipment = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Shipment").msgclass
        Shipment::VisitRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Shipment.VisitRequest").msgclass
        Shipment::Load = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Shipment.Load").msgclass
        ShipmentTypeIncompatibility = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentTypeIncompatibility").msgclass
        ShipmentTypeIncompatibility::IncompatibilityMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentTypeIncompatibility.IncompatibilityMode").enummodule
        ShipmentTypeRequirement = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentTypeRequirement").msgclass
        ShipmentTypeRequirement::RequirementMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentTypeRequirement.RequirementMode").enummodule
        Vehicle = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Vehicle").msgclass
        Vehicle::LoadLimit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Vehicle.LoadLimit").msgclass
        Vehicle::LoadLimit::Interval = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Vehicle.LoadLimit.Interval").msgclass
        Vehicle::DurationLimit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Vehicle.DurationLimit").msgclass
        Vehicle::TravelMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Vehicle.TravelMode").enummodule
        Vehicle::UnloadingPolicy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Vehicle.UnloadingPolicy").enummodule
        TimeWindow = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.TimeWindow").msgclass
        CapacityQuantity = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.CapacityQuantity").msgclass
        CapacityQuantityInterval = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.CapacityQuantityInterval").msgclass
        DistanceLimit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.DistanceLimit").msgclass
        TransitionAttributes = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.TransitionAttributes").msgclass
        Waypoint = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Waypoint").msgclass
        Location = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.Location").msgclass
        BreakRule = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.BreakRule").msgclass
        BreakRule::BreakRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.BreakRule.BreakRequest").msgclass
        BreakRule::FrequencyConstraint = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.BreakRule.FrequencyConstraint").msgclass
        ShipmentRoute = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute").msgclass
        ShipmentRoute::Delay = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute.Delay").msgclass
        ShipmentRoute::Visit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute.Visit").msgclass
        ShipmentRoute::Transition = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute.Transition").msgclass
        ShipmentRoute::VehicleLoad = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute.VehicleLoad").msgclass
        ShipmentRoute::EncodedPolyline = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute.EncodedPolyline").msgclass
        ShipmentRoute::Break = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute.Break").msgclass
        ShipmentRoute::TravelStep = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.ShipmentRoute.TravelStep").msgclass
        SkippedShipment = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.SkippedShipment").msgclass
        SkippedShipment::Reason = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.SkippedShipment.Reason").msgclass
        SkippedShipment::Reason::Code = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.SkippedShipment.Reason.Code").enummodule
        AggregatedMetrics = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.AggregatedMetrics").msgclass
        InjectedSolutionConstraint = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.InjectedSolutionConstraint").msgclass
        InjectedSolutionConstraint::ConstraintRelaxation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation").msgclass
        InjectedSolutionConstraint::ConstraintRelaxation::Relaxation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation").msgclass
        InjectedSolutionConstraint::ConstraintRelaxation::Relaxation::Level = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level").enummodule
        OptimizeToursValidationError = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.OptimizeToursValidationError").msgclass
        OptimizeToursValidationError::FieldReference = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.cloud.optimization.v1.OptimizeToursValidationError.FieldReference").msgclass
      end
    end
  end
end