14#ifndef OR_TOOLS_MATH_OPT_CORE_SOLVER_INTERFACE_H_
15#define OR_TOOLS_MATH_OPT_CORE_SOLVER_INTERFACE_H_
22#include "absl/container/flat_hash_map.h"
23#include "absl/status/status.h"
24#include "absl/status/statusor.h"
25#include "absl/synchronization/mutex.h"
26#include "ortools/math_opt/callback.pb.h"
27#include "ortools/math_opt/model.pb.h"
28#include "ortools/math_opt/model_parameters.pb.h"
29#include "ortools/math_opt/model_update.pb.h"
30#include "ortools/math_opt/parameters.pb.h"
31#include "ortools/math_opt/result.pb.h"
54 using Callback = std::function<absl::StatusOr<CallbackResultProto>(
55 const CallbackDataProto&)>;
65 std::function<absl::StatusOr<std::unique_ptr<SolverInterface>>(
66 const ModelProto&
model,
const SolverInitializerProto& initializer)>;
80 virtual absl::StatusOr<SolveResultProto>
Solve(
82 const ModelSolveParametersProto& model_parameters,
83 const CallbackRegistrationProto& callback_registration,
Callback cb) = 0;
89 virtual absl::Status
Update(
const ModelUpdateProto& model_update) = 0;
95 virtual bool CanUpdate(
const ModelUpdateProto& model_update) = 0;
114 absl::StatusOr<std::unique_ptr<SolverInterface>>
Create(
115 SolverType solver_type,
const ModelProto&
model,
116 const SolverInitializerProto& initializer)
const;
130 mutable absl::Mutex mutex_;
131 absl::flat_hash_map<SolverType, SolverInterface::Factory> registered_solvers_;
144#define MATH_OPT_REGISTER_SOLVER(solver_type, solver_factory) \
146 const void* const kRegisterSolver ABSL_ATTRIBUTE_UNUSED = [] { \
147 AllSolversRegistry::Instance()->Register(solver_type, solver_factory); \
AllSolversRegistry(const AllSolversRegistry &)=delete
std::string RegisteredSolversToString() const
std::vector< SolverType > RegisteredSolvers() const
AllSolversRegistry & operator=(const AllSolversRegistry &)=delete
static AllSolversRegistry * Instance()
bool IsRegistered(SolverType solver_type) const
void Register(SolverType solver_type, SolverInterface::Factory factory)
absl::StatusOr< std::unique_ptr< SolverInterface > > Create(SolverType solver_type, const ModelProto &model, const SolverInitializerProto &initializer) const
virtual absl::Status Update(const ModelUpdateProto &model_update)=0
SolverInterface & operator=(const SolverInterface &)=delete
virtual ~SolverInterface()=default
virtual absl::StatusOr< SolveResultProto > Solve(const SolveParametersProto ¶meters, const ModelSolveParametersProto &model_parameters, const CallbackRegistrationProto &callback_registration, Callback cb)=0
std::function< absl::StatusOr< CallbackResultProto >(const CallbackDataProto &)> Callback
SolverInterface()=default
std::function< absl::StatusOr< std::unique_ptr< SolverInterface > >(const ModelProto &model, const SolverInitializerProto &initializer)> Factory
virtual bool CanUpdate(const ModelUpdateProto &model_update)=0
SolverInterface(const SolverInterface &)=delete
Collection of objects used to extend the Constraint Solver library.