From ac0fe6254412b3fdf6ed3e03a4b817d256daf721 Mon Sep 17 00:00:00 2001 From: Laurent Perron Date: Tue, 17 Jun 2025 12:47:23 +0200 Subject: [PATCH] gscip cleanup; linear_solver samples reident --- ortools/gscip/BUILD.bazel | 14 -------------- ortools/gscip/gscip.cc | 13 +++---------- ortools/gscip/gscip.h | 7 ++----- ortools/linear_solver/BUILD.bazel | 2 +- ortools/linear_solver/glpk_interface.cc | 4 ---- ortools/linear_solver/proto_solver/BUILD.bazel | 15 ++++++++++++++- .../proto_solver/scip_params.cc} | 2 +- .../proto_solver/scip_params.h} | 6 +++--- .../proto_solver/scip_proto_solver.cc | 2 +- ortools/linear_solver/python/linear_solver.i | 2 +- .../samples/assignment_groups_mip.py | 1 + ortools/linear_solver/samples/assignment_mb.py | 1 + ortools/linear_solver/samples/assignment_mip.py | 1 + .../samples/assignment_task_sizes_mip.py | 1 + .../linear_solver/samples/assignment_teams_mip.py | 1 + ortools/linear_solver/samples/basic_example.py | 1 + ortools/linear_solver/samples/bin_packing_mb.py | 1 + ortools/linear_solver/samples/bin_packing_mip.py | 2 ++ ortools/linear_solver/scip_interface.cc | 2 +- ortools/linear_solver/solve.cc | 2 +- 20 files changed, 37 insertions(+), 43 deletions(-) rename ortools/{gscip/legacy_scip_params.cc => linear_solver/proto_solver/scip_params.cc} (98%) rename ortools/{gscip/legacy_scip_params.h => linear_solver/proto_solver/scip_params.h} (83%) diff --git a/ortools/gscip/BUILD.bazel b/ortools/gscip/BUILD.bazel index 1c7e016f10..00bbd080db 100644 --- a/ortools/gscip/BUILD.bazel +++ b/ortools/gscip/BUILD.bazel @@ -49,19 +49,6 @@ cc_library( ], ) -cc_library( - name = "legacy_scip_params", - srcs = ["legacy_scip_params.cc"], - hdrs = ["legacy_scip_params.h"], - deps = [ - "//ortools/linear_solver:scip_helper_macros", - "@abseil-cpp//absl/status", - "@abseil-cpp//absl/strings", - "@abseil-cpp//absl/strings:str_format", - "@scip", - ], -) - cc_library( name = "gscip", srcs = [ @@ -76,7 +63,6 @@ cc_library( ":gscip_cc_proto", ":gscip_message_handler", ":gscip_parameters", - ":legacy_scip_params", "//ortools/base", "//ortools/base:status_builder", "//ortools/base:status_macros", diff --git a/ortools/gscip/gscip.cc b/ortools/gscip/gscip.cc index bba9b3fc8a..58eb771694 100644 --- a/ortools/gscip/gscip.cc +++ b/ortools/gscip/gscip.cc @@ -40,7 +40,6 @@ #include "ortools/gscip/gscip.pb.h" #include "ortools/gscip/gscip_event_handler.h" #include "ortools/gscip/gscip_parameters.h" -#include "ortools/gscip/legacy_scip_params.h" #include "ortools/linear_solver/scip_helper_macros.h" #include "ortools/port/proto_utils.h" #include "ortools/util/status_macros.h" @@ -294,8 +293,7 @@ const GScipConstraintOptions& DefaultGScipConstraintOptions() { return constraint_options; } -absl::Status GScip::SetParams(const GScipParameters& params, - absl::string_view legacy_params) { +absl::Status GScip::SetParams(const GScipParameters& params) { if (params.has_silence_output()) { SCIPsetMessagehdlrQuiet(scip_, params.silence_output()); } @@ -350,10 +348,6 @@ absl::Status GScip::SetParams(const GScipParameters& params, RETURN_IF_SCIP_ERROR( SCIPsetRealParam(scip_, real_param.first.c_str(), real_param.second)); } - if (!legacy_params.empty()) { - RETURN_IF_ERROR( - LegacyScipSetSolverSpecificParameters(legacy_params, scip_)); - } return absl::OkStatus(); } @@ -929,8 +923,7 @@ absl::StatusOr GScip::SuggestHint( } absl::StatusOr GScip::Solve( - const GScipParameters& params, absl::string_view legacy_params, - const GScipMessageHandler message_handler, + const GScipParameters& params, const GScipMessageHandler message_handler, const Interrupter* const interrupter) { if (InErrorState()) { return absl::InvalidArgumentError( @@ -950,7 +943,7 @@ absl::StatusOr GScip::Solve( GScipResult result; // Step 1: apply parameters. - const absl::Status param_status = SetParams(params, legacy_params); + const absl::Status param_status = SetParams(params); if (!param_status.ok()) { result.gscip_output.set_status(GScipOutput::INVALID_SOLVER_PARAMETERS); // Conversion to std::string for open source build. diff --git a/ortools/gscip/gscip.h b/ortools/gscip/gscip.h index 722fc45dff..e6f9aa08ca 100644 --- a/ortools/gscip/gscip.h +++ b/ortools/gscip/gscip.h @@ -178,8 +178,7 @@ class GScip { static std::string ScipVersion(); // After Solve() the parameters are reset and SCIP stage is restored to - // PROBLEM. "legacy_params" are in the format of legacy_scip_params.h and are - // applied after "params". Use of "legacy_params" is discouraged. + // PROBLEM. // // The returned StatusOr will contain an error only if an: // * An underlying function from SCIP fails. @@ -192,7 +191,6 @@ class GScip { // returns. absl::StatusOr Solve( const GScipParameters& params = GScipParameters(), - absl::string_view legacy_params = "", GScipMessageHandler message_handler = nullptr, const Interrupter* interrupter = nullptr); @@ -480,8 +478,7 @@ class GScip { // Releases SCIP memory. absl::Status CleanUp(); - absl::Status SetParams(const GScipParameters& params, - absl::string_view legacy_params); + absl::Status SetParams(const GScipParameters& params); absl::Status FreeTransform(); // Returns an error if |d| >= ScipInf(). diff --git a/ortools/linear_solver/BUILD.bazel b/ortools/linear_solver/BUILD.bazel index 4a7ed5e0ad..d574cc3343 100644 --- a/ortools/linear_solver/BUILD.bazel +++ b/ortools/linear_solver/BUILD.bazel @@ -311,7 +311,7 @@ cc_library( "//conditions:default": [], }) + select({ ":use_scip": [ - "//ortools/gscip:legacy_scip_params", + "//ortools/linear_solver/proto_solver:scip_params", "//ortools/linear_solver/proto_solver:scip_proto_solver", "@scip", ], diff --git a/ortools/linear_solver/glpk_interface.cc b/ortools/linear_solver/glpk_interface.cc index aa76d17397..95549b7b45 100644 --- a/ortools/linear_solver/glpk_interface.cc +++ b/ortools/linear_solver/glpk_interface.cc @@ -15,7 +15,6 @@ #include #include -#include #include #include #include @@ -24,10 +23,7 @@ #include #include "absl/base/attributes.h" -#include "absl/memory/memory.h" #include "absl/strings/str_format.h" -#include "ortools/base/commandlineflags.h" -#include "ortools/base/hash.h" #include "ortools/base/logging.h" #include "ortools/base/timer.h" #include "ortools/glpk/glpk_env_deleter.h" diff --git a/ortools/linear_solver/proto_solver/BUILD.bazel b/ortools/linear_solver/proto_solver/BUILD.bazel index 8b01c79af5..1e8952014d 100644 --- a/ortools/linear_solver/proto_solver/BUILD.bazel +++ b/ortools/linear_solver/proto_solver/BUILD.bazel @@ -110,6 +110,19 @@ cc_library( ], ) +cc_library( + name = "scip_params", + srcs = ["scip_params.cc"], + hdrs = ["scip_params.h"], + deps = [ + "//ortools/linear_solver:scip_helper_macros", + "@abseil-cpp//absl/status", + "@abseil-cpp//absl/strings", + "@abseil-cpp//absl/strings:str_format", + "@scip", + ], +) + cc_library( name = "scip_proto_solver", srcs = ["scip_proto_solver.cc"], @@ -121,10 +134,10 @@ cc_library( deps = [ "//ortools/base", "//ortools/base:timer", - "//ortools/gscip:legacy_scip_params", "//ortools/linear_solver:linear_solver_cc_proto", "//ortools/linear_solver:model_validator", "//ortools/linear_solver:scip_helper_macros", + "//ortools/linear_solver/proto_solver:scip_params", "//ortools/util:lazy_mutable_copy", "@abseil-cpp//absl/cleanup", "@abseil-cpp//absl/container:btree", diff --git a/ortools/gscip/legacy_scip_params.cc b/ortools/linear_solver/proto_solver/scip_params.cc similarity index 98% rename from ortools/gscip/legacy_scip_params.cc rename to ortools/linear_solver/proto_solver/scip_params.cc index 13f015a39b..282b5d303a 100644 --- a/ortools/gscip/legacy_scip_params.cc +++ b/ortools/linear_solver/proto_solver/scip_params.cc @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ortools/gscip/legacy_scip_params.h" +#include "ortools/linear_solver/proto_solver/scip_params.h" #include #include diff --git a/ortools/gscip/legacy_scip_params.h b/ortools/linear_solver/proto_solver/scip_params.h similarity index 83% rename from ortools/gscip/legacy_scip_params.h rename to ortools/linear_solver/proto_solver/scip_params.h index d50d5072b2..fecd699c08 100644 --- a/ortools/gscip/legacy_scip_params.h +++ b/ortools/linear_solver/proto_solver/scip_params.h @@ -11,8 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OR_TOOLS_GSCIP_LEGACY_SCIP_PARAMS_H_ -#define OR_TOOLS_GSCIP_LEGACY_SCIP_PARAMS_H_ +#ifndef OR_TOOLS_LINEAR_SOLVER_PROTO_SOLVER_SCIP_PARAMS_H_ +#define OR_TOOLS_LINEAR_SOLVER_PROTO_SOLVER_SCIP_PARAMS_H_ #include @@ -27,4 +27,4 @@ absl::Status LegacyScipSetSolverSpecificParameters(absl::string_view parameters, SCIP* scip); } -#endif // OR_TOOLS_GSCIP_LEGACY_SCIP_PARAMS_H_ +#endif // OR_TOOLS_LINEAR_SOLVER_PROTO_SOLVER_SCIP_PARAMS_H_ diff --git a/ortools/linear_solver/proto_solver/scip_proto_solver.cc b/ortools/linear_solver/proto_solver/scip_proto_solver.cc index 3829b73204..8e36df5dfb 100644 --- a/ortools/linear_solver/proto_solver/scip_proto_solver.cc +++ b/ortools/linear_solver/proto_solver/scip_proto_solver.cc @@ -41,9 +41,9 @@ #include "absl/time/time.h" #include "ortools/base/status_macros.h" #include "ortools/base/timer.h" -#include "ortools/gscip/legacy_scip_params.h" #include "ortools/linear_solver/linear_solver.pb.h" #include "ortools/linear_solver/model_validator.h" +#include "ortools/linear_solver/proto_solver/scip_params.h" #include "ortools/linear_solver/scip_helper_macros.h" #include "ortools/util/lazy_mutable_copy.h" #include "scip/cons_and.h" diff --git a/ortools/linear_solver/python/linear_solver.i b/ortools/linear_solver/python/linear_solver.i index 087622250b..2309ea3e4c 100644 --- a/ortools/linear_solver/python/linear_solver.i +++ b/ortools/linear_solver/python/linear_solver.i @@ -24,7 +24,7 @@ // solver.Maximize(10 * x1 + 6 * x2) // // USAGE EXAMPLES: -// - ortools/python/linear_programming.py +// - examples/python/linear_programming.py // - ./pywraplp_test.py // // TODO(user): test all the APIs that are currently marked as 'untested'. diff --git a/ortools/linear_solver/samples/assignment_groups_mip.py b/ortools/linear_solver/samples/assignment_groups_mip.py index 62e18572f6..e37318ca22 100644 --- a/ortools/linear_solver/samples/assignment_groups_mip.py +++ b/ortools/linear_solver/samples/assignment_groups_mip.py @@ -16,6 +16,7 @@ """Solve assignment problem for given group of workers.""" # [START import] from ortools.linear_solver import pywraplp + # [END import] diff --git a/ortools/linear_solver/samples/assignment_mb.py b/ortools/linear_solver/samples/assignment_mb.py index d366b204bd..f15b455738 100644 --- a/ortools/linear_solver/samples/assignment_mb.py +++ b/ortools/linear_solver/samples/assignment_mb.py @@ -20,6 +20,7 @@ import io import pandas as pd from ortools.linear_solver.python import model_builder + # [END import] diff --git a/ortools/linear_solver/samples/assignment_mip.py b/ortools/linear_solver/samples/assignment_mip.py index 7f8a315430..b6c830314b 100644 --- a/ortools/linear_solver/samples/assignment_mip.py +++ b/ortools/linear_solver/samples/assignment_mip.py @@ -16,6 +16,7 @@ # [START program] # [START import] from ortools.linear_solver import pywraplp + # [END import] diff --git a/ortools/linear_solver/samples/assignment_task_sizes_mip.py b/ortools/linear_solver/samples/assignment_task_sizes_mip.py index da15fd5acf..8e9b4bfb9e 100644 --- a/ortools/linear_solver/samples/assignment_task_sizes_mip.py +++ b/ortools/linear_solver/samples/assignment_task_sizes_mip.py @@ -16,6 +16,7 @@ """MIP example that solves an assignment problem.""" # [START import] from ortools.linear_solver import pywraplp + # [END import] diff --git a/ortools/linear_solver/samples/assignment_teams_mip.py b/ortools/linear_solver/samples/assignment_teams_mip.py index 3e27b2e9e0..bdd4f9c9a1 100644 --- a/ortools/linear_solver/samples/assignment_teams_mip.py +++ b/ortools/linear_solver/samples/assignment_teams_mip.py @@ -16,6 +16,7 @@ """MIP example that solves an assignment problem.""" # [START import] from ortools.linear_solver import pywraplp + # [END import] diff --git a/ortools/linear_solver/samples/basic_example.py b/ortools/linear_solver/samples/basic_example.py index bdf5b570ae..baaf5ae5ad 100644 --- a/ortools/linear_solver/samples/basic_example.py +++ b/ortools/linear_solver/samples/basic_example.py @@ -17,6 +17,7 @@ # [START import] from ortools.init.python import init from ortools.linear_solver import pywraplp + # [END import] diff --git a/ortools/linear_solver/samples/bin_packing_mb.py b/ortools/linear_solver/samples/bin_packing_mb.py index 1882771a95..3d7dcaa908 100644 --- a/ortools/linear_solver/samples/bin_packing_mb.py +++ b/ortools/linear_solver/samples/bin_packing_mb.py @@ -20,6 +20,7 @@ import io import pandas as pd from ortools.linear_solver.python import model_builder + # [END import] diff --git a/ortools/linear_solver/samples/bin_packing_mip.py b/ortools/linear_solver/samples/bin_packing_mip.py index 4f49aabcaf..977759c38b 100755 --- a/ortools/linear_solver/samples/bin_packing_mip.py +++ b/ortools/linear_solver/samples/bin_packing_mip.py @@ -16,6 +16,7 @@ # [START program] # [START import] from ortools.linear_solver import pywraplp + # [END import] @@ -31,6 +32,7 @@ def create_data_model(): data["bin_capacity"] = 100 return data + # [END data_model] diff --git a/ortools/linear_solver/scip_interface.cc b/ortools/linear_solver/scip_interface.cc index cd3b5390d6..582a4409ec 100644 --- a/ortools/linear_solver/scip_interface.cc +++ b/ortools/linear_solver/scip_interface.cc @@ -35,11 +35,11 @@ #include "ortools/base/logging.h" #include "ortools/base/status_macros.h" #include "ortools/base/timer.h" -#include "ortools/gscip/legacy_scip_params.h" #include "ortools/linear_solver/linear_solver.h" #include "ortools/linear_solver/linear_solver.pb.h" #include "ortools/linear_solver/linear_solver_callback.h" #include "ortools/linear_solver/proto_solver/proto_utils.h" +#include "ortools/linear_solver/proto_solver/scip_params.h" #include "ortools/linear_solver/proto_solver/scip_proto_solver.h" #include "ortools/linear_solver/scip_callback.h" #include "ortools/linear_solver/scip_helper_macros.h" diff --git a/ortools/linear_solver/solve.cc b/ortools/linear_solver/solve.cc index 3d77bb37e9..52c2957529 100644 --- a/ortools/linear_solver/solve.cc +++ b/ortools/linear_solver/solve.cc @@ -32,7 +32,7 @@ // CP-SAT parameters: // // solve --solver=sat \ -// --params="max_time_in_seconds:600, num_search_workers:8" +// --params="max_time_in_seconds:600, num_workers:8" // --stderrthreshold=0 \ // --input=/tmp/foo.mps \ // 2>/tmp/foo.err