// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: ortools/bop/bop_parameters.proto

#ifndef GOOGLE_PROTOBUF_INCLUDED_ortools_2fbop_2fbop_5fparameters_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_ortools_2fbop_2fbop_5fparameters_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3012000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3012002 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/inlined_string_field.h>
#include <google/protobuf/metadata_lite.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_ortools_2fbop_2fbop_5fparameters_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_ortools_2fbop_2fbop_5fparameters_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[3]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_ortools_2fbop_2fbop_5fparameters_2eproto;
namespace operations_research {
namespace bop {
class BopOptimizerMethod;
class BopOptimizerMethodDefaultTypeInternal;
extern BopOptimizerMethodDefaultTypeInternal _BopOptimizerMethod_default_instance_;
class BopParameters;
class BopParametersDefaultTypeInternal;
extern BopParametersDefaultTypeInternal _BopParameters_default_instance_;
class BopSolverOptimizerSet;
class BopSolverOptimizerSetDefaultTypeInternal;
extern BopSolverOptimizerSetDefaultTypeInternal _BopSolverOptimizerSet_default_instance_;
}  // namespace bop
}  // namespace operations_research
PROTOBUF_NAMESPACE_OPEN
template<> ::operations_research::bop::BopOptimizerMethod* Arena::CreateMaybeMessage<::operations_research::bop::BopOptimizerMethod>(Arena*);
template<> ::operations_research::bop::BopParameters* Arena::CreateMaybeMessage<::operations_research::bop::BopParameters>(Arena*);
template<> ::operations_research::bop::BopSolverOptimizerSet* Arena::CreateMaybeMessage<::operations_research::bop::BopSolverOptimizerSet>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace operations_research {
namespace bop {

enum BopOptimizerMethod_OptimizerType : int {
  BopOptimizerMethod_OptimizerType_SAT_CORE_BASED = 0,
  BopOptimizerMethod_OptimizerType_SAT_LINEAR_SEARCH = 15,
  BopOptimizerMethod_OptimizerType_LINEAR_RELAXATION = 1,
  BopOptimizerMethod_OptimizerType_LOCAL_SEARCH = 2,
  BopOptimizerMethod_OptimizerType_RANDOM_FIRST_SOLUTION = 3,
  BopOptimizerMethod_OptimizerType_RANDOM_CONSTRAINT_LNS = 4,
  BopOptimizerMethod_OptimizerType_RANDOM_VARIABLE_LNS = 5,
  BopOptimizerMethod_OptimizerType_COMPLETE_LNS = 7,
  BopOptimizerMethod_OptimizerType_LP_FIRST_SOLUTION = 8,
  BopOptimizerMethod_OptimizerType_OBJECTIVE_FIRST_SOLUTION = 9,
  BopOptimizerMethod_OptimizerType_USER_GUIDED_FIRST_SOLUTION = 14,
  BopOptimizerMethod_OptimizerType_RANDOM_CONSTRAINT_LNS_GUIDED_BY_LP = 11,
  BopOptimizerMethod_OptimizerType_RANDOM_VARIABLE_LNS_GUIDED_BY_LP = 12,
  BopOptimizerMethod_OptimizerType_RELATION_GRAPH_LNS = 16,
  BopOptimizerMethod_OptimizerType_RELATION_GRAPH_LNS_GUIDED_BY_LP = 17
};
bool BopOptimizerMethod_OptimizerType_IsValid(int value);
constexpr BopOptimizerMethod_OptimizerType BopOptimizerMethod_OptimizerType_OptimizerType_MIN = BopOptimizerMethod_OptimizerType_SAT_CORE_BASED;
constexpr BopOptimizerMethod_OptimizerType BopOptimizerMethod_OptimizerType_OptimizerType_MAX = BopOptimizerMethod_OptimizerType_RELATION_GRAPH_LNS_GUIDED_BY_LP;
constexpr int BopOptimizerMethod_OptimizerType_OptimizerType_ARRAYSIZE = BopOptimizerMethod_OptimizerType_OptimizerType_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* BopOptimizerMethod_OptimizerType_descriptor();
template<typename T>
inline const std::string& BopOptimizerMethod_OptimizerType_Name(T enum_t_value) {
  static_assert(::std::is_same<T, BopOptimizerMethod_OptimizerType>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function BopOptimizerMethod_OptimizerType_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    BopOptimizerMethod_OptimizerType_descriptor(), enum_t_value);
}
inline bool BopOptimizerMethod_OptimizerType_Parse(
    const std::string& name, BopOptimizerMethod_OptimizerType* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<BopOptimizerMethod_OptimizerType>(
    BopOptimizerMethod_OptimizerType_descriptor(), name, value);
}
enum BopParameters_ThreadSynchronizationType : int {
  BopParameters_ThreadSynchronizationType_NO_SYNCHRONIZATION = 0,
  BopParameters_ThreadSynchronizationType_SYNCHRONIZE_ALL = 1,
  BopParameters_ThreadSynchronizationType_SYNCHRONIZE_ON_RIGHT = 2
};
bool BopParameters_ThreadSynchronizationType_IsValid(int value);
constexpr BopParameters_ThreadSynchronizationType BopParameters_ThreadSynchronizationType_ThreadSynchronizationType_MIN = BopParameters_ThreadSynchronizationType_NO_SYNCHRONIZATION;
constexpr BopParameters_ThreadSynchronizationType BopParameters_ThreadSynchronizationType_ThreadSynchronizationType_MAX = BopParameters_ThreadSynchronizationType_SYNCHRONIZE_ON_RIGHT;
constexpr int BopParameters_ThreadSynchronizationType_ThreadSynchronizationType_ARRAYSIZE = BopParameters_ThreadSynchronizationType_ThreadSynchronizationType_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* BopParameters_ThreadSynchronizationType_descriptor();
template<typename T>
inline const std::string& BopParameters_ThreadSynchronizationType_Name(T enum_t_value) {
  static_assert(::std::is_same<T, BopParameters_ThreadSynchronizationType>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function BopParameters_ThreadSynchronizationType_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    BopParameters_ThreadSynchronizationType_descriptor(), enum_t_value);
}
inline bool BopParameters_ThreadSynchronizationType_Parse(
    const std::string& name, BopParameters_ThreadSynchronizationType* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<BopParameters_ThreadSynchronizationType>(
    BopParameters_ThreadSynchronizationType_descriptor(), name, value);
}
// ===================================================================

class BopOptimizerMethod PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.bop.BopOptimizerMethod) */ {
 public:
  inline BopOptimizerMethod() : BopOptimizerMethod(nullptr) {};
  virtual ~BopOptimizerMethod();

  BopOptimizerMethod(const BopOptimizerMethod& from);
  BopOptimizerMethod(BopOptimizerMethod&& from) noexcept
    : BopOptimizerMethod() {
    *this = ::std::move(from);
  }

  inline BopOptimizerMethod& operator=(const BopOptimizerMethod& from) {
    CopyFrom(from);
    return *this;
  }
  inline BopOptimizerMethod& operator=(BopOptimizerMethod&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const BopOptimizerMethod& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const BopOptimizerMethod* internal_default_instance() {
    return reinterpret_cast<const BopOptimizerMethod*>(
               &_BopOptimizerMethod_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(BopOptimizerMethod& a, BopOptimizerMethod& b) {
    a.Swap(&b);
  }
  inline void Swap(BopOptimizerMethod* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BopOptimizerMethod* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline BopOptimizerMethod* New() const final {
    return CreateMaybeMessage<BopOptimizerMethod>(nullptr);
  }

  BopOptimizerMethod* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<BopOptimizerMethod>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const BopOptimizerMethod& from);
  void MergeFrom(const BopOptimizerMethod& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(BopOptimizerMethod* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.bop.BopOptimizerMethod";
  }
  protected:
  explicit BopOptimizerMethod(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fbop_2fbop_5fparameters_2eproto);
    return ::descriptor_table_ortools_2fbop_2fbop_5fparameters_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  typedef BopOptimizerMethod_OptimizerType OptimizerType;
  static constexpr OptimizerType SAT_CORE_BASED =
    BopOptimizerMethod_OptimizerType_SAT_CORE_BASED;
  static constexpr OptimizerType SAT_LINEAR_SEARCH =
    BopOptimizerMethod_OptimizerType_SAT_LINEAR_SEARCH;
  static constexpr OptimizerType LINEAR_RELAXATION =
    BopOptimizerMethod_OptimizerType_LINEAR_RELAXATION;
  static constexpr OptimizerType LOCAL_SEARCH =
    BopOptimizerMethod_OptimizerType_LOCAL_SEARCH;
  static constexpr OptimizerType RANDOM_FIRST_SOLUTION =
    BopOptimizerMethod_OptimizerType_RANDOM_FIRST_SOLUTION;
  static constexpr OptimizerType RANDOM_CONSTRAINT_LNS =
    BopOptimizerMethod_OptimizerType_RANDOM_CONSTRAINT_LNS;
  static constexpr OptimizerType RANDOM_VARIABLE_LNS =
    BopOptimizerMethod_OptimizerType_RANDOM_VARIABLE_LNS;
  static constexpr OptimizerType COMPLETE_LNS =
    BopOptimizerMethod_OptimizerType_COMPLETE_LNS;
  static constexpr OptimizerType LP_FIRST_SOLUTION =
    BopOptimizerMethod_OptimizerType_LP_FIRST_SOLUTION;
  static constexpr OptimizerType OBJECTIVE_FIRST_SOLUTION =
    BopOptimizerMethod_OptimizerType_OBJECTIVE_FIRST_SOLUTION;
  static constexpr OptimizerType USER_GUIDED_FIRST_SOLUTION =
    BopOptimizerMethod_OptimizerType_USER_GUIDED_FIRST_SOLUTION;
  static constexpr OptimizerType RANDOM_CONSTRAINT_LNS_GUIDED_BY_LP =
    BopOptimizerMethod_OptimizerType_RANDOM_CONSTRAINT_LNS_GUIDED_BY_LP;
  static constexpr OptimizerType RANDOM_VARIABLE_LNS_GUIDED_BY_LP =
    BopOptimizerMethod_OptimizerType_RANDOM_VARIABLE_LNS_GUIDED_BY_LP;
  static constexpr OptimizerType RELATION_GRAPH_LNS =
    BopOptimizerMethod_OptimizerType_RELATION_GRAPH_LNS;
  static constexpr OptimizerType RELATION_GRAPH_LNS_GUIDED_BY_LP =
    BopOptimizerMethod_OptimizerType_RELATION_GRAPH_LNS_GUIDED_BY_LP;
  static inline bool OptimizerType_IsValid(int value) {
    return BopOptimizerMethod_OptimizerType_IsValid(value);
  }
  static constexpr OptimizerType OptimizerType_MIN =
    BopOptimizerMethod_OptimizerType_OptimizerType_MIN;
  static constexpr OptimizerType OptimizerType_MAX =
    BopOptimizerMethod_OptimizerType_OptimizerType_MAX;
  static constexpr int OptimizerType_ARRAYSIZE =
    BopOptimizerMethod_OptimizerType_OptimizerType_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  OptimizerType_descriptor() {
    return BopOptimizerMethod_OptimizerType_descriptor();
  }
  template<typename T>
  static inline const std::string& OptimizerType_Name(T enum_t_value) {
    static_assert(::std::is_same<T, OptimizerType>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function OptimizerType_Name.");
    return BopOptimizerMethod_OptimizerType_Name(enum_t_value);
  }
  static inline bool OptimizerType_Parse(const std::string& name,
      OptimizerType* value) {
    return BopOptimizerMethod_OptimizerType_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kTypeFieldNumber = 1,
  };
  // optional .operations_research.bop.BopOptimizerMethod.OptimizerType type = 1;
  bool has_type() const;
  private:
  bool _internal_has_type() const;
  public:
  void clear_type();
  ::operations_research::bop::BopOptimizerMethod_OptimizerType type() const;
  void set_type(::operations_research::bop::BopOptimizerMethod_OptimizerType value);
  private:
  ::operations_research::bop::BopOptimizerMethod_OptimizerType _internal_type() const;
  void _internal_set_type(::operations_research::bop::BopOptimizerMethod_OptimizerType value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.bop.BopOptimizerMethod)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<1> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  int type_;
  friend struct ::TableStruct_ortools_2fbop_2fbop_5fparameters_2eproto;
};
// -------------------------------------------------------------------

class BopSolverOptimizerSet PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.bop.BopSolverOptimizerSet) */ {
 public:
  inline BopSolverOptimizerSet() : BopSolverOptimizerSet(nullptr) {};
  virtual ~BopSolverOptimizerSet();

  BopSolverOptimizerSet(const BopSolverOptimizerSet& from);
  BopSolverOptimizerSet(BopSolverOptimizerSet&& from) noexcept
    : BopSolverOptimizerSet() {
    *this = ::std::move(from);
  }

  inline BopSolverOptimizerSet& operator=(const BopSolverOptimizerSet& from) {
    CopyFrom(from);
    return *this;
  }
  inline BopSolverOptimizerSet& operator=(BopSolverOptimizerSet&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const BopSolverOptimizerSet& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const BopSolverOptimizerSet* internal_default_instance() {
    return reinterpret_cast<const BopSolverOptimizerSet*>(
               &_BopSolverOptimizerSet_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(BopSolverOptimizerSet& a, BopSolverOptimizerSet& b) {
    a.Swap(&b);
  }
  inline void Swap(BopSolverOptimizerSet* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BopSolverOptimizerSet* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline BopSolverOptimizerSet* New() const final {
    return CreateMaybeMessage<BopSolverOptimizerSet>(nullptr);
  }

  BopSolverOptimizerSet* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<BopSolverOptimizerSet>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const BopSolverOptimizerSet& from);
  void MergeFrom(const BopSolverOptimizerSet& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(BopSolverOptimizerSet* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.bop.BopSolverOptimizerSet";
  }
  protected:
  explicit BopSolverOptimizerSet(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fbop_2fbop_5fparameters_2eproto);
    return ::descriptor_table_ortools_2fbop_2fbop_5fparameters_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kMethodsFieldNumber = 1,
  };
  // repeated .operations_research.bop.BopOptimizerMethod methods = 1;
  int methods_size() const;
  private:
  int _internal_methods_size() const;
  public:
  void clear_methods();
  ::operations_research::bop::BopOptimizerMethod* mutable_methods(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopOptimizerMethod >*
      mutable_methods();
  private:
  const ::operations_research::bop::BopOptimizerMethod& _internal_methods(int index) const;
  ::operations_research::bop::BopOptimizerMethod* _internal_add_methods();
  public:
  const ::operations_research::bop::BopOptimizerMethod& methods(int index) const;
  ::operations_research::bop::BopOptimizerMethod* add_methods();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopOptimizerMethod >&
      methods() const;

  // @@protoc_insertion_point(class_scope:operations_research.bop.BopSolverOptimizerSet)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopOptimizerMethod > methods_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_ortools_2fbop_2fbop_5fparameters_2eproto;
};
// -------------------------------------------------------------------

class BopParameters PROTOBUF_FINAL :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:operations_research.bop.BopParameters) */ {
 public:
  inline BopParameters() : BopParameters(nullptr) {};
  virtual ~BopParameters();

  BopParameters(const BopParameters& from);
  BopParameters(BopParameters&& from) noexcept
    : BopParameters() {
    *this = ::std::move(from);
  }

  inline BopParameters& operator=(const BopParameters& from) {
    CopyFrom(from);
    return *this;
  }
  inline BopParameters& operator=(BopParameters&& from) noexcept {
    if (GetArena() == from.GetArena()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet& unknown_fields() const {
    return _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance);
  }
  inline ::PROTOBUF_NAMESPACE_ID::UnknownFieldSet* mutable_unknown_fields() {
    return _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const BopParameters& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const BopParameters* internal_default_instance() {
    return reinterpret_cast<const BopParameters*>(
               &_BopParameters_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(BopParameters& a, BopParameters& b) {
    a.Swap(&b);
  }
  inline void Swap(BopParameters* other) {
    if (other == this) return;
    if (GetArena() == other->GetArena()) {
      InternalSwap(other);
    } else {
      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BopParameters* other) {
    if (other == this) return;
    GOOGLE_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline BopParameters* New() const final {
    return CreateMaybeMessage<BopParameters>(nullptr);
  }

  BopParameters* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<BopParameters>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const BopParameters& from);
  void MergeFrom(const BopParameters& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(BopParameters* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "operations_research.bop.BopParameters";
  }
  protected:
  explicit BopParameters(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  private:
  static void ArenaDtor(void* object);
  inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_ortools_2fbop_2fbop_5fparameters_2eproto);
    return ::descriptor_table_ortools_2fbop_2fbop_5fparameters_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  typedef BopParameters_ThreadSynchronizationType ThreadSynchronizationType;
  static constexpr ThreadSynchronizationType NO_SYNCHRONIZATION =
    BopParameters_ThreadSynchronizationType_NO_SYNCHRONIZATION;
  static constexpr ThreadSynchronizationType SYNCHRONIZE_ALL =
    BopParameters_ThreadSynchronizationType_SYNCHRONIZE_ALL;
  static constexpr ThreadSynchronizationType SYNCHRONIZE_ON_RIGHT =
    BopParameters_ThreadSynchronizationType_SYNCHRONIZE_ON_RIGHT;
  static inline bool ThreadSynchronizationType_IsValid(int value) {
    return BopParameters_ThreadSynchronizationType_IsValid(value);
  }
  static constexpr ThreadSynchronizationType ThreadSynchronizationType_MIN =
    BopParameters_ThreadSynchronizationType_ThreadSynchronizationType_MIN;
  static constexpr ThreadSynchronizationType ThreadSynchronizationType_MAX =
    BopParameters_ThreadSynchronizationType_ThreadSynchronizationType_MAX;
  static constexpr int ThreadSynchronizationType_ARRAYSIZE =
    BopParameters_ThreadSynchronizationType_ThreadSynchronizationType_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  ThreadSynchronizationType_descriptor() {
    return BopParameters_ThreadSynchronizationType_descriptor();
  }
  template<typename T>
  static inline const std::string& ThreadSynchronizationType_Name(T enum_t_value) {
    static_assert(::std::is_same<T, ThreadSynchronizationType>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function ThreadSynchronizationType_Name.");
    return BopParameters_ThreadSynchronizationType_Name(enum_t_value);
  }
  static inline bool ThreadSynchronizationType_Parse(const std::string& name,
      ThreadSynchronizationType* value) {
    return BopParameters_ThreadSynchronizationType_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kSolverOptimizerSetsFieldNumber = 26,
    kDefaultSolverOptimizerSetsFieldNumber = 33,
    kLogSearchProgressFieldNumber = 14,
    kPruneSearchTreeFieldNumber = 4,
    kSortConstraintsByNumTermsFieldNumber = 5,
    kUseSymmetryFieldNumber = 17,
    kSynchronizationTypeFieldNumber = 25,
    kMaxNumberOfConsecutiveFailingOptimizerCallsFieldNumber = 35,
    kExploitSymmetryInSatFirstSolutionFieldNumber = 40,
    kUsePotentialOneFlipRepairsInLsFieldNumber = 39,
    kUseLpStrongBranchingFieldNumber = 29,
    kDecomposedProblemMinTimeInSecondsFieldNumber = 36,
    kMaxLpSolveForFeasibilityProblemsFieldNumber = 41,
    kMaxTimeInSecondsFieldNumber = 1,
    kMaxNumDecisionsInLsFieldNumber = 2,
    kRandomSeedFieldNumber = 7,
    kNumRelaxedVarsFieldNumber = 8,
    kMaxNumberOfConflictsInRandomLnsFieldNumber = 9,
    kComputeEstimatedImpactFieldNumber = 3,
    kUseRandomLnsFieldNumber = 6,
    kUseLpLnsFieldNumber = 12,
    kUseSatToChooseLnsNeighbourhoodFieldNumber = 15,
    kNumRandomLnsTriesFieldNumber = 10,
    kMaxNumberOfBacktracksInLsFieldNumber = 11,
    kMaxNumberOfConflictsForQuickCheckFieldNumber = 16,
    kMaxNumberOfConflictsInRandomSolutionGenerationFieldNumber = 20,
    kMaxNumberOfExploredAssignmentsPerTryInLsFieldNumber = 21,
    kUseTranspositionTableInLsFieldNumber = 22,
    kUseLearnedBinaryClausesInLpFieldNumber = 23,
    kNumberOfSolversFieldNumber = 24,
    kMaxDeterministicTimeFieldNumber = 27,
    kRelativeGapLimitFieldNumber = 28,
    kDecomposerNumVariablesThresholdFieldNumber = 30,
    kNumBopSolversUsedByDecompositionFieldNumber = 31,
    kGuidedSatConflictsChunkFieldNumber = 34,
    kMaxNumBrokenConstraintsInLsFieldNumber = 38,
    kLpMaxDeterministicTimeFieldNumber = 37,
  };
  // repeated .operations_research.bop.BopSolverOptimizerSet solver_optimizer_sets = 26;
  int solver_optimizer_sets_size() const;
  private:
  int _internal_solver_optimizer_sets_size() const;
  public:
  void clear_solver_optimizer_sets();
  ::operations_research::bop::BopSolverOptimizerSet* mutable_solver_optimizer_sets(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopSolverOptimizerSet >*
      mutable_solver_optimizer_sets();
  private:
  const ::operations_research::bop::BopSolverOptimizerSet& _internal_solver_optimizer_sets(int index) const;
  ::operations_research::bop::BopSolverOptimizerSet* _internal_add_solver_optimizer_sets();
  public:
  const ::operations_research::bop::BopSolverOptimizerSet& solver_optimizer_sets(int index) const;
  ::operations_research::bop::BopSolverOptimizerSet* add_solver_optimizer_sets();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopSolverOptimizerSet >&
      solver_optimizer_sets() const;

  // optional string default_solver_optimizer_sets = 33 [default = "methods:{type:LOCAL_SEARCH }                       methods:{type:RANDOM_FIRST_SOLUTION }              methods:{type:LINEAR_RELAXATION }                  methods:{type:LP_FIRST_SOLUTION }                  methods:{type:OBJECTIVE_FIRST_SOLUTION }           methods:{type:USER_GUIDED_FIRST_SOLUTION }         methods:{type:RANDOM_CONSTRAINT_LNS_GUIDED_BY_LP } methods:{type:RANDOM_VARIABLE_LNS_GUIDED_BY_LP }   methods:{type:RELATION_GRAPH_LNS }                 methods:{type:RELATION_GRAPH_LNS_GUIDED_BY_LP }    methods:{type:RANDOM_CONSTRAINT_LNS }              methods:{type:RANDOM_VARIABLE_LNS }                methods:{type:SAT_CORE_BASED }                     methods:{type:COMPLETE_LNS }                       "];
  bool has_default_solver_optimizer_sets() const;
  private:
  bool _internal_has_default_solver_optimizer_sets() const;
  public:
  void clear_default_solver_optimizer_sets();
  const std::string& default_solver_optimizer_sets() const;
  void set_default_solver_optimizer_sets(const std::string& value);
  void set_default_solver_optimizer_sets(std::string&& value);
  void set_default_solver_optimizer_sets(const char* value);
  void set_default_solver_optimizer_sets(const char* value, size_t size);
  std::string* mutable_default_solver_optimizer_sets();
  std::string* release_default_solver_optimizer_sets();
  void set_allocated_default_solver_optimizer_sets(std::string* default_solver_optimizer_sets);
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  std::string* unsafe_arena_release_default_solver_optimizer_sets();
  GOOGLE_PROTOBUF_RUNTIME_DEPRECATED("The unsafe_arena_ accessors for"
  "    string fields are deprecated and will be removed in a"
  "    future release.")
  void unsafe_arena_set_allocated_default_solver_optimizer_sets(
      std::string* default_solver_optimizer_sets);
  private:
  const std::string& _internal_default_solver_optimizer_sets() const;
  void _internal_set_default_solver_optimizer_sets(const std::string& value);
  std::string* _internal_mutable_default_solver_optimizer_sets();
  public:

  // optional bool log_search_progress = 14 [default = false];
  bool has_log_search_progress() const;
  private:
  bool _internal_has_log_search_progress() const;
  public:
  void clear_log_search_progress();
  bool log_search_progress() const;
  void set_log_search_progress(bool value);
  private:
  bool _internal_log_search_progress() const;
  void _internal_set_log_search_progress(bool value);
  public:

  // optional bool prune_search_tree = 4 [default = false];
  bool has_prune_search_tree() const;
  private:
  bool _internal_has_prune_search_tree() const;
  public:
  void clear_prune_search_tree();
  bool prune_search_tree() const;
  void set_prune_search_tree(bool value);
  private:
  bool _internal_prune_search_tree() const;
  void _internal_set_prune_search_tree(bool value);
  public:

  // optional bool sort_constraints_by_num_terms = 5 [default = false];
  bool has_sort_constraints_by_num_terms() const;
  private:
  bool _internal_has_sort_constraints_by_num_terms() const;
  public:
  void clear_sort_constraints_by_num_terms();
  bool sort_constraints_by_num_terms() const;
  void set_sort_constraints_by_num_terms(bool value);
  private:
  bool _internal_sort_constraints_by_num_terms() const;
  void _internal_set_sort_constraints_by_num_terms(bool value);
  public:

  // optional bool use_symmetry = 17 [default = false];
  bool has_use_symmetry() const;
  private:
  bool _internal_has_use_symmetry() const;
  public:
  void clear_use_symmetry();
  bool use_symmetry() const;
  void set_use_symmetry(bool value);
  private:
  bool _internal_use_symmetry() const;
  void _internal_set_use_symmetry(bool value);
  public:

  // optional .operations_research.bop.BopParameters.ThreadSynchronizationType synchronization_type = 25 [default = NO_SYNCHRONIZATION];
  bool has_synchronization_type() const;
  private:
  bool _internal_has_synchronization_type() const;
  public:
  void clear_synchronization_type();
  ::operations_research::bop::BopParameters_ThreadSynchronizationType synchronization_type() const;
  void set_synchronization_type(::operations_research::bop::BopParameters_ThreadSynchronizationType value);
  private:
  ::operations_research::bop::BopParameters_ThreadSynchronizationType _internal_synchronization_type() const;
  void _internal_set_synchronization_type(::operations_research::bop::BopParameters_ThreadSynchronizationType value);
  public:

  // optional int32 max_number_of_consecutive_failing_optimizer_calls = 35;
  bool has_max_number_of_consecutive_failing_optimizer_calls() const;
  private:
  bool _internal_has_max_number_of_consecutive_failing_optimizer_calls() const;
  public:
  void clear_max_number_of_consecutive_failing_optimizer_calls();
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_consecutive_failing_optimizer_calls() const;
  void set_max_number_of_consecutive_failing_optimizer_calls(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_number_of_consecutive_failing_optimizer_calls() const;
  void _internal_set_max_number_of_consecutive_failing_optimizer_calls(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional bool exploit_symmetry_in_sat_first_solution = 40 [default = false];
  bool has_exploit_symmetry_in_sat_first_solution() const;
  private:
  bool _internal_has_exploit_symmetry_in_sat_first_solution() const;
  public:
  void clear_exploit_symmetry_in_sat_first_solution();
  bool exploit_symmetry_in_sat_first_solution() const;
  void set_exploit_symmetry_in_sat_first_solution(bool value);
  private:
  bool _internal_exploit_symmetry_in_sat_first_solution() const;
  void _internal_set_exploit_symmetry_in_sat_first_solution(bool value);
  public:

  // optional bool use_potential_one_flip_repairs_in_ls = 39 [default = false];
  bool has_use_potential_one_flip_repairs_in_ls() const;
  private:
  bool _internal_has_use_potential_one_flip_repairs_in_ls() const;
  public:
  void clear_use_potential_one_flip_repairs_in_ls();
  bool use_potential_one_flip_repairs_in_ls() const;
  void set_use_potential_one_flip_repairs_in_ls(bool value);
  private:
  bool _internal_use_potential_one_flip_repairs_in_ls() const;
  void _internal_set_use_potential_one_flip_repairs_in_ls(bool value);
  public:

  // optional bool use_lp_strong_branching = 29 [default = false];
  bool has_use_lp_strong_branching() const;
  private:
  bool _internal_has_use_lp_strong_branching() const;
  public:
  void clear_use_lp_strong_branching();
  bool use_lp_strong_branching() const;
  void set_use_lp_strong_branching(bool value);
  private:
  bool _internal_use_lp_strong_branching() const;
  void _internal_set_use_lp_strong_branching(bool value);
  public:

  // optional double decomposed_problem_min_time_in_seconds = 36 [default = 0];
  bool has_decomposed_problem_min_time_in_seconds() const;
  private:
  bool _internal_has_decomposed_problem_min_time_in_seconds() const;
  public:
  void clear_decomposed_problem_min_time_in_seconds();
  double decomposed_problem_min_time_in_seconds() const;
  void set_decomposed_problem_min_time_in_seconds(double value);
  private:
  double _internal_decomposed_problem_min_time_in_seconds() const;
  void _internal_set_decomposed_problem_min_time_in_seconds(double value);
  public:

  // optional int32 max_lp_solve_for_feasibility_problems = 41 [default = 0];
  bool has_max_lp_solve_for_feasibility_problems() const;
  private:
  bool _internal_has_max_lp_solve_for_feasibility_problems() const;
  public:
  void clear_max_lp_solve_for_feasibility_problems();
  ::PROTOBUF_NAMESPACE_ID::int32 max_lp_solve_for_feasibility_problems() const;
  void set_max_lp_solve_for_feasibility_problems(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_lp_solve_for_feasibility_problems() const;
  void _internal_set_max_lp_solve_for_feasibility_problems(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional double max_time_in_seconds = 1 [default = inf];
  bool has_max_time_in_seconds() const;
  private:
  bool _internal_has_max_time_in_seconds() const;
  public:
  void clear_max_time_in_seconds();
  double max_time_in_seconds() const;
  void set_max_time_in_seconds(double value);
  private:
  double _internal_max_time_in_seconds() const;
  void _internal_set_max_time_in_seconds(double value);
  public:

  // optional int32 max_num_decisions_in_ls = 2 [default = 4];
  bool has_max_num_decisions_in_ls() const;
  private:
  bool _internal_has_max_num_decisions_in_ls() const;
  public:
  void clear_max_num_decisions_in_ls();
  ::PROTOBUF_NAMESPACE_ID::int32 max_num_decisions_in_ls() const;
  void set_max_num_decisions_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_num_decisions_in_ls() const;
  void _internal_set_max_num_decisions_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 random_seed = 7 [default = 8];
  bool has_random_seed() const;
  private:
  bool _internal_has_random_seed() const;
  public:
  void clear_random_seed();
  ::PROTOBUF_NAMESPACE_ID::int32 random_seed() const;
  void set_random_seed(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_random_seed() const;
  void _internal_set_random_seed(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 num_relaxed_vars = 8 [default = 10];
  bool has_num_relaxed_vars() const;
  private:
  bool _internal_has_num_relaxed_vars() const;
  public:
  void clear_num_relaxed_vars();
  ::PROTOBUF_NAMESPACE_ID::int32 num_relaxed_vars() const;
  void set_num_relaxed_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_num_relaxed_vars() const;
  void _internal_set_num_relaxed_vars(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 max_number_of_conflicts_in_random_lns = 9 [default = 2500];
  bool has_max_number_of_conflicts_in_random_lns() const;
  private:
  bool _internal_has_max_number_of_conflicts_in_random_lns() const;
  public:
  void clear_max_number_of_conflicts_in_random_lns();
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_conflicts_in_random_lns() const;
  void set_max_number_of_conflicts_in_random_lns(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_number_of_conflicts_in_random_lns() const;
  void _internal_set_max_number_of_conflicts_in_random_lns(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional bool compute_estimated_impact = 3 [default = true];
  bool has_compute_estimated_impact() const;
  private:
  bool _internal_has_compute_estimated_impact() const;
  public:
  void clear_compute_estimated_impact();
  bool compute_estimated_impact() const;
  void set_compute_estimated_impact(bool value);
  private:
  bool _internal_compute_estimated_impact() const;
  void _internal_set_compute_estimated_impact(bool value);
  public:

  // optional bool use_random_lns = 6 [default = true];
  bool has_use_random_lns() const;
  private:
  bool _internal_has_use_random_lns() const;
  public:
  void clear_use_random_lns();
  bool use_random_lns() const;
  void set_use_random_lns(bool value);
  private:
  bool _internal_use_random_lns() const;
  void _internal_set_use_random_lns(bool value);
  public:

  // optional bool use_lp_lns = 12 [default = true];
  bool has_use_lp_lns() const;
  private:
  bool _internal_has_use_lp_lns() const;
  public:
  void clear_use_lp_lns();
  bool use_lp_lns() const;
  void set_use_lp_lns(bool value);
  private:
  bool _internal_use_lp_lns() const;
  void _internal_set_use_lp_lns(bool value);
  public:

  // optional bool use_sat_to_choose_lns_neighbourhood = 15 [default = true];
  bool has_use_sat_to_choose_lns_neighbourhood() const;
  private:
  bool _internal_has_use_sat_to_choose_lns_neighbourhood() const;
  public:
  void clear_use_sat_to_choose_lns_neighbourhood();
  bool use_sat_to_choose_lns_neighbourhood() const;
  void set_use_sat_to_choose_lns_neighbourhood(bool value);
  private:
  bool _internal_use_sat_to_choose_lns_neighbourhood() const;
  void _internal_set_use_sat_to_choose_lns_neighbourhood(bool value);
  public:

  // optional int32 num_random_lns_tries = 10 [default = 1];
  bool has_num_random_lns_tries() const;
  private:
  bool _internal_has_num_random_lns_tries() const;
  public:
  void clear_num_random_lns_tries();
  ::PROTOBUF_NAMESPACE_ID::int32 num_random_lns_tries() const;
  void set_num_random_lns_tries(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_num_random_lns_tries() const;
  void _internal_set_num_random_lns_tries(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int64 max_number_of_backtracks_in_ls = 11 [default = 100000000];
  bool has_max_number_of_backtracks_in_ls() const;
  private:
  bool _internal_has_max_number_of_backtracks_in_ls() const;
  public:
  void clear_max_number_of_backtracks_in_ls();
  ::PROTOBUF_NAMESPACE_ID::int64 max_number_of_backtracks_in_ls() const;
  void set_max_number_of_backtracks_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_max_number_of_backtracks_in_ls() const;
  void _internal_set_max_number_of_backtracks_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // optional int32 max_number_of_conflicts_for_quick_check = 16 [default = 10];
  bool has_max_number_of_conflicts_for_quick_check() const;
  private:
  bool _internal_has_max_number_of_conflicts_for_quick_check() const;
  public:
  void clear_max_number_of_conflicts_for_quick_check();
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_conflicts_for_quick_check() const;
  void set_max_number_of_conflicts_for_quick_check(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_number_of_conflicts_for_quick_check() const;
  void _internal_set_max_number_of_conflicts_for_quick_check(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 max_number_of_conflicts_in_random_solution_generation = 20 [default = 500];
  bool has_max_number_of_conflicts_in_random_solution_generation() const;
  private:
  bool _internal_has_max_number_of_conflicts_in_random_solution_generation() const;
  public:
  void clear_max_number_of_conflicts_in_random_solution_generation();
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_conflicts_in_random_solution_generation() const;
  void set_max_number_of_conflicts_in_random_solution_generation(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_number_of_conflicts_in_random_solution_generation() const;
  void _internal_set_max_number_of_conflicts_in_random_solution_generation(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int64 max_number_of_explored_assignments_per_try_in_ls = 21 [default = 10000];
  bool has_max_number_of_explored_assignments_per_try_in_ls() const;
  private:
  bool _internal_has_max_number_of_explored_assignments_per_try_in_ls() const;
  public:
  void clear_max_number_of_explored_assignments_per_try_in_ls();
  ::PROTOBUF_NAMESPACE_ID::int64 max_number_of_explored_assignments_per_try_in_ls() const;
  void set_max_number_of_explored_assignments_per_try_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int64 _internal_max_number_of_explored_assignments_per_try_in_ls() const;
  void _internal_set_max_number_of_explored_assignments_per_try_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value);
  public:

  // optional bool use_transposition_table_in_ls = 22 [default = true];
  bool has_use_transposition_table_in_ls() const;
  private:
  bool _internal_has_use_transposition_table_in_ls() const;
  public:
  void clear_use_transposition_table_in_ls();
  bool use_transposition_table_in_ls() const;
  void set_use_transposition_table_in_ls(bool value);
  private:
  bool _internal_use_transposition_table_in_ls() const;
  void _internal_set_use_transposition_table_in_ls(bool value);
  public:

  // optional bool use_learned_binary_clauses_in_lp = 23 [default = true];
  bool has_use_learned_binary_clauses_in_lp() const;
  private:
  bool _internal_has_use_learned_binary_clauses_in_lp() const;
  public:
  void clear_use_learned_binary_clauses_in_lp();
  bool use_learned_binary_clauses_in_lp() const;
  void set_use_learned_binary_clauses_in_lp(bool value);
  private:
  bool _internal_use_learned_binary_clauses_in_lp() const;
  void _internal_set_use_learned_binary_clauses_in_lp(bool value);
  public:

  // optional int32 number_of_solvers = 24 [default = 1];
  bool has_number_of_solvers() const;
  private:
  bool _internal_has_number_of_solvers() const;
  public:
  void clear_number_of_solvers();
  ::PROTOBUF_NAMESPACE_ID::int32 number_of_solvers() const;
  void set_number_of_solvers(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_number_of_solvers() const;
  void _internal_set_number_of_solvers(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional double max_deterministic_time = 27 [default = inf];
  bool has_max_deterministic_time() const;
  private:
  bool _internal_has_max_deterministic_time() const;
  public:
  void clear_max_deterministic_time();
  double max_deterministic_time() const;
  void set_max_deterministic_time(double value);
  private:
  double _internal_max_deterministic_time() const;
  void _internal_set_max_deterministic_time(double value);
  public:

  // optional double relative_gap_limit = 28 [default = 0.0001];
  bool has_relative_gap_limit() const;
  private:
  bool _internal_has_relative_gap_limit() const;
  public:
  void clear_relative_gap_limit();
  double relative_gap_limit() const;
  void set_relative_gap_limit(double value);
  private:
  double _internal_relative_gap_limit() const;
  void _internal_set_relative_gap_limit(double value);
  public:

  // optional int32 decomposer_num_variables_threshold = 30 [default = 50];
  bool has_decomposer_num_variables_threshold() const;
  private:
  bool _internal_has_decomposer_num_variables_threshold() const;
  public:
  void clear_decomposer_num_variables_threshold();
  ::PROTOBUF_NAMESPACE_ID::int32 decomposer_num_variables_threshold() const;
  void set_decomposer_num_variables_threshold(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_decomposer_num_variables_threshold() const;
  void _internal_set_decomposer_num_variables_threshold(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 num_bop_solvers_used_by_decomposition = 31 [default = 1];
  bool has_num_bop_solvers_used_by_decomposition() const;
  private:
  bool _internal_has_num_bop_solvers_used_by_decomposition() const;
  public:
  void clear_num_bop_solvers_used_by_decomposition();
  ::PROTOBUF_NAMESPACE_ID::int32 num_bop_solvers_used_by_decomposition() const;
  void set_num_bop_solvers_used_by_decomposition(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_num_bop_solvers_used_by_decomposition() const;
  void _internal_set_num_bop_solvers_used_by_decomposition(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 guided_sat_conflicts_chunk = 34 [default = 1000];
  bool has_guided_sat_conflicts_chunk() const;
  private:
  bool _internal_has_guided_sat_conflicts_chunk() const;
  public:
  void clear_guided_sat_conflicts_chunk();
  ::PROTOBUF_NAMESPACE_ID::int32 guided_sat_conflicts_chunk() const;
  void set_guided_sat_conflicts_chunk(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_guided_sat_conflicts_chunk() const;
  void _internal_set_guided_sat_conflicts_chunk(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional int32 max_num_broken_constraints_in_ls = 38 [default = 2147483647];
  bool has_max_num_broken_constraints_in_ls() const;
  private:
  bool _internal_has_max_num_broken_constraints_in_ls() const;
  public:
  void clear_max_num_broken_constraints_in_ls();
  ::PROTOBUF_NAMESPACE_ID::int32 max_num_broken_constraints_in_ls() const;
  void set_max_num_broken_constraints_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_max_num_broken_constraints_in_ls() const;
  void _internal_set_max_num_broken_constraints_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // optional double lp_max_deterministic_time = 37 [default = 1];
  bool has_lp_max_deterministic_time() const;
  private:
  bool _internal_has_lp_max_deterministic_time() const;
  public:
  void clear_lp_max_deterministic_time();
  double lp_max_deterministic_time() const;
  void set_lp_max_deterministic_time(double value);
  private:
  double _internal_lp_max_deterministic_time() const;
  void _internal_set_lp_max_deterministic_time(double value);
  public:

  // @@protoc_insertion_point(class_scope:operations_research.bop.BopParameters)
 private:
  class _Internal;

  template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
  typedef void InternalArenaConstructable_;
  typedef void DestructorSkippable_;
  ::PROTOBUF_NAMESPACE_ID::internal::HasBits<2> _has_bits_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopSolverOptimizerSet > solver_optimizer_sets_;
  public:
  static ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<std::string> _i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_;
  private:
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr default_solver_optimizer_sets_;
  bool log_search_progress_;
  bool prune_search_tree_;
  bool sort_constraints_by_num_terms_;
  bool use_symmetry_;
  int synchronization_type_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_consecutive_failing_optimizer_calls_;
  bool exploit_symmetry_in_sat_first_solution_;
  bool use_potential_one_flip_repairs_in_ls_;
  bool use_lp_strong_branching_;
  double decomposed_problem_min_time_in_seconds_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_lp_solve_for_feasibility_problems_;
  double max_time_in_seconds_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_num_decisions_in_ls_;
  ::PROTOBUF_NAMESPACE_ID::int32 random_seed_;
  ::PROTOBUF_NAMESPACE_ID::int32 num_relaxed_vars_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_conflicts_in_random_lns_;
  bool compute_estimated_impact_;
  bool use_random_lns_;
  bool use_lp_lns_;
  bool use_sat_to_choose_lns_neighbourhood_;
  ::PROTOBUF_NAMESPACE_ID::int32 num_random_lns_tries_;
  ::PROTOBUF_NAMESPACE_ID::int64 max_number_of_backtracks_in_ls_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_conflicts_for_quick_check_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_number_of_conflicts_in_random_solution_generation_;
  ::PROTOBUF_NAMESPACE_ID::int64 max_number_of_explored_assignments_per_try_in_ls_;
  bool use_transposition_table_in_ls_;
  bool use_learned_binary_clauses_in_lp_;
  ::PROTOBUF_NAMESPACE_ID::int32 number_of_solvers_;
  double max_deterministic_time_;
  double relative_gap_limit_;
  ::PROTOBUF_NAMESPACE_ID::int32 decomposer_num_variables_threshold_;
  ::PROTOBUF_NAMESPACE_ID::int32 num_bop_solvers_used_by_decomposition_;
  ::PROTOBUF_NAMESPACE_ID::int32 guided_sat_conflicts_chunk_;
  ::PROTOBUF_NAMESPACE_ID::int32 max_num_broken_constraints_in_ls_;
  double lp_max_deterministic_time_;
  friend struct ::TableStruct_ortools_2fbop_2fbop_5fparameters_2eproto;
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// BopOptimizerMethod

// optional .operations_research.bop.BopOptimizerMethod.OptimizerType type = 1;
inline bool BopOptimizerMethod::_internal_has_type() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool BopOptimizerMethod::has_type() const {
  return _internal_has_type();
}
inline void BopOptimizerMethod::clear_type() {
  type_ = 0;
  _has_bits_[0] &= ~0x00000001u;
}
inline ::operations_research::bop::BopOptimizerMethod_OptimizerType BopOptimizerMethod::_internal_type() const {
  return static_cast< ::operations_research::bop::BopOptimizerMethod_OptimizerType >(type_);
}
inline ::operations_research::bop::BopOptimizerMethod_OptimizerType BopOptimizerMethod::type() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopOptimizerMethod.type)
  return _internal_type();
}
inline void BopOptimizerMethod::_internal_set_type(::operations_research::bop::BopOptimizerMethod_OptimizerType value) {
  assert(::operations_research::bop::BopOptimizerMethod_OptimizerType_IsValid(value));
  _has_bits_[0] |= 0x00000001u;
  type_ = value;
}
inline void BopOptimizerMethod::set_type(::operations_research::bop::BopOptimizerMethod_OptimizerType value) {
  _internal_set_type(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopOptimizerMethod.type)
}

// -------------------------------------------------------------------

// BopSolverOptimizerSet

// repeated .operations_research.bop.BopOptimizerMethod methods = 1;
inline int BopSolverOptimizerSet::_internal_methods_size() const {
  return methods_.size();
}
inline int BopSolverOptimizerSet::methods_size() const {
  return _internal_methods_size();
}
inline void BopSolverOptimizerSet::clear_methods() {
  methods_.Clear();
}
inline ::operations_research::bop::BopOptimizerMethod* BopSolverOptimizerSet::mutable_methods(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.bop.BopSolverOptimizerSet.methods)
  return methods_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopOptimizerMethod >*
BopSolverOptimizerSet::mutable_methods() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.bop.BopSolverOptimizerSet.methods)
  return &methods_;
}
inline const ::operations_research::bop::BopOptimizerMethod& BopSolverOptimizerSet::_internal_methods(int index) const {
  return methods_.Get(index);
}
inline const ::operations_research::bop::BopOptimizerMethod& BopSolverOptimizerSet::methods(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopSolverOptimizerSet.methods)
  return _internal_methods(index);
}
inline ::operations_research::bop::BopOptimizerMethod* BopSolverOptimizerSet::_internal_add_methods() {
  return methods_.Add();
}
inline ::operations_research::bop::BopOptimizerMethod* BopSolverOptimizerSet::add_methods() {
  // @@protoc_insertion_point(field_add:operations_research.bop.BopSolverOptimizerSet.methods)
  return _internal_add_methods();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopOptimizerMethod >&
BopSolverOptimizerSet::methods() const {
  // @@protoc_insertion_point(field_list:operations_research.bop.BopSolverOptimizerSet.methods)
  return methods_;
}

// -------------------------------------------------------------------

// BopParameters

// optional double max_time_in_seconds = 1 [default = inf];
inline bool BopParameters::_internal_has_max_time_in_seconds() const {
  bool value = (_has_bits_[0] & 0x00001000u) != 0;
  return value;
}
inline bool BopParameters::has_max_time_in_seconds() const {
  return _internal_has_max_time_in_seconds();
}
inline void BopParameters::clear_max_time_in_seconds() {
  max_time_in_seconds_ = std::numeric_limits<double>::infinity();
  _has_bits_[0] &= ~0x00001000u;
}
inline double BopParameters::_internal_max_time_in_seconds() const {
  return max_time_in_seconds_;
}
inline double BopParameters::max_time_in_seconds() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_time_in_seconds)
  return _internal_max_time_in_seconds();
}
inline void BopParameters::_internal_set_max_time_in_seconds(double value) {
  _has_bits_[0] |= 0x00001000u;
  max_time_in_seconds_ = value;
}
inline void BopParameters::set_max_time_in_seconds(double value) {
  _internal_set_max_time_in_seconds(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_time_in_seconds)
}

// optional double max_deterministic_time = 27 [default = inf];
inline bool BopParameters::_internal_has_max_deterministic_time() const {
  bool value = (_has_bits_[0] & 0x20000000u) != 0;
  return value;
}
inline bool BopParameters::has_max_deterministic_time() const {
  return _internal_has_max_deterministic_time();
}
inline void BopParameters::clear_max_deterministic_time() {
  max_deterministic_time_ = std::numeric_limits<double>::infinity();
  _has_bits_[0] &= ~0x20000000u;
}
inline double BopParameters::_internal_max_deterministic_time() const {
  return max_deterministic_time_;
}
inline double BopParameters::max_deterministic_time() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_deterministic_time)
  return _internal_max_deterministic_time();
}
inline void BopParameters::_internal_set_max_deterministic_time(double value) {
  _has_bits_[0] |= 0x20000000u;
  max_deterministic_time_ = value;
}
inline void BopParameters::set_max_deterministic_time(double value) {
  _internal_set_max_deterministic_time(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_deterministic_time)
}

// optional double lp_max_deterministic_time = 37 [default = 1];
inline bool BopParameters::_internal_has_lp_max_deterministic_time() const {
  bool value = (_has_bits_[1] & 0x00000008u) != 0;
  return value;
}
inline bool BopParameters::has_lp_max_deterministic_time() const {
  return _internal_has_lp_max_deterministic_time();
}
inline void BopParameters::clear_lp_max_deterministic_time() {
  lp_max_deterministic_time_ = 1;
  _has_bits_[1] &= ~0x00000008u;
}
inline double BopParameters::_internal_lp_max_deterministic_time() const {
  return lp_max_deterministic_time_;
}
inline double BopParameters::lp_max_deterministic_time() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.lp_max_deterministic_time)
  return _internal_lp_max_deterministic_time();
}
inline void BopParameters::_internal_set_lp_max_deterministic_time(double value) {
  _has_bits_[1] |= 0x00000008u;
  lp_max_deterministic_time_ = value;
}
inline void BopParameters::set_lp_max_deterministic_time(double value) {
  _internal_set_lp_max_deterministic_time(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.lp_max_deterministic_time)
}

// optional int32 max_number_of_consecutive_failing_optimizer_calls = 35;
inline bool BopParameters::_internal_has_max_number_of_consecutive_failing_optimizer_calls() const {
  bool value = (_has_bits_[0] & 0x00000040u) != 0;
  return value;
}
inline bool BopParameters::has_max_number_of_consecutive_failing_optimizer_calls() const {
  return _internal_has_max_number_of_consecutive_failing_optimizer_calls();
}
inline void BopParameters::clear_max_number_of_consecutive_failing_optimizer_calls() {
  max_number_of_consecutive_failing_optimizer_calls_ = 0;
  _has_bits_[0] &= ~0x00000040u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_max_number_of_consecutive_failing_optimizer_calls() const {
  return max_number_of_consecutive_failing_optimizer_calls_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::max_number_of_consecutive_failing_optimizer_calls() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_number_of_consecutive_failing_optimizer_calls)
  return _internal_max_number_of_consecutive_failing_optimizer_calls();
}
inline void BopParameters::_internal_set_max_number_of_consecutive_failing_optimizer_calls(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000040u;
  max_number_of_consecutive_failing_optimizer_calls_ = value;
}
inline void BopParameters::set_max_number_of_consecutive_failing_optimizer_calls(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_number_of_consecutive_failing_optimizer_calls(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_number_of_consecutive_failing_optimizer_calls)
}

// optional double relative_gap_limit = 28 [default = 0.0001];
inline bool BopParameters::_internal_has_relative_gap_limit() const {
  bool value = (_has_bits_[0] & 0x40000000u) != 0;
  return value;
}
inline bool BopParameters::has_relative_gap_limit() const {
  return _internal_has_relative_gap_limit();
}
inline void BopParameters::clear_relative_gap_limit() {
  relative_gap_limit_ = 0.0001;
  _has_bits_[0] &= ~0x40000000u;
}
inline double BopParameters::_internal_relative_gap_limit() const {
  return relative_gap_limit_;
}
inline double BopParameters::relative_gap_limit() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.relative_gap_limit)
  return _internal_relative_gap_limit();
}
inline void BopParameters::_internal_set_relative_gap_limit(double value) {
  _has_bits_[0] |= 0x40000000u;
  relative_gap_limit_ = value;
}
inline void BopParameters::set_relative_gap_limit(double value) {
  _internal_set_relative_gap_limit(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.relative_gap_limit)
}

// optional int32 max_num_decisions_in_ls = 2 [default = 4];
inline bool BopParameters::_internal_has_max_num_decisions_in_ls() const {
  bool value = (_has_bits_[0] & 0x00002000u) != 0;
  return value;
}
inline bool BopParameters::has_max_num_decisions_in_ls() const {
  return _internal_has_max_num_decisions_in_ls();
}
inline void BopParameters::clear_max_num_decisions_in_ls() {
  max_num_decisions_in_ls_ = 4;
  _has_bits_[0] &= ~0x00002000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_max_num_decisions_in_ls() const {
  return max_num_decisions_in_ls_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::max_num_decisions_in_ls() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_num_decisions_in_ls)
  return _internal_max_num_decisions_in_ls();
}
inline void BopParameters::_internal_set_max_num_decisions_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00002000u;
  max_num_decisions_in_ls_ = value;
}
inline void BopParameters::set_max_num_decisions_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_num_decisions_in_ls(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_num_decisions_in_ls)
}

// optional int32 max_num_broken_constraints_in_ls = 38 [default = 2147483647];
inline bool BopParameters::_internal_has_max_num_broken_constraints_in_ls() const {
  bool value = (_has_bits_[1] & 0x00000004u) != 0;
  return value;
}
inline bool BopParameters::has_max_num_broken_constraints_in_ls() const {
  return _internal_has_max_num_broken_constraints_in_ls();
}
inline void BopParameters::clear_max_num_broken_constraints_in_ls() {
  max_num_broken_constraints_in_ls_ = 2147483647;
  _has_bits_[1] &= ~0x00000004u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_max_num_broken_constraints_in_ls() const {
  return max_num_broken_constraints_in_ls_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::max_num_broken_constraints_in_ls() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_num_broken_constraints_in_ls)
  return _internal_max_num_broken_constraints_in_ls();
}
inline void BopParameters::_internal_set_max_num_broken_constraints_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[1] |= 0x00000004u;
  max_num_broken_constraints_in_ls_ = value;
}
inline void BopParameters::set_max_num_broken_constraints_in_ls(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_num_broken_constraints_in_ls(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_num_broken_constraints_in_ls)
}

// optional bool log_search_progress = 14 [default = false];
inline bool BopParameters::_internal_has_log_search_progress() const {
  bool value = (_has_bits_[0] & 0x00000002u) != 0;
  return value;
}
inline bool BopParameters::has_log_search_progress() const {
  return _internal_has_log_search_progress();
}
inline void BopParameters::clear_log_search_progress() {
  log_search_progress_ = false;
  _has_bits_[0] &= ~0x00000002u;
}
inline bool BopParameters::_internal_log_search_progress() const {
  return log_search_progress_;
}
inline bool BopParameters::log_search_progress() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.log_search_progress)
  return _internal_log_search_progress();
}
inline void BopParameters::_internal_set_log_search_progress(bool value) {
  _has_bits_[0] |= 0x00000002u;
  log_search_progress_ = value;
}
inline void BopParameters::set_log_search_progress(bool value) {
  _internal_set_log_search_progress(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.log_search_progress)
}

// optional bool compute_estimated_impact = 3 [default = true];
inline bool BopParameters::_internal_has_compute_estimated_impact() const {
  bool value = (_has_bits_[0] & 0x00020000u) != 0;
  return value;
}
inline bool BopParameters::has_compute_estimated_impact() const {
  return _internal_has_compute_estimated_impact();
}
inline void BopParameters::clear_compute_estimated_impact() {
  compute_estimated_impact_ = true;
  _has_bits_[0] &= ~0x00020000u;
}
inline bool BopParameters::_internal_compute_estimated_impact() const {
  return compute_estimated_impact_;
}
inline bool BopParameters::compute_estimated_impact() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.compute_estimated_impact)
  return _internal_compute_estimated_impact();
}
inline void BopParameters::_internal_set_compute_estimated_impact(bool value) {
  _has_bits_[0] |= 0x00020000u;
  compute_estimated_impact_ = value;
}
inline void BopParameters::set_compute_estimated_impact(bool value) {
  _internal_set_compute_estimated_impact(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.compute_estimated_impact)
}

// optional bool prune_search_tree = 4 [default = false];
inline bool BopParameters::_internal_has_prune_search_tree() const {
  bool value = (_has_bits_[0] & 0x00000004u) != 0;
  return value;
}
inline bool BopParameters::has_prune_search_tree() const {
  return _internal_has_prune_search_tree();
}
inline void BopParameters::clear_prune_search_tree() {
  prune_search_tree_ = false;
  _has_bits_[0] &= ~0x00000004u;
}
inline bool BopParameters::_internal_prune_search_tree() const {
  return prune_search_tree_;
}
inline bool BopParameters::prune_search_tree() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.prune_search_tree)
  return _internal_prune_search_tree();
}
inline void BopParameters::_internal_set_prune_search_tree(bool value) {
  _has_bits_[0] |= 0x00000004u;
  prune_search_tree_ = value;
}
inline void BopParameters::set_prune_search_tree(bool value) {
  _internal_set_prune_search_tree(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.prune_search_tree)
}

// optional bool sort_constraints_by_num_terms = 5 [default = false];
inline bool BopParameters::_internal_has_sort_constraints_by_num_terms() const {
  bool value = (_has_bits_[0] & 0x00000008u) != 0;
  return value;
}
inline bool BopParameters::has_sort_constraints_by_num_terms() const {
  return _internal_has_sort_constraints_by_num_terms();
}
inline void BopParameters::clear_sort_constraints_by_num_terms() {
  sort_constraints_by_num_terms_ = false;
  _has_bits_[0] &= ~0x00000008u;
}
inline bool BopParameters::_internal_sort_constraints_by_num_terms() const {
  return sort_constraints_by_num_terms_;
}
inline bool BopParameters::sort_constraints_by_num_terms() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.sort_constraints_by_num_terms)
  return _internal_sort_constraints_by_num_terms();
}
inline void BopParameters::_internal_set_sort_constraints_by_num_terms(bool value) {
  _has_bits_[0] |= 0x00000008u;
  sort_constraints_by_num_terms_ = value;
}
inline void BopParameters::set_sort_constraints_by_num_terms(bool value) {
  _internal_set_sort_constraints_by_num_terms(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.sort_constraints_by_num_terms)
}

// optional bool use_random_lns = 6 [default = true];
inline bool BopParameters::_internal_has_use_random_lns() const {
  bool value = (_has_bits_[0] & 0x00040000u) != 0;
  return value;
}
inline bool BopParameters::has_use_random_lns() const {
  return _internal_has_use_random_lns();
}
inline void BopParameters::clear_use_random_lns() {
  use_random_lns_ = true;
  _has_bits_[0] &= ~0x00040000u;
}
inline bool BopParameters::_internal_use_random_lns() const {
  return use_random_lns_;
}
inline bool BopParameters::use_random_lns() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_random_lns)
  return _internal_use_random_lns();
}
inline void BopParameters::_internal_set_use_random_lns(bool value) {
  _has_bits_[0] |= 0x00040000u;
  use_random_lns_ = value;
}
inline void BopParameters::set_use_random_lns(bool value) {
  _internal_set_use_random_lns(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_random_lns)
}

// optional int32 random_seed = 7 [default = 8];
inline bool BopParameters::_internal_has_random_seed() const {
  bool value = (_has_bits_[0] & 0x00004000u) != 0;
  return value;
}
inline bool BopParameters::has_random_seed() const {
  return _internal_has_random_seed();
}
inline void BopParameters::clear_random_seed() {
  random_seed_ = 8;
  _has_bits_[0] &= ~0x00004000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_random_seed() const {
  return random_seed_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::random_seed() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.random_seed)
  return _internal_random_seed();
}
inline void BopParameters::_internal_set_random_seed(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00004000u;
  random_seed_ = value;
}
inline void BopParameters::set_random_seed(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_random_seed(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.random_seed)
}

// optional int32 num_relaxed_vars = 8 [default = 10];
inline bool BopParameters::_internal_has_num_relaxed_vars() const {
  bool value = (_has_bits_[0] & 0x00008000u) != 0;
  return value;
}
inline bool BopParameters::has_num_relaxed_vars() const {
  return _internal_has_num_relaxed_vars();
}
inline void BopParameters::clear_num_relaxed_vars() {
  num_relaxed_vars_ = 10;
  _has_bits_[0] &= ~0x00008000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_num_relaxed_vars() const {
  return num_relaxed_vars_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::num_relaxed_vars() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.num_relaxed_vars)
  return _internal_num_relaxed_vars();
}
inline void BopParameters::_internal_set_num_relaxed_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00008000u;
  num_relaxed_vars_ = value;
}
inline void BopParameters::set_num_relaxed_vars(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_num_relaxed_vars(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.num_relaxed_vars)
}

// optional int32 max_number_of_conflicts_in_random_lns = 9 [default = 2500];
inline bool BopParameters::_internal_has_max_number_of_conflicts_in_random_lns() const {
  bool value = (_has_bits_[0] & 0x00010000u) != 0;
  return value;
}
inline bool BopParameters::has_max_number_of_conflicts_in_random_lns() const {
  return _internal_has_max_number_of_conflicts_in_random_lns();
}
inline void BopParameters::clear_max_number_of_conflicts_in_random_lns() {
  max_number_of_conflicts_in_random_lns_ = 2500;
  _has_bits_[0] &= ~0x00010000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_max_number_of_conflicts_in_random_lns() const {
  return max_number_of_conflicts_in_random_lns_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::max_number_of_conflicts_in_random_lns() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_number_of_conflicts_in_random_lns)
  return _internal_max_number_of_conflicts_in_random_lns();
}
inline void BopParameters::_internal_set_max_number_of_conflicts_in_random_lns(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00010000u;
  max_number_of_conflicts_in_random_lns_ = value;
}
inline void BopParameters::set_max_number_of_conflicts_in_random_lns(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_number_of_conflicts_in_random_lns(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_number_of_conflicts_in_random_lns)
}

// optional int32 num_random_lns_tries = 10 [default = 1];
inline bool BopParameters::_internal_has_num_random_lns_tries() const {
  bool value = (_has_bits_[0] & 0x00200000u) != 0;
  return value;
}
inline bool BopParameters::has_num_random_lns_tries() const {
  return _internal_has_num_random_lns_tries();
}
inline void BopParameters::clear_num_random_lns_tries() {
  num_random_lns_tries_ = 1;
  _has_bits_[0] &= ~0x00200000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_num_random_lns_tries() const {
  return num_random_lns_tries_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::num_random_lns_tries() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.num_random_lns_tries)
  return _internal_num_random_lns_tries();
}
inline void BopParameters::_internal_set_num_random_lns_tries(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00200000u;
  num_random_lns_tries_ = value;
}
inline void BopParameters::set_num_random_lns_tries(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_num_random_lns_tries(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.num_random_lns_tries)
}

// optional int64 max_number_of_backtracks_in_ls = 11 [default = 100000000];
inline bool BopParameters::_internal_has_max_number_of_backtracks_in_ls() const {
  bool value = (_has_bits_[0] & 0x00400000u) != 0;
  return value;
}
inline bool BopParameters::has_max_number_of_backtracks_in_ls() const {
  return _internal_has_max_number_of_backtracks_in_ls();
}
inline void BopParameters::clear_max_number_of_backtracks_in_ls() {
  max_number_of_backtracks_in_ls_ = PROTOBUF_LONGLONG(100000000);
  _has_bits_[0] &= ~0x00400000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 BopParameters::_internal_max_number_of_backtracks_in_ls() const {
  return max_number_of_backtracks_in_ls_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 BopParameters::max_number_of_backtracks_in_ls() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_number_of_backtracks_in_ls)
  return _internal_max_number_of_backtracks_in_ls();
}
inline void BopParameters::_internal_set_max_number_of_backtracks_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _has_bits_[0] |= 0x00400000u;
  max_number_of_backtracks_in_ls_ = value;
}
inline void BopParameters::set_max_number_of_backtracks_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_max_number_of_backtracks_in_ls(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_number_of_backtracks_in_ls)
}

// optional bool use_lp_lns = 12 [default = true];
inline bool BopParameters::_internal_has_use_lp_lns() const {
  bool value = (_has_bits_[0] & 0x00080000u) != 0;
  return value;
}
inline bool BopParameters::has_use_lp_lns() const {
  return _internal_has_use_lp_lns();
}
inline void BopParameters::clear_use_lp_lns() {
  use_lp_lns_ = true;
  _has_bits_[0] &= ~0x00080000u;
}
inline bool BopParameters::_internal_use_lp_lns() const {
  return use_lp_lns_;
}
inline bool BopParameters::use_lp_lns() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_lp_lns)
  return _internal_use_lp_lns();
}
inline void BopParameters::_internal_set_use_lp_lns(bool value) {
  _has_bits_[0] |= 0x00080000u;
  use_lp_lns_ = value;
}
inline void BopParameters::set_use_lp_lns(bool value) {
  _internal_set_use_lp_lns(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_lp_lns)
}

// optional bool use_sat_to_choose_lns_neighbourhood = 15 [default = true];
inline bool BopParameters::_internal_has_use_sat_to_choose_lns_neighbourhood() const {
  bool value = (_has_bits_[0] & 0x00100000u) != 0;
  return value;
}
inline bool BopParameters::has_use_sat_to_choose_lns_neighbourhood() const {
  return _internal_has_use_sat_to_choose_lns_neighbourhood();
}
inline void BopParameters::clear_use_sat_to_choose_lns_neighbourhood() {
  use_sat_to_choose_lns_neighbourhood_ = true;
  _has_bits_[0] &= ~0x00100000u;
}
inline bool BopParameters::_internal_use_sat_to_choose_lns_neighbourhood() const {
  return use_sat_to_choose_lns_neighbourhood_;
}
inline bool BopParameters::use_sat_to_choose_lns_neighbourhood() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_sat_to_choose_lns_neighbourhood)
  return _internal_use_sat_to_choose_lns_neighbourhood();
}
inline void BopParameters::_internal_set_use_sat_to_choose_lns_neighbourhood(bool value) {
  _has_bits_[0] |= 0x00100000u;
  use_sat_to_choose_lns_neighbourhood_ = value;
}
inline void BopParameters::set_use_sat_to_choose_lns_neighbourhood(bool value) {
  _internal_set_use_sat_to_choose_lns_neighbourhood(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_sat_to_choose_lns_neighbourhood)
}

// optional int32 max_number_of_conflicts_for_quick_check = 16 [default = 10];
inline bool BopParameters::_internal_has_max_number_of_conflicts_for_quick_check() const {
  bool value = (_has_bits_[0] & 0x00800000u) != 0;
  return value;
}
inline bool BopParameters::has_max_number_of_conflicts_for_quick_check() const {
  return _internal_has_max_number_of_conflicts_for_quick_check();
}
inline void BopParameters::clear_max_number_of_conflicts_for_quick_check() {
  max_number_of_conflicts_for_quick_check_ = 10;
  _has_bits_[0] &= ~0x00800000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_max_number_of_conflicts_for_quick_check() const {
  return max_number_of_conflicts_for_quick_check_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::max_number_of_conflicts_for_quick_check() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_number_of_conflicts_for_quick_check)
  return _internal_max_number_of_conflicts_for_quick_check();
}
inline void BopParameters::_internal_set_max_number_of_conflicts_for_quick_check(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00800000u;
  max_number_of_conflicts_for_quick_check_ = value;
}
inline void BopParameters::set_max_number_of_conflicts_for_quick_check(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_number_of_conflicts_for_quick_check(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_number_of_conflicts_for_quick_check)
}

// optional bool use_symmetry = 17 [default = false];
inline bool BopParameters::_internal_has_use_symmetry() const {
  bool value = (_has_bits_[0] & 0x00000010u) != 0;
  return value;
}
inline bool BopParameters::has_use_symmetry() const {
  return _internal_has_use_symmetry();
}
inline void BopParameters::clear_use_symmetry() {
  use_symmetry_ = false;
  _has_bits_[0] &= ~0x00000010u;
}
inline bool BopParameters::_internal_use_symmetry() const {
  return use_symmetry_;
}
inline bool BopParameters::use_symmetry() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_symmetry)
  return _internal_use_symmetry();
}
inline void BopParameters::_internal_set_use_symmetry(bool value) {
  _has_bits_[0] |= 0x00000010u;
  use_symmetry_ = value;
}
inline void BopParameters::set_use_symmetry(bool value) {
  _internal_set_use_symmetry(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_symmetry)
}

// optional bool exploit_symmetry_in_sat_first_solution = 40 [default = false];
inline bool BopParameters::_internal_has_exploit_symmetry_in_sat_first_solution() const {
  bool value = (_has_bits_[0] & 0x00000080u) != 0;
  return value;
}
inline bool BopParameters::has_exploit_symmetry_in_sat_first_solution() const {
  return _internal_has_exploit_symmetry_in_sat_first_solution();
}
inline void BopParameters::clear_exploit_symmetry_in_sat_first_solution() {
  exploit_symmetry_in_sat_first_solution_ = false;
  _has_bits_[0] &= ~0x00000080u;
}
inline bool BopParameters::_internal_exploit_symmetry_in_sat_first_solution() const {
  return exploit_symmetry_in_sat_first_solution_;
}
inline bool BopParameters::exploit_symmetry_in_sat_first_solution() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.exploit_symmetry_in_sat_first_solution)
  return _internal_exploit_symmetry_in_sat_first_solution();
}
inline void BopParameters::_internal_set_exploit_symmetry_in_sat_first_solution(bool value) {
  _has_bits_[0] |= 0x00000080u;
  exploit_symmetry_in_sat_first_solution_ = value;
}
inline void BopParameters::set_exploit_symmetry_in_sat_first_solution(bool value) {
  _internal_set_exploit_symmetry_in_sat_first_solution(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.exploit_symmetry_in_sat_first_solution)
}

// optional int32 max_number_of_conflicts_in_random_solution_generation = 20 [default = 500];
inline bool BopParameters::_internal_has_max_number_of_conflicts_in_random_solution_generation() const {
  bool value = (_has_bits_[0] & 0x01000000u) != 0;
  return value;
}
inline bool BopParameters::has_max_number_of_conflicts_in_random_solution_generation() const {
  return _internal_has_max_number_of_conflicts_in_random_solution_generation();
}
inline void BopParameters::clear_max_number_of_conflicts_in_random_solution_generation() {
  max_number_of_conflicts_in_random_solution_generation_ = 500;
  _has_bits_[0] &= ~0x01000000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_max_number_of_conflicts_in_random_solution_generation() const {
  return max_number_of_conflicts_in_random_solution_generation_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::max_number_of_conflicts_in_random_solution_generation() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_number_of_conflicts_in_random_solution_generation)
  return _internal_max_number_of_conflicts_in_random_solution_generation();
}
inline void BopParameters::_internal_set_max_number_of_conflicts_in_random_solution_generation(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x01000000u;
  max_number_of_conflicts_in_random_solution_generation_ = value;
}
inline void BopParameters::set_max_number_of_conflicts_in_random_solution_generation(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_number_of_conflicts_in_random_solution_generation(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_number_of_conflicts_in_random_solution_generation)
}

// optional int64 max_number_of_explored_assignments_per_try_in_ls = 21 [default = 10000];
inline bool BopParameters::_internal_has_max_number_of_explored_assignments_per_try_in_ls() const {
  bool value = (_has_bits_[0] & 0x02000000u) != 0;
  return value;
}
inline bool BopParameters::has_max_number_of_explored_assignments_per_try_in_ls() const {
  return _internal_has_max_number_of_explored_assignments_per_try_in_ls();
}
inline void BopParameters::clear_max_number_of_explored_assignments_per_try_in_ls() {
  max_number_of_explored_assignments_per_try_in_ls_ = PROTOBUF_LONGLONG(10000);
  _has_bits_[0] &= ~0x02000000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 BopParameters::_internal_max_number_of_explored_assignments_per_try_in_ls() const {
  return max_number_of_explored_assignments_per_try_in_ls_;
}
inline ::PROTOBUF_NAMESPACE_ID::int64 BopParameters::max_number_of_explored_assignments_per_try_in_ls() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_number_of_explored_assignments_per_try_in_ls)
  return _internal_max_number_of_explored_assignments_per_try_in_ls();
}
inline void BopParameters::_internal_set_max_number_of_explored_assignments_per_try_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _has_bits_[0] |= 0x02000000u;
  max_number_of_explored_assignments_per_try_in_ls_ = value;
}
inline void BopParameters::set_max_number_of_explored_assignments_per_try_in_ls(::PROTOBUF_NAMESPACE_ID::int64 value) {
  _internal_set_max_number_of_explored_assignments_per_try_in_ls(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_number_of_explored_assignments_per_try_in_ls)
}

// optional bool use_transposition_table_in_ls = 22 [default = true];
inline bool BopParameters::_internal_has_use_transposition_table_in_ls() const {
  bool value = (_has_bits_[0] & 0x04000000u) != 0;
  return value;
}
inline bool BopParameters::has_use_transposition_table_in_ls() const {
  return _internal_has_use_transposition_table_in_ls();
}
inline void BopParameters::clear_use_transposition_table_in_ls() {
  use_transposition_table_in_ls_ = true;
  _has_bits_[0] &= ~0x04000000u;
}
inline bool BopParameters::_internal_use_transposition_table_in_ls() const {
  return use_transposition_table_in_ls_;
}
inline bool BopParameters::use_transposition_table_in_ls() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_transposition_table_in_ls)
  return _internal_use_transposition_table_in_ls();
}
inline void BopParameters::_internal_set_use_transposition_table_in_ls(bool value) {
  _has_bits_[0] |= 0x04000000u;
  use_transposition_table_in_ls_ = value;
}
inline void BopParameters::set_use_transposition_table_in_ls(bool value) {
  _internal_set_use_transposition_table_in_ls(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_transposition_table_in_ls)
}

// optional bool use_potential_one_flip_repairs_in_ls = 39 [default = false];
inline bool BopParameters::_internal_has_use_potential_one_flip_repairs_in_ls() const {
  bool value = (_has_bits_[0] & 0x00000100u) != 0;
  return value;
}
inline bool BopParameters::has_use_potential_one_flip_repairs_in_ls() const {
  return _internal_has_use_potential_one_flip_repairs_in_ls();
}
inline void BopParameters::clear_use_potential_one_flip_repairs_in_ls() {
  use_potential_one_flip_repairs_in_ls_ = false;
  _has_bits_[0] &= ~0x00000100u;
}
inline bool BopParameters::_internal_use_potential_one_flip_repairs_in_ls() const {
  return use_potential_one_flip_repairs_in_ls_;
}
inline bool BopParameters::use_potential_one_flip_repairs_in_ls() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_potential_one_flip_repairs_in_ls)
  return _internal_use_potential_one_flip_repairs_in_ls();
}
inline void BopParameters::_internal_set_use_potential_one_flip_repairs_in_ls(bool value) {
  _has_bits_[0] |= 0x00000100u;
  use_potential_one_flip_repairs_in_ls_ = value;
}
inline void BopParameters::set_use_potential_one_flip_repairs_in_ls(bool value) {
  _internal_set_use_potential_one_flip_repairs_in_ls(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_potential_one_flip_repairs_in_ls)
}

// optional bool use_learned_binary_clauses_in_lp = 23 [default = true];
inline bool BopParameters::_internal_has_use_learned_binary_clauses_in_lp() const {
  bool value = (_has_bits_[0] & 0x08000000u) != 0;
  return value;
}
inline bool BopParameters::has_use_learned_binary_clauses_in_lp() const {
  return _internal_has_use_learned_binary_clauses_in_lp();
}
inline void BopParameters::clear_use_learned_binary_clauses_in_lp() {
  use_learned_binary_clauses_in_lp_ = true;
  _has_bits_[0] &= ~0x08000000u;
}
inline bool BopParameters::_internal_use_learned_binary_clauses_in_lp() const {
  return use_learned_binary_clauses_in_lp_;
}
inline bool BopParameters::use_learned_binary_clauses_in_lp() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_learned_binary_clauses_in_lp)
  return _internal_use_learned_binary_clauses_in_lp();
}
inline void BopParameters::_internal_set_use_learned_binary_clauses_in_lp(bool value) {
  _has_bits_[0] |= 0x08000000u;
  use_learned_binary_clauses_in_lp_ = value;
}
inline void BopParameters::set_use_learned_binary_clauses_in_lp(bool value) {
  _internal_set_use_learned_binary_clauses_in_lp(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_learned_binary_clauses_in_lp)
}

// optional int32 number_of_solvers = 24 [default = 1];
inline bool BopParameters::_internal_has_number_of_solvers() const {
  bool value = (_has_bits_[0] & 0x10000000u) != 0;
  return value;
}
inline bool BopParameters::has_number_of_solvers() const {
  return _internal_has_number_of_solvers();
}
inline void BopParameters::clear_number_of_solvers() {
  number_of_solvers_ = 1;
  _has_bits_[0] &= ~0x10000000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_number_of_solvers() const {
  return number_of_solvers_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::number_of_solvers() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.number_of_solvers)
  return _internal_number_of_solvers();
}
inline void BopParameters::_internal_set_number_of_solvers(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x10000000u;
  number_of_solvers_ = value;
}
inline void BopParameters::set_number_of_solvers(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_number_of_solvers(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.number_of_solvers)
}

// optional .operations_research.bop.BopParameters.ThreadSynchronizationType synchronization_type = 25 [default = NO_SYNCHRONIZATION];
inline bool BopParameters::_internal_has_synchronization_type() const {
  bool value = (_has_bits_[0] & 0x00000020u) != 0;
  return value;
}
inline bool BopParameters::has_synchronization_type() const {
  return _internal_has_synchronization_type();
}
inline void BopParameters::clear_synchronization_type() {
  synchronization_type_ = 0;
  _has_bits_[0] &= ~0x00000020u;
}
inline ::operations_research::bop::BopParameters_ThreadSynchronizationType BopParameters::_internal_synchronization_type() const {
  return static_cast< ::operations_research::bop::BopParameters_ThreadSynchronizationType >(synchronization_type_);
}
inline ::operations_research::bop::BopParameters_ThreadSynchronizationType BopParameters::synchronization_type() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.synchronization_type)
  return _internal_synchronization_type();
}
inline void BopParameters::_internal_set_synchronization_type(::operations_research::bop::BopParameters_ThreadSynchronizationType value) {
  assert(::operations_research::bop::BopParameters_ThreadSynchronizationType_IsValid(value));
  _has_bits_[0] |= 0x00000020u;
  synchronization_type_ = value;
}
inline void BopParameters::set_synchronization_type(::operations_research::bop::BopParameters_ThreadSynchronizationType value) {
  _internal_set_synchronization_type(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.synchronization_type)
}

// repeated .operations_research.bop.BopSolverOptimizerSet solver_optimizer_sets = 26;
inline int BopParameters::_internal_solver_optimizer_sets_size() const {
  return solver_optimizer_sets_.size();
}
inline int BopParameters::solver_optimizer_sets_size() const {
  return _internal_solver_optimizer_sets_size();
}
inline void BopParameters::clear_solver_optimizer_sets() {
  solver_optimizer_sets_.Clear();
}
inline ::operations_research::bop::BopSolverOptimizerSet* BopParameters::mutable_solver_optimizer_sets(int index) {
  // @@protoc_insertion_point(field_mutable:operations_research.bop.BopParameters.solver_optimizer_sets)
  return solver_optimizer_sets_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopSolverOptimizerSet >*
BopParameters::mutable_solver_optimizer_sets() {
  // @@protoc_insertion_point(field_mutable_list:operations_research.bop.BopParameters.solver_optimizer_sets)
  return &solver_optimizer_sets_;
}
inline const ::operations_research::bop::BopSolverOptimizerSet& BopParameters::_internal_solver_optimizer_sets(int index) const {
  return solver_optimizer_sets_.Get(index);
}
inline const ::operations_research::bop::BopSolverOptimizerSet& BopParameters::solver_optimizer_sets(int index) const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.solver_optimizer_sets)
  return _internal_solver_optimizer_sets(index);
}
inline ::operations_research::bop::BopSolverOptimizerSet* BopParameters::_internal_add_solver_optimizer_sets() {
  return solver_optimizer_sets_.Add();
}
inline ::operations_research::bop::BopSolverOptimizerSet* BopParameters::add_solver_optimizer_sets() {
  // @@protoc_insertion_point(field_add:operations_research.bop.BopParameters.solver_optimizer_sets)
  return _internal_add_solver_optimizer_sets();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::operations_research::bop::BopSolverOptimizerSet >&
BopParameters::solver_optimizer_sets() const {
  // @@protoc_insertion_point(field_list:operations_research.bop.BopParameters.solver_optimizer_sets)
  return solver_optimizer_sets_;
}

// optional string default_solver_optimizer_sets = 33 [default = "methods:{type:LOCAL_SEARCH }                       methods:{type:RANDOM_FIRST_SOLUTION }              methods:{type:LINEAR_RELAXATION }                  methods:{type:LP_FIRST_SOLUTION }                  methods:{type:OBJECTIVE_FIRST_SOLUTION }           methods:{type:USER_GUIDED_FIRST_SOLUTION }         methods:{type:RANDOM_CONSTRAINT_LNS_GUIDED_BY_LP } methods:{type:RANDOM_VARIABLE_LNS_GUIDED_BY_LP }   methods:{type:RELATION_GRAPH_LNS }                 methods:{type:RELATION_GRAPH_LNS_GUIDED_BY_LP }    methods:{type:RANDOM_CONSTRAINT_LNS }              methods:{type:RANDOM_VARIABLE_LNS }                methods:{type:SAT_CORE_BASED }                     methods:{type:COMPLETE_LNS }                       "];
inline bool BopParameters::_internal_has_default_solver_optimizer_sets() const {
  bool value = (_has_bits_[0] & 0x00000001u) != 0;
  return value;
}
inline bool BopParameters::has_default_solver_optimizer_sets() const {
  return _internal_has_default_solver_optimizer_sets();
}
inline void BopParameters::clear_default_solver_optimizer_sets() {
  default_solver_optimizer_sets_.ClearToDefault(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), GetArena());
  _has_bits_[0] &= ~0x00000001u;
}
inline const std::string& BopParameters::default_solver_optimizer_sets() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.default_solver_optimizer_sets)
  return _internal_default_solver_optimizer_sets();
}
inline void BopParameters::set_default_solver_optimizer_sets(const std::string& value) {
  _internal_set_default_solver_optimizer_sets(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.default_solver_optimizer_sets)
}
inline std::string* BopParameters::mutable_default_solver_optimizer_sets() {
  // @@protoc_insertion_point(field_mutable:operations_research.bop.BopParameters.default_solver_optimizer_sets)
  return _internal_mutable_default_solver_optimizer_sets();
}
inline const std::string& BopParameters::_internal_default_solver_optimizer_sets() const {
  return default_solver_optimizer_sets_.Get();
}
inline void BopParameters::_internal_set_default_solver_optimizer_sets(const std::string& value) {
  _has_bits_[0] |= 0x00000001u;
  default_solver_optimizer_sets_.Set(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), value, GetArena());
}
inline void BopParameters::set_default_solver_optimizer_sets(std::string&& value) {
  _has_bits_[0] |= 0x00000001u;
  default_solver_optimizer_sets_.Set(
    &::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), ::std::move(value), GetArena());
  // @@protoc_insertion_point(field_set_rvalue:operations_research.bop.BopParameters.default_solver_optimizer_sets)
}
inline void BopParameters::set_default_solver_optimizer_sets(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  _has_bits_[0] |= 0x00000001u;
  default_solver_optimizer_sets_.Set(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), ::std::string(value),
              GetArena());
  // @@protoc_insertion_point(field_set_char:operations_research.bop.BopParameters.default_solver_optimizer_sets)
}
inline void BopParameters::set_default_solver_optimizer_sets(const char* value,
    size_t size) {
  _has_bits_[0] |= 0x00000001u;
  default_solver_optimizer_sets_.Set(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), ::std::string(
      reinterpret_cast<const char*>(value), size), GetArena());
  // @@protoc_insertion_point(field_set_pointer:operations_research.bop.BopParameters.default_solver_optimizer_sets)
}
inline std::string* BopParameters::_internal_mutable_default_solver_optimizer_sets() {
  _has_bits_[0] |= 0x00000001u;
  return default_solver_optimizer_sets_.Mutable(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), GetArena());
}
inline std::string* BopParameters::release_default_solver_optimizer_sets() {
  // @@protoc_insertion_point(field_release:operations_research.bop.BopParameters.default_solver_optimizer_sets)
  if (!_internal_has_default_solver_optimizer_sets()) {
    return nullptr;
  }
  _has_bits_[0] &= ~0x00000001u;
  return default_solver_optimizer_sets_.ReleaseNonDefault(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), GetArena());
}
inline void BopParameters::set_allocated_default_solver_optimizer_sets(std::string* default_solver_optimizer_sets) {
  if (default_solver_optimizer_sets != nullptr) {
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  default_solver_optimizer_sets_.SetAllocated(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(), default_solver_optimizer_sets,
      GetArena());
  // @@protoc_insertion_point(field_set_allocated:operations_research.bop.BopParameters.default_solver_optimizer_sets)
}
inline std::string* BopParameters::unsafe_arena_release_default_solver_optimizer_sets() {
  // @@protoc_insertion_point(field_unsafe_arena_release:operations_research.bop.BopParameters.default_solver_optimizer_sets)
  GOOGLE_DCHECK(GetArena() != nullptr);
  _has_bits_[0] &= ~0x00000001u;
  return default_solver_optimizer_sets_.UnsafeArenaRelease(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(),
      GetArena());
}
inline void BopParameters::unsafe_arena_set_allocated_default_solver_optimizer_sets(
    std::string* default_solver_optimizer_sets) {
  GOOGLE_DCHECK(GetArena() != nullptr);
  if (default_solver_optimizer_sets != nullptr) {
    _has_bits_[0] |= 0x00000001u;
  } else {
    _has_bits_[0] &= ~0x00000001u;
  }
  default_solver_optimizer_sets_.UnsafeArenaSetAllocated(&::operations_research::bop::BopParameters::_i_give_permission_to_break_this_code_default_default_solver_optimizer_sets_.get(),
      default_solver_optimizer_sets, GetArena());
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:operations_research.bop.BopParameters.default_solver_optimizer_sets)
}

// optional bool use_lp_strong_branching = 29 [default = false];
inline bool BopParameters::_internal_has_use_lp_strong_branching() const {
  bool value = (_has_bits_[0] & 0x00000200u) != 0;
  return value;
}
inline bool BopParameters::has_use_lp_strong_branching() const {
  return _internal_has_use_lp_strong_branching();
}
inline void BopParameters::clear_use_lp_strong_branching() {
  use_lp_strong_branching_ = false;
  _has_bits_[0] &= ~0x00000200u;
}
inline bool BopParameters::_internal_use_lp_strong_branching() const {
  return use_lp_strong_branching_;
}
inline bool BopParameters::use_lp_strong_branching() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.use_lp_strong_branching)
  return _internal_use_lp_strong_branching();
}
inline void BopParameters::_internal_set_use_lp_strong_branching(bool value) {
  _has_bits_[0] |= 0x00000200u;
  use_lp_strong_branching_ = value;
}
inline void BopParameters::set_use_lp_strong_branching(bool value) {
  _internal_set_use_lp_strong_branching(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.use_lp_strong_branching)
}

// optional int32 decomposer_num_variables_threshold = 30 [default = 50];
inline bool BopParameters::_internal_has_decomposer_num_variables_threshold() const {
  bool value = (_has_bits_[0] & 0x80000000u) != 0;
  return value;
}
inline bool BopParameters::has_decomposer_num_variables_threshold() const {
  return _internal_has_decomposer_num_variables_threshold();
}
inline void BopParameters::clear_decomposer_num_variables_threshold() {
  decomposer_num_variables_threshold_ = 50;
  _has_bits_[0] &= ~0x80000000u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_decomposer_num_variables_threshold() const {
  return decomposer_num_variables_threshold_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::decomposer_num_variables_threshold() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.decomposer_num_variables_threshold)
  return _internal_decomposer_num_variables_threshold();
}
inline void BopParameters::_internal_set_decomposer_num_variables_threshold(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x80000000u;
  decomposer_num_variables_threshold_ = value;
}
inline void BopParameters::set_decomposer_num_variables_threshold(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_decomposer_num_variables_threshold(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.decomposer_num_variables_threshold)
}

// optional int32 num_bop_solvers_used_by_decomposition = 31 [default = 1];
inline bool BopParameters::_internal_has_num_bop_solvers_used_by_decomposition() const {
  bool value = (_has_bits_[1] & 0x00000001u) != 0;
  return value;
}
inline bool BopParameters::has_num_bop_solvers_used_by_decomposition() const {
  return _internal_has_num_bop_solvers_used_by_decomposition();
}
inline void BopParameters::clear_num_bop_solvers_used_by_decomposition() {
  num_bop_solvers_used_by_decomposition_ = 1;
  _has_bits_[1] &= ~0x00000001u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_num_bop_solvers_used_by_decomposition() const {
  return num_bop_solvers_used_by_decomposition_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::num_bop_solvers_used_by_decomposition() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.num_bop_solvers_used_by_decomposition)
  return _internal_num_bop_solvers_used_by_decomposition();
}
inline void BopParameters::_internal_set_num_bop_solvers_used_by_decomposition(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[1] |= 0x00000001u;
  num_bop_solvers_used_by_decomposition_ = value;
}
inline void BopParameters::set_num_bop_solvers_used_by_decomposition(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_num_bop_solvers_used_by_decomposition(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.num_bop_solvers_used_by_decomposition)
}

// optional double decomposed_problem_min_time_in_seconds = 36 [default = 0];
inline bool BopParameters::_internal_has_decomposed_problem_min_time_in_seconds() const {
  bool value = (_has_bits_[0] & 0x00000400u) != 0;
  return value;
}
inline bool BopParameters::has_decomposed_problem_min_time_in_seconds() const {
  return _internal_has_decomposed_problem_min_time_in_seconds();
}
inline void BopParameters::clear_decomposed_problem_min_time_in_seconds() {
  decomposed_problem_min_time_in_seconds_ = 0;
  _has_bits_[0] &= ~0x00000400u;
}
inline double BopParameters::_internal_decomposed_problem_min_time_in_seconds() const {
  return decomposed_problem_min_time_in_seconds_;
}
inline double BopParameters::decomposed_problem_min_time_in_seconds() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.decomposed_problem_min_time_in_seconds)
  return _internal_decomposed_problem_min_time_in_seconds();
}
inline void BopParameters::_internal_set_decomposed_problem_min_time_in_seconds(double value) {
  _has_bits_[0] |= 0x00000400u;
  decomposed_problem_min_time_in_seconds_ = value;
}
inline void BopParameters::set_decomposed_problem_min_time_in_seconds(double value) {
  _internal_set_decomposed_problem_min_time_in_seconds(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.decomposed_problem_min_time_in_seconds)
}

// optional int32 guided_sat_conflicts_chunk = 34 [default = 1000];
inline bool BopParameters::_internal_has_guided_sat_conflicts_chunk() const {
  bool value = (_has_bits_[1] & 0x00000002u) != 0;
  return value;
}
inline bool BopParameters::has_guided_sat_conflicts_chunk() const {
  return _internal_has_guided_sat_conflicts_chunk();
}
inline void BopParameters::clear_guided_sat_conflicts_chunk() {
  guided_sat_conflicts_chunk_ = 1000;
  _has_bits_[1] &= ~0x00000002u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_guided_sat_conflicts_chunk() const {
  return guided_sat_conflicts_chunk_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::guided_sat_conflicts_chunk() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.guided_sat_conflicts_chunk)
  return _internal_guided_sat_conflicts_chunk();
}
inline void BopParameters::_internal_set_guided_sat_conflicts_chunk(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[1] |= 0x00000002u;
  guided_sat_conflicts_chunk_ = value;
}
inline void BopParameters::set_guided_sat_conflicts_chunk(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_guided_sat_conflicts_chunk(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.guided_sat_conflicts_chunk)
}

// optional int32 max_lp_solve_for_feasibility_problems = 41 [default = 0];
inline bool BopParameters::_internal_has_max_lp_solve_for_feasibility_problems() const {
  bool value = (_has_bits_[0] & 0x00000800u) != 0;
  return value;
}
inline bool BopParameters::has_max_lp_solve_for_feasibility_problems() const {
  return _internal_has_max_lp_solve_for_feasibility_problems();
}
inline void BopParameters::clear_max_lp_solve_for_feasibility_problems() {
  max_lp_solve_for_feasibility_problems_ = 0;
  _has_bits_[0] &= ~0x00000800u;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::_internal_max_lp_solve_for_feasibility_problems() const {
  return max_lp_solve_for_feasibility_problems_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 BopParameters::max_lp_solve_for_feasibility_problems() const {
  // @@protoc_insertion_point(field_get:operations_research.bop.BopParameters.max_lp_solve_for_feasibility_problems)
  return _internal_max_lp_solve_for_feasibility_problems();
}
inline void BopParameters::_internal_set_max_lp_solve_for_feasibility_problems(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _has_bits_[0] |= 0x00000800u;
  max_lp_solve_for_feasibility_problems_ = value;
}
inline void BopParameters::set_max_lp_solve_for_feasibility_problems(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_max_lp_solve_for_feasibility_problems(value);
  // @@protoc_insertion_point(field_set:operations_research.bop.BopParameters.max_lp_solve_for_feasibility_problems)
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace bop
}  // namespace operations_research

PROTOBUF_NAMESPACE_OPEN

template <> struct is_proto_enum< ::operations_research::bop::BopOptimizerMethod_OptimizerType> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::operations_research::bop::BopOptimizerMethod_OptimizerType>() {
  return ::operations_research::bop::BopOptimizerMethod_OptimizerType_descriptor();
}
template <> struct is_proto_enum< ::operations_research::bop::BopParameters_ThreadSynchronizationType> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::operations_research::bop::BopParameters_ThreadSynchronizationType>() {
  return ::operations_research::bop::BopParameters_ThreadSynchronizationType_descriptor();
}

PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_ortools_2fbop_2fbop_5fparameters_2eproto
