14#ifndef ORTOOLS_MATH_OPT_CPP_SOLVE_IMPL_H_
15#define ORTOOLS_MATH_OPT_CPP_SOLVE_IMPL_H_
19#include "absl/base/nullability.h"
20#include "absl/functional/any_invocable.h"
21#include "absl/status/statusor.h"
52 absl::AnyInvocable<absl::StatusOr<std::unique_ptr<BaseSolver>>(
79 static absl::StatusOr<std::unique_ptr<IncrementalSolverImpl>>
New(
83 absl::StatusOr<UpdateResult>
Update()
override;
88 absl::StatusOr<ComputeInfeasibleSubsystemResult>
97 bool remove_names, std::shared_ptr<SolveInterrupter> local_canceller,
98 std::unique_ptr<const ScopedSolveInterrupterCallback> user_canceller_cb,
100 std::unique_ptr<UpdateTracker> update_tracker,
101 std::unique_ptr<BaseSolver> solver);
105 const bool remove_names_;
109 std::shared_ptr<SolveInterrupter> local_canceller_;
110 std::unique_ptr<const ScopedSolveInterrupterCallback> user_canceller_cb_;
112 const std::unique_ptr<UpdateTracker> update_tracker_;
113 std::unique_ptr<BaseSolver> solver_;
absl::StatusOr< SolveResult > SolveWithoutUpdate() const
absl::StatusOr< ComputeInfeasibleSubsystemResult > ComputeInfeasibleSubsystemWithoutUpdate() const
IncrementalSolver()=default
absl::StatusOr< UpdateResult > Update() override
static absl::StatusOr< std::unique_ptr< IncrementalSolverImpl > > New(BaseSolverFactory solver_factory, Model *model, SolverType solver_type, const SolveInterrupter *absl_nullable user_canceller, bool remove_names)
SolverType solver_type() const override
absl::StatusOr< ComputeInfeasibleSubsystemResult > ComputeInfeasibleSubsystemImpl(const BaseSolverFactory solver_factory, const Model &model, const SolverType solver_type, const ComputeInfeasibleSubsystemArguments &compute_args, const SolveInterrupter *absl_nullable const user_canceller, const bool remove_names)
absl::AnyInvocable< absl::StatusOr< std::unique_ptr< BaseSolver > >( SolverTypeProto solver_type, ModelProto model, SolveInterrupter *local_canceller) const > BaseSolverFactory
absl::StatusOr< SolveResult > SolveImpl(const BaseSolverFactory solver_factory, const Model &model, const SolverType solver_type, const SolveArguments &solve_args, const SolveInterrupter *absl_nullable const user_canceller, const bool remove_names)
const ModelStorage *absl_nonnull ModelStorageCPtr