Skip to content

Commit aa4821c

Browse files
committed
flatzinc: export from google3
1 parent e7e9e0c commit aa4821c

File tree

4 files changed

+40
-37
lines changed

4 files changed

+40
-37
lines changed

ortools/flatzinc/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,14 @@ cc_binary(
183183
"//ortools/base",
184184
"//ortools/base:path",
185185
"//ortools/base:timer",
186+
"//ortools/sat:model",
186187
"//ortools/util:logging",
187188
"@abseil-cpp//absl/flags:flag",
188189
"@abseil-cpp//absl/log",
189190
"@abseil-cpp//absl/log:check",
190191
"@abseil-cpp//absl/log:flags",
191192
"@abseil-cpp//absl/strings",
192193
"@abseil-cpp//absl/time",
194+
"@protobuf",
193195
],
194196
)

ortools/flatzinc/cp_model_fz_solver.cc

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
#include "absl/strings/str_join.h"
4141
#include "absl/types/span.h"
4242
#include "google/protobuf/arena.h"
43-
#include "google/protobuf/text_format.h"
4443
#include "ortools/base/iterator_adaptors.h"
4544
#include "ortools/base/stl_util.h"
4645
#include "ortools/flatzinc/checker.h"
@@ -3714,11 +3713,12 @@ void ProcessFloatingPointOVariablesAndObjective(fz::Model* fz_model) {
37143713
}
37153714
}
37163715

3717-
void SolveFzWithCpModelProto(const fz::Model& fz_model,
3718-
const fz::FlatzincSatParameters& p,
3719-
const std::string& sat_params,
3720-
SolverLogger* logger,
3721-
SolverLogger* solution_logger) {
3716+
CpSolverResponse SolveFzWithCpModelProto(const fz::Model& fz_model,
3717+
const fz::FlatzincSatParameters& p,
3718+
const SatParameters& sat_params,
3719+
Model* sat_model,
3720+
SolverLogger* solution_logger) {
3721+
SolverLogger* logger = sat_model->GetOrCreate<SolverLogger>();
37223722
const bool enumerate_all_solutions_of_a_sat_problem =
37233723
p.search_all_solutions && fz_model.objective() == nullptr;
37243724
CpModelProtoWithMapping m(enumerate_all_solutions_of_a_sat_problem);
@@ -3924,11 +3924,7 @@ void SolveFzWithCpModelProto(const fz::Model& fz_model,
39243924

39253925
// The order is important, we want the flag parameters to overwrite anything
39263926
// set in m.parameters.
3927-
sat::SatParameters flag_parameters;
3928-
CHECK(google::protobuf::TextFormat::ParseFromString(sat_params,
3929-
&flag_parameters))
3930-
<< sat_params;
3931-
m.parameters.MergeFrom(flag_parameters);
3927+
m.parameters.MergeFrom(sat_params);
39323928

39333929
// We only need an observer if 'p.display_all_solutions' or
39343930
// 'p.search_all_solutions' are true.
@@ -3979,19 +3975,12 @@ void SolveFzWithCpModelProto(const fz::Model& fz_model,
39793975
};
39803976
}
39813977

3982-
Model sat_model;
3983-
3984-
// Setup logging.
3985-
// Note that we need to do that before we start calling the sat functions
3986-
// below that might create a SolverLogger() themselves.
3987-
sat_model.Register<SolverLogger>(logger);
3988-
3989-
sat_model.Add(NewSatParameters(m.parameters));
3978+
sat_model->Add(NewSatParameters(m.parameters));
39903979
if (solution_observer != nullptr) {
3991-
sat_model.Add(NewFeasibleSolutionObserver(solution_observer));
3980+
sat_model->Add(NewFeasibleSolutionObserver(solution_observer));
39923981
}
39933982

3994-
const CpSolverResponse response = SolveCpModel(m.proto, &sat_model);
3983+
const CpSolverResponse response = SolveCpModel(m.proto, sat_model);
39953984

39963985
// Check the returned solution with the fz model checker.
39973986
if (response.status() == CpSolverStatus::FEASIBLE ||
@@ -4065,6 +4054,7 @@ void SolveFzWithCpModelProto(const fz::Model& fz_model,
40654054
OutputFlatzincStats(response, solution_logger);
40664055
}
40674056
}
4057+
return response;
40684058
}
40694059

40704060
} // namespace sat

ortools/flatzinc/cp_model_fz_solver.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#include <string>
1818

1919
#include "ortools/flatzinc/model.h"
20+
#include "ortools/sat/cp_model.pb.h"
21+
#include "ortools/sat/model.h"
22+
#include "ortools/sat/sat_parameters.pb.h"
2023
#include "ortools/util/logging.h"
2124

2225
namespace operations_research {
@@ -49,11 +52,11 @@ namespace sat {
4952
void ProcessFloatingPointOVariablesAndObjective(fz::Model* fz_model);
5053

5154
// Solves the given flatzinc model using the CP-SAT solver.
52-
void SolveFzWithCpModelProto(const fz::Model& model,
53-
const fz::FlatzincSatParameters& p,
54-
const std::string& sat_params,
55-
SolverLogger* logger,
56-
SolverLogger* solution_logger);
55+
CpSolverResponse SolveFzWithCpModelProto(const fz::Model& model,
56+
const fz::FlatzincSatParameters& p,
57+
const SatParameters& sat_params,
58+
Model* sat_model,
59+
SolverLogger* solution_logger);
5760

5861
} // namespace sat
5962
} // namespace operations_research

ortools/flatzinc/fz.cc

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@
3737
#include "absl/strings/str_split.h"
3838
#include "absl/strings/string_view.h"
3939
#include "absl/time/time.h"
40+
#include "google/protobuf/text_format.h"
4041
#include "ortools/base/logging.h"
4142
#include "ortools/base/path.h"
4243
#include "ortools/base/timer.h"
4344
#include "ortools/flatzinc/cp_model_fz_solver.h"
4445
#include "ortools/flatzinc/model.h"
4546
#include "ortools/flatzinc/parser.h"
47+
#include "ortools/sat/model.h"
4648
#include "ortools/util/logging.h"
4749

4850
constexpr bool kOrToolsMode = true;
@@ -234,20 +236,23 @@ int main(int argc, char** argv) {
234236
input = residual_flags.back();
235237
}
236238

237-
operations_research::SolverLogger logger;
239+
operations_research::sat::Model sat_model;
240+
operations_research::SolverLogger* logger =
241+
sat_model.GetOrCreate<operations_research::SolverLogger>();
238242
if (absl::GetFlag(FLAGS_ortools_mode)) {
239-
logger.EnableLogging(absl::GetFlag(FLAGS_fz_logging));
243+
logger->EnableLogging(absl::GetFlag(FLAGS_fz_logging));
240244
// log_to_stdout is disabled later.
241-
logger.AddInfoLoggingCallback(operations_research::fz::LogInFlatzincFormat);
245+
logger->AddInfoLoggingCallback(
246+
operations_research::fz::LogInFlatzincFormat);
242247
} else {
243-
logger.EnableLogging(true);
244-
logger.SetLogToStdOut(true);
248+
logger->EnableLogging(true);
249+
logger->SetLogToStdOut(true);
245250
}
246251

247252
absl::Duration parse_duration;
248253
operations_research::fz::Model model =
249254
operations_research::fz::ParseFlatzincModel(
250-
input, !absl::GetFlag(FLAGS_read_from_stdin), &logger,
255+
input, !absl::GetFlag(FLAGS_read_from_stdin), logger,
251256
&parse_duration);
252257
operations_research::sat::ProcessFloatingPointOVariablesAndObjective(&model);
253258

@@ -275,14 +280,17 @@ int main(int argc, char** argv) {
275280
SOLVER_LOG(&solution_logger, "%% TIMEOUT");
276281
}
277282
if (parameters.log_search_progress) {
278-
SOLVER_LOG(&logger, "CpSolverResponse summary:");
279-
SOLVER_LOG(&logger, "status: UNKNOWN");
283+
SOLVER_LOG(logger, "CpSolverResponse summary:");
284+
SOLVER_LOG(logger, "status: UNKNOWN");
280285
}
281286
return EXIT_SUCCESS;
282287
}
283288

284-
operations_research::sat::SolveFzWithCpModelProto(model, parameters,
285-
absl::GetFlag(FLAGS_params),
286-
&logger, &solution_logger);
289+
operations_research::sat::SatParameters flag_parameters;
290+
CHECK(google::protobuf::TextFormat::ParseFromString(
291+
absl::GetFlag(FLAGS_params), &flag_parameters))
292+
<< absl::GetFlag(FLAGS_params);
293+
operations_research::sat::SolveFzWithCpModelProto(
294+
model, parameters, flag_parameters, &sat_model, &solution_logger);
287295
return EXIT_SUCCESS;
288296
}

0 commit comments

Comments
 (0)