linear_solver: fixup
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user