implement WriteToMpsFile in model_builder and model_exporter

This commit is contained in:
Laurent Perron
2024-07-12 17:48:57 +02:00
parent 204ff78b10
commit df2edaf7b7
11 changed files with 44 additions and 6 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -250,9 +250,9 @@ absl::StatusOr<std::string> 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.");
}

View File

@@ -122,7 +122,7 @@ absl::StatusOr<std::string> 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());

View File

@@ -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)

View File

@@ -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",

View File

@@ -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.

View File

@@ -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()) {

View File

@@ -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);