diff --git a/ortools/linear_solver/BUILD.bazel b/ortools/linear_solver/BUILD.bazel index 7c0ffde3e5..fa5667971d 100644 --- a/ortools/linear_solver/BUILD.bazel +++ b/ortools/linear_solver/BUILD.bazel @@ -97,7 +97,7 @@ config_setting( bool_flag( name = "with_highs", - build_setting_default = False, + build_setting_default = True, ) config_setting( @@ -316,6 +316,12 @@ cc_library( "@scip", ], "//conditions:default": [], + })+ select({ + ":use_highs": [ + "//ortools/linear_solver/proto_solver:highs_proto_solver", + "@highs", + ], + "//conditions:default": [], }), ) diff --git a/ortools/linear_solver/highs_interface.cc b/ortools/linear_solver/highs_interface.cc index 3dc5a8e499..ec4c372767 100644 --- a/ortools/linear_solver/highs_interface.cc +++ b/ortools/linear_solver/highs_interface.cc @@ -114,23 +114,6 @@ MPSolver::ResultStatus HighsInterface::Solve(const MPSolverParameters& param) { Reset(); ExtractModel(); - SetParameters(param); - if (quiet_) { - // parameters_.set_verbosity_level(0); - } else { - // parameters_.set_verbosity_level(3); - } - - solver_->SetSolverSpecificParametersAsString( - solver_->solver_specific_parameter_string_); - - // Time limit. - if (solver_->time_limit()) { - VLOG(1) << "Setting time limit = " << solver_->time_limit() << " ms."; - // parameters_.mutable_termination_criteria()->set_time_sec_limit( - // static_cast(solver_->time_limit()) / 1000.0); - } - // Mark variables and constraints as extracted. for (int i = 0; i < solver_->variables_.size(); ++i) { set_variable_as_extracted(i, true); @@ -147,6 +130,15 @@ MPSolver::ResultStatus HighsInterface::Solve(const MPSolverParameters& param) { ? MPModelRequest::HIGHS_MIXED_INTEGER_PROGRAMMING : MPModelRequest::HIGHS_LINEAR_PROGRAMMING); + SetParameters(param); + request.set_enable_internal_solver_output(!quiet_); + request.set_solver_specific_parameters( + solver_->solver_specific_parameter_string_); + if (solver_->time_limit()) { + request.set_solver_time_limit_seconds( + static_cast(solver_->time_limit()) / 1000.0); + } + // Set parameters. absl::StatusOr response = HighsSolveProto(std::move(request)); diff --git a/ortools/linear_solver/python/solve_model.py b/ortools/linear_solver/python/solve_model.py index 5cded45323..8cc93b9cfa 100644 --- a/ortools/linear_solver/python/solve_model.py +++ b/ortools/linear_solver/python/solve_model.py @@ -32,11 +32,15 @@ def main(argv: Sequence[str]) -> None: model = model_builder.ModelBuilder() - # Load MPS or proto file. + # Load MPS, LP, or proto file. if _INPUT.value.endswith(".mps"): if not model.import_from_mps_file(_INPUT.value): print(f"Cannot import MPS file: '{_INPUT.value}'") return + elif _INPUT.value.endswith(".lp"): + if not model.import_from_lp_file(_INPUT.value): + print(f"Cannot import LP file: '{_INPUT.value}'") + return elif not model.import_from_proto_file(_INPUT.value): print(f"Cannot import Proto file: '{_INPUT.value}'") return