diff --git a/ortools/java/com/google/ortools/modelbuilder/ModelBuilder.java b/ortools/java/com/google/ortools/modelbuilder/ModelBuilder.java index c38766aa8e..de15dbbaa8 100644 --- a/ortools/java/com/google/ortools/modelbuilder/ModelBuilder.java +++ b/ortools/java/com/google/ortools/modelbuilder/ModelBuilder.java @@ -338,6 +338,10 @@ public final class ModelBuilder { return helper.exportToLpString(obfuscate); } + public boolean writeToMpsFile(String filename, boolean obfuscate) { + return helper.writeToMpsFile(filename, obfuscate); + } + public boolean importFromMpsString(String mpsString) { return helper.importFromMpsString(mpsString); } diff --git a/ortools/linear_solver/csharp/ModelBuilder.cs b/ortools/linear_solver/csharp/ModelBuilder.cs index d858bd174a..41082ea80a 100644 --- a/ortools/linear_solver/csharp/ModelBuilder.cs +++ b/ortools/linear_solver/csharp/ModelBuilder.cs @@ -399,6 +399,11 @@ public class Model return helper_.ExportToLpString(obfuscate); } + public bool WriteToMpsFile(String filename, bool obfuscate) + { + return helper_.WriteToMpsFile(filename, obfuscate); + } + public bool ImportFromMpsString(String mpsString) { return helper_.ImportFromMpsString(mpsString); diff --git a/ortools/linear_solver/csharp/model_builder.i b/ortools/linear_solver/csharp/model_builder.i index 2a8cff5e03..d82b9f7893 100644 --- a/ortools/linear_solver/csharp/model_builder.i +++ b/ortools/linear_solver/csharp/model_builder.i @@ -39,6 +39,12 @@ VECTOR_AS_CSHARP_ARRAY(double, double, double, DoubleVector); options.obfuscate = obfuscate; return $self->ExportToLpString(options); } + + bool WriteToMpsFile(const std::string& filename, bool obfuscate) { + operations_research::MPModelExportOptions options; + options.obfuscate = obfuscate; + return $self->WriteToMpsFile(filename, options); + } } // Extend operations_research::ModelBuilderHelper %ignoreall @@ -120,6 +126,7 @@ VECTOR_AS_CSHARP_ARRAY(double, double, double, DoubleVector); %unignore operations_research::ModelBuilderHelper::ImportFromMpsFile; %unignore operations_research::ModelBuilderHelper::ImportFromLpString; %unignore operations_research::ModelBuilderHelper::ImportFromLpFile; +%unignore operations_research::ModelBuilderHelper::WriteToMpsFile(std::string, bool); %unignore operations_research::ModelBuilderHelper::ExportToMpsString(bool); %unignore operations_research::ModelBuilderHelper::ExportToLpString(bool); %unignore operations_research::ModelBuilderHelper::OverwriteModel; diff --git a/ortools/linear_solver/java/modelbuilder.i b/ortools/linear_solver/java/modelbuilder.i index 93d062dbac..e1b17ce7d9 100644 --- a/ortools/linear_solver/java/modelbuilder.i +++ b/ortools/linear_solver/java/modelbuilder.i @@ -99,6 +99,12 @@ class GlobalRefGuard { options.obfuscate = obfuscate; return $self->ExportToLpString(options); } + + bool writeToMpsFile(const std::string& filename, bool obfuscate) { + operations_research::MPModelExportOptions options; + options.obfuscate = obfuscate; + return $self->WriteToMpsFile(filename, options); + } } // Extend operations_research::ModelBuilderHelper %ignoreall @@ -182,6 +188,7 @@ class GlobalRefGuard { %rename (importFromLpFile) operations_research::ModelBuilderHelper::ImportFromLpFile; %unignore operations_research::ModelBuilderHelper::exportToMpsString; %unignore operations_research::ModelBuilderHelper::exportToLpString; +%unignore operations_research::ModelBuilderHelper::writeToMpsFile; %rename (overwriteModel) operations_research::ModelBuilderHelper::OverwriteModel; %unignore operations_research::ModelSolverHelper; diff --git a/ortools/linear_solver/model_exporter.cc b/ortools/linear_solver/model_exporter.cc index f5036b37d5..dab49a8c0c 100644 --- a/ortools/linear_solver/model_exporter.cc +++ b/ortools/linear_solver/model_exporter.cc @@ -250,9 +250,9 @@ absl::StatusOr ExportModelAsMpsFormat( return output; } -absl::Status WriteModelAsMpsFormat(absl::string_view filename, - const MPModelProto& model, - const MPModelExportOptions& options) { +absl::Status WriteModelToMpsFile(absl::string_view filename, + const MPModelProto& model, + const MPModelExportOptions& options) { if (model.general_constraint_size() > 0) { return absl::InvalidArgumentError("General constraints are not supported."); } diff --git a/ortools/linear_solver/model_exporter.h b/ortools/linear_solver/model_exporter.h index 21e6db8e9f..6123b0b35e 100644 --- a/ortools/linear_solver/model_exporter.h +++ b/ortools/linear_solver/model_exporter.h @@ -122,7 +122,7 @@ absl::StatusOr ExportModelAsMpsFormat( * Gurobi's description: * http://www.gurobi.com/documentation/5.1/reference-manual/node869 */ -absl::Status WriteModelAsMpsFormat( +absl::Status WriteModelToMpsFile( absl::string_view filename, const MPModelProto& model, const MPModelExportOptions& options = MPModelExportOptions()); diff --git a/ortools/linear_solver/python/model_builder.py b/ortools/linear_solver/python/model_builder.py index 9a759ceb2f..bca0e6df2c 100644 --- a/ortools/linear_solver/python/model_builder.py +++ b/ortools/linear_solver/python/model_builder.py @@ -1581,6 +1581,11 @@ class Model: options.obfuscate = obfuscate return self.__helper.export_to_mps_string(options) + def write_to_mps_file(self, filename: str, obfuscate: bool = False) -> bool: + options: mbh.MPModelExportOptions = mbh.MPModelExportOptions() + options.obfuscate = obfuscate + return self.__helper.write_to_mps_file(filename, options) + def export_to_proto(self) -> linear_solver_pb2.MPModelProto: """Exports the optimization model to a ProtoBuf format.""" return mbh.to_mpmodel_proto(self.__helper) diff --git a/ortools/linear_solver/python/model_builder_helper.cc b/ortools/linear_solver/python/model_builder_helper.cc index 4fbc135fa6..c83ef804a3 100644 --- a/ortools/linear_solver/python/model_builder_helper.cc +++ b/ortools/linear_solver/python/model_builder_helper.cc @@ -175,6 +175,8 @@ PYBIND11_MODULE(model_builder_helper, m) { arg("options") = MPModelExportOptions()) .def("export_to_lp_string", &ModelBuilderHelper::ExportToLpString, arg("options") = MPModelExportOptions()) + .def("write_to_mps_file", &ModelBuilderHelper::WriteToMpsFile, + arg("filename"), arg("options") = MPModelExportOptions()) .def("read_model_from_proto_file", &ModelBuilderHelper::ReadModelFromProtoFile, arg("filename")) .def("write_model_to_proto_file", diff --git a/ortools/linear_solver/solve.cc b/ortools/linear_solver/solve.cc index e1bf460232..325853635a 100644 --- a/ortools/linear_solver/solve.cc +++ b/ortools/linear_solver/solve.cc @@ -316,8 +316,8 @@ void Run() { } if (!absl::GetFlag(FLAGS_dump_mps).empty()) { - CHECK_OK(WriteModelAsMpsFormat(absl::GetFlag(FLAGS_dump_mps), - request_proto.model())); + CHECK_OK(WriteModelToMpsFile(absl::GetFlag(FLAGS_dump_mps), + request_proto.model())); } // Set or override request proto options from the command line flags. diff --git a/ortools/linear_solver/wrappers/model_builder_helper.cc b/ortools/linear_solver/wrappers/model_builder_helper.cc index 438eac97de..3f2c77114e 100644 --- a/ortools/linear_solver/wrappers/model_builder_helper.cc +++ b/ortools/linear_solver/wrappers/model_builder_helper.cc @@ -69,6 +69,11 @@ std::string ModelBuilderHelper::ExportToLpString( .value_or(""); } +bool ModelBuilderHelper::WriteToMpsFile(const std::string& filename, + const MPModelExportOptions& options) { + return WriteModelToMpsFile(filename, model_, options).ok(); +} + bool ModelBuilderHelper::ReadModelFromProtoFile(const std::string& filename) { if (file::GetTextProto(filename, &model_, file::Defaults()).ok() || file::GetBinaryProto(filename, &model_, file::Defaults()).ok()) { diff --git a/ortools/linear_solver/wrappers/model_builder_helper.h b/ortools/linear_solver/wrappers/model_builder_helper.h index 24525afaa8..6fa20539c1 100644 --- a/ortools/linear_solver/wrappers/model_builder_helper.h +++ b/ortools/linear_solver/wrappers/model_builder_helper.h @@ -51,6 +51,9 @@ class ModelBuilderHelper { options = MPModelExportOptions()); std::string ExportToLpString(const operations_research::MPModelExportOptions& options = MPModelExportOptions()); + bool WriteToMpsFile(const std::string& filename, + const operations_research::MPModelExportOptions& options = + MPModelExportOptions()); bool ReadModelFromProtoFile(const std::string& filename); bool WriteModelToProtoFile(const std::string& filename);