linear_solver: fixup

This commit is contained in:
Corentin Le Molgat
2025-11-12 15:48:48 +01:00
parent 785fd8fde0
commit e7e9e0c166
6 changed files with 19 additions and 19 deletions

View File

@@ -866,9 +866,9 @@ class MPSolver {
static int64_t global_num_constraints(); static int64_t global_num_constraints();
/// @deprecated Use TimeLimit() and SetTimeLimit(absl::Duration) instead. /// @deprecated Use TimeLimit() and SetTimeLimit(absl::Duration) instead.
/// @note These deprecated functions used the convention `time_limit = 0` /// @note These deprecated functions used the convention `time_limit = 0` to
/// to mean "no limit", which now corresponds /// mean "no limit", which now corresponds to
/// `to time_limit_ = InfiniteDuration()`. /// `time_limit_ = InfiniteDuration()`.
int64_t time_limit() const { int64_t time_limit() const {
return time_limit_ == absl::InfiniteDuration() return time_limit_ == absl::InfiniteDuration()
? 0 ? 0

View File

@@ -32,9 +32,9 @@
namespace operations_research { namespace operations_research {
::absl::Status Convert(const CapacityPlanningInstance& request, ::absl::Status Convert(const routing::CapacityPlanningInstance& request,
CapacityPlanningProblem* problem) { CapacityPlanningProblem* problem) {
const NetworkTopology& topology = request.topology(); const routing::NetworkTopology& topology = request.topology();
const int num_arcs = topology.from_node_size(); const int num_arcs = topology.from_node_size();
CHECK_EQ(num_arcs, topology.to_node_size()); CHECK_EQ(num_arcs, topology.to_node_size());
CHECK_EQ(num_arcs, topology.variable_cost_size()); CHECK_EQ(num_arcs, topology.variable_cost_size());
@@ -51,7 +51,7 @@ namespace operations_research {
} }
const int num_nodes = problem->graph.num_nodes(); const int num_nodes = problem->graph.num_nodes();
problem->demands_at_node_per_commodity.resize(num_nodes); problem->demands_at_node_per_commodity.resize(num_nodes);
const Commodities& commodities = request.commodities(); const routing::Commodities& commodities = request.commodities();
const int num_commodities = commodities.from_node_size(); const int num_commodities = commodities.from_node_size();
problem->num_commodities = num_commodities; problem->num_commodities = num_commodities;
CHECK_EQ(commodities.to_node_size(), num_commodities); CHECK_EQ(commodities.to_node_size(), num_commodities);

View File

@@ -19,7 +19,6 @@
#include "ortools/graph/graph.h" #include "ortools/graph/graph.h"
#include "ortools/linear_solver/linear_solver.h" #include "ortools/linear_solver/linear_solver.h"
#include "ortools/linear_solver/samples/network_design_ilph.h"
#include "ortools/routing/parsers/capacity_planning.pb.h" #include "ortools/routing/parsers/capacity_planning.pb.h"
// An implementation of the algorithm described in "An Efficient Matheuristic // An implementation of the algorithm described in "An Efficient Matheuristic
@@ -51,7 +50,7 @@ struct CapacityPlanningProblem {
// Converts a CapacityPlanningInstance to a CapacityPlanningProblem, which is // Converts a CapacityPlanningInstance to a CapacityPlanningProblem, which is
// easier to use for modeling using MIPs. // easier to use for modeling using MIPs.
::absl::Status Convert(const CapacityPlanningInstance& request, ::absl::Status Convert(const routing::CapacityPlanningInstance& request,
CapacityPlanningProblem* problem); CapacityPlanningProblem* problem);
struct CapacityPlanningParameters { struct CapacityPlanningParameters {

View File

@@ -25,17 +25,17 @@
#include "ortools/routing/parsers/capacity_planning.pb.h" #include "ortools/routing/parsers/capacity_planning.pb.h"
#include "ortools/routing/parsers/dow_parser.h" #include "ortools/routing/parsers/dow_parser.h"
ABSL_FLAG(std::string, input, "", "File path of the problem."); DEFINE_string(input, "", "File path of the problem.");
using operations_research::MPSolver; using operations_research::MPSolver;
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
InitGoogle(argv[0], &argc, &argv, true); InitGoogle(argv[0], &argc, &argv, true);
absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo); absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo);
operations_research::CapacityPlanningInstance request; operations_research::routing::CapacityPlanningInstance request;
operations_research::CapacityPlanningProblem problem; operations_research::CapacityPlanningProblem problem;
::absl::Status status = ::absl::Status status = operations_research::routing::ReadFile(
operations_research::ReadFile(absl::GetFlag(FLAGS_input), &request); absl::GetFlag(FLAGS_input), &request);
CHECK_OK(status); CHECK_OK(status);
LOG(INFO) << "File was read."; LOG(INFO) << "File was read.";
status = operations_research::Convert(request, &problem); status = operations_research::Convert(request, &problem);

View File

@@ -23,16 +23,16 @@
#include "ortools/routing/parsers/capacity_planning.pb.h" #include "ortools/routing/parsers/capacity_planning.pb.h"
#include "ortools/routing/parsers/dow_parser.h" #include "ortools/routing/parsers/dow_parser.h"
namespace operations_research { namespace operations_research::routing {
namespace { namespace {
TEST(ProtoToProblemTest, TransformC33) { TEST(ProtoToProblemTest, TransformC33) {
CapacityPlanningInstance request; CapacityPlanningInstance request;
::absl::Status status = ::absl::Status status = ReadFile(
ReadFile(file::JoinPathRespectAbsolute( file::JoinPathRespectAbsolute(
::testing::SrcDir(), "operations_research_data/", ::testing::SrcDir(), "google3/third_party/operations_research_data/",
"MULTICOM_FIXED_CHARGE_NETWORK_DESIGN/C/c33.dow"), "MULTICOM_FIXED_CHARGE_NETWORK_DESIGN/C/c33.dow"),
&request); &request);
EXPECT_OK(status); EXPECT_OK(status);
CapacityPlanningProblem problem; CapacityPlanningProblem problem;
status = Convert(request, &problem); status = Convert(request, &problem);
@@ -107,4 +107,4 @@ TEST(IlphTest, SolveEmptyProto) {
} }
} // namespace } // namespace
} // namespace operations_research } // namespace operations_research::routing

View File

@@ -243,6 +243,7 @@ void StiglerDiet() {
// [START variables] // [START variables]
std::vector<MPVariable*> foods; std::vector<MPVariable*> foods;
const double infinity = solver->infinity(); const double infinity = solver->infinity();
foods.reserve(data.size());
for (const Commodity& commodity : data) { for (const Commodity& commodity : data) {
foods.push_back(solver->MakeNumVar(0.0, infinity, commodity.name)); foods.push_back(solver->MakeNumVar(0.0, infinity, commodity.name));
} }