21#include "absl/status/statusor.h"
38 const std::atomic<bool>* interrupt_solve) {
40 if (request->enable_internal_solver_output()) {
53 if (interrupt_solve !=
nullptr && interrupt_solve->load() ==
true) {
57 if (request->has_solver_time_limit_seconds()) {
59 request->solver_time_limit_seconds());
62 std::optional<LazyMutableCopy<MPModelProto>> optional_model =
64 if (!optional_model)
return response;
71 std::move(request).dispose();
72 optional_model.reset();
101 const std::optional<pdlp::ConvergenceInformation> convergence_information =
105 if (convergence_information.has_value()) {
#define ASSIGN_OR_RETURN(lhs, rexpr)
void add_variable_value(double value)
void add_reduced_cost(double value)
void set_objective_value(double value)
void set_status_str(Arg_ &&arg, Args_... args)
void set_solver_specific_info(Arg_ &&arg, Args_... args)
void add_dual_value(double value)
void set_status(::operations_research::MPSolverResponseStatus value)
::operations_research::pdlp::TerminationCriteria *PROTOBUF_NONNULL mutable_termination_criteria()
void set_verbosity_level(::int32_t value)
::operations_research::pdlp::TerminationReason termination_reason() const
bool has_termination_string() const
optional string termination_string = 4;
const ::std::string & termination_string() const
::operations_research::pdlp::PointType solution_type() const
const ::operations_research::pdlp::IterationStats & solution_stats() const
void set_time_sec_limit(double value)
std::optional< ConvergenceInformation > GetConvergenceInformation(const IterationStats &stats, PointType candidate_type)
absl::StatusOr< QuadraticProgram > QpFromMpModelProto(const MPModelProto &proto, bool relax_integer_variables, bool include_names)
SolverResult PrimalDualHybridGradient(QuadraticProgram qp, const PrimalDualHybridGradientParams ¶ms, const std::atomic< bool > *interrupt_solve, std::function< void(const std::string &)> message_callback, IterationStatsCallback iteration_stats_callback)
@ TERMINATION_REASON_PRIMAL_INFEASIBLE
@ TERMINATION_REASON_OPTIMAL
@ TERMINATION_REASON_NUMERICAL_ERROR
@ TERMINATION_REASON_INTERRUPTED_BY_USER
In SWIG mode, we don't want anything besides these top-level includes.
absl::StatusOr< MPSolutionResponse > PdlpSolveProto(LazyMutableCopy< MPModelRequest > request, const bool relax_integer_variables, const std::atomic< bool > *interrupt_solve)
@ MPSOLVER_CANCELLED_BY_USER
@ MPSOLVER_MODEL_INVALID_SOLVER_PARAMETERS
std::optional< LazyMutableCopy< MPModelProto > > GetMPModelOrPopulateResponse(LazyMutableCopy< MPModelRequest > &request, MPSolutionResponse *response)
bool ProtobufTextFormatMergeFromString(absl::string_view proto_text_string, ProtoType *proto)
double objective_scaling_factor
Eigen::VectorXd reduced_costs
Eigen::VectorXd dual_solution
Eigen::VectorXd primal_solution