109 std::function<
void(
const std::string&)> logging_callback) {
120 if (logging_callback !=
nullptr) {
127 if (request->has_solver_specific_parameters()) {
129 if (!std::is_base_of<Message, glop::GlopParameters>::value) {
130 if (!params.MergeFromString(request->solver_specific_parameters())) {
131 return ModelInvalidParametersResponse(
133 "solver_specific_parameters is not a valid binary stream of the "
134 "GLOPParameters proto");
138 request->solver_specific_parameters(), ¶ms)) {
139 return ModelInvalidParametersResponse(
141 "solver_specific_parameters is not a valid textual representation "
142 "of the GlopParameters proto");
146 if (request->has_solver_time_limit_seconds()) {
152 if (!error.empty()) {
153 return ModelInvalidParametersResponse(
154 logger, absl::StrCat(
"Invalid Glop parameters: ", error));
163 std::optional<LazyMutableCopy<MPModelProto>> optional_model =
165 if (!optional_model)
return response;
169 return ModelInvalidResponse(logger,
170 "GLOP does not support general constraints");
174 MPModelProtoToLinearProgram(mp_model, &linear_program);
175 std::move(request).dispose();
182 std::unique_ptr<TimeLimit> time_limit =
184 if (interrupt_solve !=
nullptr) {
185 if (interrupt_solve->load()) {
188 "Solve not started, because the user set the atomic<bool> in "
189 "MPSolver::SolveWithProto() to true before solving could "
193 time_limit->RegisterExternalBooleanAsLimit(interrupt_solve);
208 for (
int var_id = 0; var_id < num_vars; ++var_id) {
220 interrupt_solve->load()) {
225 for (
int ct_id = 0; ct_id < num_constraints; ++ct_id) {