40 std::vector<std::unique_ptr<glop::Preprocessor>>* for_postsolve,
42 CHECK(model !=
nullptr);
53 std::unique_ptr<TimeLimit> time_limit =
65 std::vector<std::string> names;
66 std::vector<std::unique_ptr<glop::Preprocessor>> lp_preprocessors;
67 const std::string header =
68 "Running basic LP presolve, initial problem dimensions: ";
69 if (!hint_is_present) {
95 for (
int i = 0; i < lp_preprocessors.size(); ++i) {
96 if (time_limit->LimitReached())
break;
97 auto& preprocessor = lp_preprocessors[i];
98 preprocessor->SetTimeLimit(time_limit.get());
99 preprocessor->UseInMipContext();
100 const bool need_postsolve = preprocessor->Run(&lp);
101 names[i].resize(header.size(),
' ');
105 if (need_postsolve) for_postsolve->push_back(std::move(preprocessor));
109 if (!hint_is_present) {
111 std::make_unique<glop::ShiftVariableBoundsPreprocessor>(&glop_params);
112 shift_bounds->UseInMipContext();
113 const bool need_postsolve = shift_bounds->Run(&lp);
115 return shift_bounds->status();
117 if (need_postsolve) {
118 for_postsolve->push_back(std::move(shift_bounds));
126 if (hint_is_present) {