[Bazel] enable highs for linear_solver by default; better support for highs in linear_solver; read .lp file in solve_model.py
This commit is contained in:
@@ -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": [],
|
||||
}),
|
||||
)
|
||||
|
||||
|
||||
@@ -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<double>(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<double>(solver_->time_limit()) / 1000.0);
|
||||
}
|
||||
|
||||
// Set parameters.
|
||||
absl::StatusOr<MPSolutionResponse> response =
|
||||
HighsSolveProto(std::move(request));
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user