switch flags setters and getters to the absl format

This commit is contained in:
Laurent Perron
2020-10-21 00:21:54 +02:00
parent 1bf7ccf721
commit a4258f2bdf
527 changed files with 48384 additions and 45461 deletions

View File

@@ -34,20 +34,15 @@ namespace operations_research {
// Takes a filename and a buffer and fills the lines buffer
// with the lines of the file corresponding to the filename.
void ParseFileByLines(const std::string& filename,
std::vector<std::string>* lines);
void ParseFileByLines(const std::string &filename,
std::vector<std::string> *lines);
// The FapVariable struct represents a radio link of the
// frequency assignment problem.
struct FapVariable {
FapVariable()
: domain_index(-1),
domain_size(0),
domain(),
degree(0),
initial_position(-1),
mobility_index(-1),
mobility_cost(-1),
: domain_index(-1), domain_size(0), domain(), degree(0),
initial_position(-1), mobility_index(-1), mobility_cost(-1),
hard(false) {}
~FapVariable() {}
@@ -84,15 +79,8 @@ struct FapVariable {
// radio links of the frequency assignment problem.
struct FapConstraint {
FapConstraint()
: variable1(-1),
variable2(-1),
impact(0),
type(""),
operation(""),
value(-1),
weight_index(-1),
weight_cost(-1),
hard(false) {}
: variable1(-1), variable2(-1), impact(0), type(""), operation(""),
value(-1), weight_index(-1), weight_cost(-1), hard(false) {}
~FapConstraint() {}
// Fields:
@@ -147,15 +135,15 @@ struct FapComponent {
// This file describes all the variables in the instance.
// Each line corresponds to one variable.
class VariableParser {
public:
explicit VariableParser(const std::string& data_directory);
public:
explicit VariableParser(const std::string &data_directory);
~VariableParser();
const std::map<int, FapVariable>& variables() const { return variables_; }
const std::map<int, FapVariable> &variables() const { return variables_; }
void Parse();
private:
private:
const std::string filename_;
// A map is used because in the model, the variables have ids which may not
// be consecutive, may be very sparse and don't have a specific upper-bound.
@@ -169,15 +157,15 @@ class VariableParser {
// This file describes the domains used by the variables of the problem.
// Each line describes one domain.
class DomainParser {
public:
explicit DomainParser(const std::string& data_directory);
public:
explicit DomainParser(const std::string &data_directory);
~DomainParser();
const std::map<int, std::vector<int> >& domains() const { return domains_; }
const std::map<int, std::vector<int> > &domains() const { return domains_; }
void Parse();
private:
private:
const std::string filename_;
// A map is used because in the model, the ids of the different available
// domains may be random values, since they are used as names. The key of the
@@ -191,15 +179,15 @@ class DomainParser {
// This file describes the constraints of the instance.
// Each line defines a binary constraint.
class ConstraintParser {
public:
explicit ConstraintParser(const std::string& data_directory);
public:
explicit ConstraintParser(const std::string &data_directory);
~ConstraintParser();
const std::vector<FapConstraint>& constraints() const { return constraints_; }
const std::vector<FapConstraint> &constraints() const { return constraints_; }
void Parse();
private:
private:
const std::string filename_;
std::vector<FapConstraint> constraints_;
@@ -211,19 +199,19 @@ class ConstraintParser {
// It may also contain 8 coefficients: 4 for different constraint violation
// costs and 4 for different variable mobility costs.
class ParametersParser {
public:
explicit ParametersParser(const std::string& data_directory);
public:
explicit ParametersParser(const std::string &data_directory);
~ParametersParser();
std::string objective() const { return objective_; }
const std::vector<int>& constraint_weights() const {
const std::vector<int> &constraint_weights() const {
return constraint_weights_;
}
const std::vector<int>& variable_weights() const { return variable_weights_; }
const std::vector<int> &variable_weights() const { return variable_weights_; }
void Parse();
private:
private:
const std::string filename_;
static const int constraint_coefficient_no_ = 4;
static const int variable_coefficient_no_ = 4;
@@ -234,33 +222,33 @@ class ParametersParser {
};
namespace {
int strtoint32(const std::string& word) {
int strtoint32(const std::string &word) {
int result;
CHECK(absl::SimpleAtoi(word, &result));
return result;
}
} // namespace
} // namespace
// Function that finds the disjoint sub-graphs of the graph of the instance.
void FindComponents(const std::vector<FapConstraint>& constraints,
const std::map<int, FapVariable>& variables,
void FindComponents(const std::vector<FapConstraint> &constraints,
const std::map<int, FapVariable> &variables,
const int maximum_variable_id,
absl::flat_hash_map<int, FapComponent>* components);
absl::flat_hash_map<int, FapComponent> *components);
// Function that computes the impact of a constraint.
int EvaluateConstraintImpact(const std::map<int, FapVariable>& variables,
int EvaluateConstraintImpact(const std::map<int, FapVariable> &variables,
const int max_weight_cost,
const FapConstraint constraint);
// Function that parses an instance of frequency assignment problem.
void ParseInstance(const std::string& data_directory, bool find_components,
std::map<int, FapVariable>* variables,
std::vector<FapConstraint>* constraints,
std::string* objective, std::vector<int>* frequencies,
absl::flat_hash_map<int, FapComponent>* components);
void ParseInstance(const std::string &data_directory, bool find_components,
std::map<int, FapVariable> *variables,
std::vector<FapConstraint> *constraints,
std::string *objective, std::vector<int> *frequencies,
absl::flat_hash_map<int, FapComponent> *components);
void ParseFileByLines(const std::string& filename,
std::vector<std::string>* lines) {
void ParseFileByLines(const std::string &filename,
std::vector<std::string> *lines) {
CHECK(lines != nullptr);
std::string result;
CHECK_OK(file::GetContents(filename, &result, file::Defaults()));
@@ -268,7 +256,7 @@ void ParseFileByLines(const std::string& filename,
}
// VariableParser Implementation
VariableParser::VariableParser(const std::string& data_directory)
VariableParser::VariableParser(const std::string &data_directory)
: filename_(data_directory + "/var.txt") {}
VariableParser::~VariableParser() {}
@@ -276,7 +264,7 @@ VariableParser::~VariableParser() {}
void VariableParser::Parse() {
std::vector<std::string> lines;
ParseFileByLines(filename_, &lines);
for (const std::string& line : lines) {
for (const std::string &line : lines) {
std::vector<std::string> tokens =
absl::StrSplit(line, ' ', absl::SkipEmpty());
if (tokens.empty()) {
@@ -295,7 +283,7 @@ void VariableParser::Parse() {
}
// DomainParser Implementation
DomainParser::DomainParser(const std::string& data_directory)
DomainParser::DomainParser(const std::string &data_directory)
: filename_(data_directory + "/dom.txt") {}
DomainParser::~DomainParser() {}
@@ -303,7 +291,7 @@ DomainParser::~DomainParser() {}
void DomainParser::Parse() {
std::vector<std::string> lines;
ParseFileByLines(filename_, &lines);
for (const std::string& line : lines) {
for (const std::string &line : lines) {
std::vector<std::string> tokens =
absl::StrSplit(line, ' ', absl::SkipEmpty());
if (tokens.empty()) {
@@ -326,7 +314,7 @@ void DomainParser::Parse() {
}
// ConstraintParser Implementation
ConstraintParser::ConstraintParser(const std::string& data_directory)
ConstraintParser::ConstraintParser(const std::string &data_directory)
: filename_(data_directory + "/ctr.txt") {}
ConstraintParser::~ConstraintParser() {}
@@ -334,7 +322,7 @@ ConstraintParser::~ConstraintParser() {}
void ConstraintParser::Parse() {
std::vector<std::string> lines;
ParseFileByLines(filename_, &lines);
for (const std::string& line : lines) {
for (const std::string &line : lines) {
std::vector<std::string> tokens =
absl::StrSplit(line, ' ', absl::SkipEmpty());
if (tokens.empty()) {
@@ -361,9 +349,8 @@ const int ParametersParser::constraint_coefficient_no_;
const int ParametersParser::variable_coefficient_no_;
const int ParametersParser::coefficient_no_;
ParametersParser::ParametersParser(const std::string& data_directory)
: filename_(data_directory + "/cst.txt"),
objective_(""),
ParametersParser::ParametersParser(const std::string &data_directory)
: filename_(data_directory + "/cst.txt"), objective_(""),
constraint_weights_(constraint_coefficient_no_, 0),
variable_weights_(variable_coefficient_no_, 0) {}
@@ -380,7 +367,7 @@ void ParametersParser::Parse() {
std::vector<std::string> lines;
ParseFileByLines(filename_, &lines);
for (const std::string& line : lines) {
for (const std::string &line : lines) {
if (objective) {
largest_token =
largest_token || (line.find("largest") != std::string::npos);
@@ -426,17 +413,17 @@ void ParametersParser::Parse() {
}
// TODO(user): Make FindComponents linear instead of quadratic.
void FindComponents(const std::vector<FapConstraint>& constraints,
const std::map<int, FapVariable>& variables,
void FindComponents(const std::vector<FapConstraint> &constraints,
const std::map<int, FapVariable> &variables,
const int maximum_variable_id,
absl::flat_hash_map<int, FapComponent>* components) {
absl::flat_hash_map<int, FapComponent> *components) {
std::vector<int> in_component(maximum_variable_id + 1, -1);
int constraint_index = 0;
for (const FapConstraint& constraint : constraints) {
for (const FapConstraint &constraint : constraints) {
const int variable_id1 = constraint.variable1;
const int variable_id2 = constraint.variable2;
const FapVariable& variable1 = gtl::FindOrDie(variables, variable_id1);
const FapVariable& variable2 = gtl::FindOrDie(variables, variable_id2);
const FapVariable &variable1 = gtl::FindOrDie(variables, variable_id1);
const FapVariable &variable2 = gtl::FindOrDie(variables, variable_id2);
CHECK_LT(variable_id1, in_component.size());
CHECK_LT(variable_id2, in_component.size());
if (in_component[variable_id1] < 0 && in_component[variable_id2] < 0) {
@@ -482,24 +469,22 @@ void FindComponents(const std::vector<FapConstraint>& constraints,
CHECK(gtl::ContainsKey(*components, max_component_index));
if (min_component_index != max_component_index) {
// Update the component_index of maximum indexed component's variables.
for (const auto& variable :
for (const auto &variable :
(*components)[max_component_index].variables) {
int variable_id = variable.first;
in_component[variable_id] = min_component_index;
}
// Insert all the variables of the maximum indexed component to the
// variables of the minimum indexed component.
((*components)[min_component_index])
.variables.insert(
((*components)[max_component_index]).variables.begin(),
((*components)[max_component_index]).variables.end());
((*components)[min_component_index]).variables
.insert(((*components)[max_component_index]).variables.begin(),
((*components)[max_component_index]).variables.end());
// Insert all the constraints of the maximum indexed component to the
// constraints of the minimum indexed component.
((*components)[min_component_index])
.constraints.insert(
((*components)[min_component_index]).constraints.end(),
((*components)[max_component_index]).constraints.begin(),
((*components)[max_component_index]).constraints.end());
((*components)[min_component_index]).constraints
.insert(((*components)[min_component_index]).constraints.end(),
((*components)[max_component_index]).constraints.begin(),
((*components)[max_component_index]).constraints.end());
(*components)[min_component_index].constraints.push_back(constraint);
// Delete the maximum indexed component from the components set.
components->erase(max_component_index);
@@ -512,12 +497,12 @@ void FindComponents(const std::vector<FapConstraint>& constraints,
}
}
int EvaluateConstraintImpact(const std::map<int, FapVariable>& variables,
int EvaluateConstraintImpact(const std::map<int, FapVariable> &variables,
const int max_weight_cost,
const FapConstraint constraint) {
const FapVariable& variable1 =
const FapVariable &variable1 =
gtl::FindOrDie(variables, constraint.variable1);
const FapVariable& variable2 =
const FapVariable &variable2 =
gtl::FindOrDie(variables, constraint.variable2);
const int degree1 = variable1.degree;
const int degree2 = variable2.degree;
@@ -535,11 +520,11 @@ int EvaluateConstraintImpact(const std::map<int, FapVariable>& variables,
return max_degree + min_degree + operator_impact + hardness_impact;
}
void ParseInstance(const std::string& data_directory, bool find_components,
std::map<int, FapVariable>* variables,
std::vector<FapConstraint>* constraints,
std::string* objective, std::vector<int>* frequencies,
absl::flat_hash_map<int, FapComponent>* components) {
void ParseInstance(const std::string &data_directory, bool find_components,
std::map<int, FapVariable> *variables,
std::vector<FapConstraint> *constraints,
std::string *objective, std::vector<int> *frequencies,
absl::flat_hash_map<int, FapComponent> *components) {
CHECK(variables != nullptr);
CHECK(constraints != nullptr);
CHECK(objective != nullptr);
@@ -564,7 +549,7 @@ void ParseInstance(const std::string& data_directory, bool find_components,
(cst.constraint_weights()).begin(), (cst.constraint_weights()).end());
// Make the variables of the instance.
for (auto& it : *variables) {
for (auto &it : *variables) {
it.second.domain = gtl::FindOrDie(dom.domains(), it.second.domain_index);
it.second.domain_size = it.second.domain.size();
@@ -579,7 +564,7 @@ void ParseInstance(const std::string& data_directory, bool find_components,
}
}
// Make the constraints of the instance.
for (FapConstraint& ct : *constraints) {
for (FapConstraint &ct : *constraints) {
if ((ct.weight_index == -1) || (ct.weight_index == 0)) {
ct.weight_cost = -1;
ct.hard = true;
@@ -599,18 +584,18 @@ void ParseInstance(const std::string& data_directory, bool find_components,
CHECK(components != nullptr);
FindComponents(*constraints, *variables, maximum_variable_id, components);
// Evaluate each components's constraints impacts.
for (auto& component : *components) {
for (auto& constraint : component.second.constraints) {
for (auto &component : *components) {
for (auto &constraint : component.second.constraints) {
constraint.impact = EvaluateConstraintImpact(
*variables, maximum_weight_cost, constraint);
}
}
} else {
for (FapConstraint& constraint : *constraints) {
for (FapConstraint &constraint : *constraints) {
constraint.impact =
EvaluateConstraintImpact(*variables, maximum_weight_cost, constraint);
}
}
}
} // namespace operations_research
#endif // OR_TOOLS_EXAMPLES_FAP_PARSER_H_
} // namespace operations_research
#endif // OR_TOOLS_EXAMPLES_FAP_PARSER_H_