Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bf2c40c

Browse files
Don't use reference types as members
1 parent 5bf4ee4 commit bf2c40c

File tree

3 files changed

+59
-92
lines changed

3 files changed

+59
-92
lines changed

‎include/colouring/graph_colouring.h

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -141,19 +141,6 @@ namespace graph_colouring {
141141
*/
142142
class ColouringStrategy {
143143
public:
144-
ColouringStrategy(const std::vector<InitOperator> &initOperators,
145-
const std::vector<CrossoverOperator> &crossoverOperators,
146-
const std::vector<LSOperator> &lsOperators) :
147-
initOperators(initOperators),
148-
crossoverOperators(crossoverOperators),
149-
lsOperators(lsOperators) {
150-
assert(!initOperators.empty());
151-
assert(!crossoverOperators.empty());
152-
assert(!lsOperators.empty());
153-
}
154-
155-
virtual ~ColouringStrategy() = default;
156-
157144
/**
158145
* True if the given coloring is a valid solution. By default, a valid coloring must:
159146
* - have (at most) k colors
@@ -194,24 +181,18 @@ namespace graph_colouring {
194181
const Colouring &b) const = 0;
195182

196183
/**< Used initialization operators */
197-
conststd::vector<InitOperator> &initOperators;
184+
std::vector<InitOperator> initOperators;
198185
/**< Crossover operators */
199-
conststd::vector<CrossoverOperator> &crossoverOperators;
186+
std::vector<CrossoverOperator> crossoverOperators;
200187
/**< Local Search / Mutation operators */
201-
conststd::vector<LSOperator> &lsOperators;
188+
std::vector<LSOperator> lsOperators;
202189
};
203190

204191
/**
205192
* This strategy is supposed for operator families which can handle invalid colourings
206193
*/
207194
class FixedKColouringStrategy : public ColouringStrategy {
208195
public:
209-
FixedKColouringStrategy(const std::vector<InitOperator> &initOperators,
210-
const std::vector<CrossoverOperator> &crossoverOperators,
211-
const std::vector<LSOperator> &lsOperators) :
212-
ColouringStrategy(initOperators, crossoverOperators, lsOperators) {
213-
}
214-
215196
bool compare(const graph_access &G,
216197
const Colouring &a,
217198
const Colouring &b) const override {
@@ -229,12 +210,6 @@ namespace graph_colouring {
229210
*/
230211
class VariableColouringStrategy : public ColouringStrategy {
231212
public:
232-
VariableColouringStrategy(const std::vector<InitOperator> &initOperators,
233-
const std::vector<CrossoverOperator> &crossoverOperators,
234-
const std::vector<LSOperator> &lsOperators) :
235-
ColouringStrategy(initOperators, crossoverOperators, lsOperators) {
236-
}
237-
238213
bool compare(const graph_access &G,
239214
const Colouring &a,
240215
const Colouring &b) const override {

‎src/colouring/hca.cpp

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,21 @@ namespace graph_colouring {
1717
const size_t threadCount,
1818
std::ostream *outputStream) {
1919

20-
std::vector<InitOperator> hcaInitOps = {[](const graph_access &graph,
21-
const ColorCount colors) {
20+
auto invalidColoring = std::make_shared<FixedKColouringStrategy>();
21+
invalidColoring->initOperators.emplace_back([](const graph_access &graph,
22+
const ColorCount colors) {
2223
return graph_colouring::initByGreedySaturation(graph, colors);
2324

24-
}};
25-
std::vector<CrossoverOperator> hcaCrossoverOps = {[](const Colouring &s1,
26-
const Colouring &s2,
27-
const graph_access &graph) {
25+
});
26+
invalidColoring->crossoverOperators.emplace_back([](const Colouring &s1,
27+
const Colouring &s2,
28+
const graph_access &graph) {
2829
return graph_colouring::gpxCrossover(s1, s2);
29-
}};
30-
std::vector<LSOperator> hcaLSOps = {[L, A, alpha](const Colouring &s,
31-
const graph_access &graph) {
30+
});
31+
invalidColoring->lsOperators.emplace_back([L, A, alpha](const Colouring &s,
32+
const graph_access &graph) {
3233
return graph_colouring::tabuSearchOperator(s, graph, L, A, alpha);
33-
}};
34-
35-
auto invalidColoring = std::make_shared<FixedKColouringStrategy>(hcaInitOps,
36-
hcaCrossoverOps,
37-
hcaLSOps);
34+
});
3835

3936
return ColouringAlgorithm().perform({invalidColoring},
4037
G,

‎tests/colouring/graph_colouring_test.cpp

Lines changed: 45 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -42,70 +42,65 @@ TEST(GraphColouringNumberOfConflictingNodes, SimpleGraph) {
4242

4343
TEST(GraphColouring, parallelSchedule) {
4444

45-
std::vector<InitOperator> initOps = {[](const graph_access &graph,
46-
const size_t colors) {
45+
46+
auto invalidColoring = std::make_shared<FixedKColouringStrategy>();
47+
invalidColoring->initOperators.emplace_back([](const graph_access &graph,
48+
const size_t colors) {
4749
Colouring dummy(colors);
4850
return dummy;
49-
}, [](const graph_access &graph,
50-
const size_t colors) {
51+
});
52+
invalidColoring->initOperators.emplace_back([](const graph_access &graph,
53+
const size_t colors) {
5154
Colouring dummy(colors);
5255
return dummy;
53-
}, [](const graph_access &graph,
54-
const size_t colors) {
56+
});
57+
invalidColoring->initOperators.emplace_back([](const graph_access &graph,
58+
const size_t colors) {
5559
Colouring dummy(colors);
5660
return dummy;
57-
}};
58-
59-
std::vector<CrossoverOperator> crossoverOps = {
60-
[](const Colouring &s1,
61-
const Colouring &s2,
62-
const graph_access &graph) {
63-
return s1;
64-
}, [](const Colouring &s1,
65-
const Colouring &s2,
66-
const graph_access &graph) {
67-
return s2;
68-
}};
69-
70-
std::vector<LSOperator> lsOps = {[](const Colouring &s, const graph_access &graph) {
61+
});
62+
invalidColoring->crossoverOperators.emplace_back([](const Colouring &s1,
63+
const Colouring &s2,
64+
const graph_access &graph) {
65+
return s1;
66+
});
67+
invalidColoring->crossoverOperators.emplace_back([](const Colouring &s1,
68+
const Colouring &s2,
69+
const graph_access &graph) {
70+
return s1;
71+
});
72+
invalidColoring->lsOperators.emplace_back([](const Colouring &s,
73+
const graph_access &graph) {
7174
return s;
72-
}};
75+
});
7376

74-
auto invalidColoring = std::make_shared<FixedKColouringStrategy>(initOps,
75-
crossoverOps,
76-
lsOps);
77+
auto validColoring = std::make_shared<VariableColouringStrategy>();
7778

78-
std::vector<InitOperator> initOps2 = {[](const graph_access &graph,
79-
const size_t colors) {
79+
validColoring->initOperators.emplace_back([](const graph_access &graph,
80+
const size_t colors) {
8081
Colouring dummy(colors);
8182
return dummy;
82-
}};
83+
});
8384

8485
size_t executionCounter = 0;
85-
std::vector<CrossoverOperator> crossoverOps2 = {
86-
[&executionCounter](
87-
const Colouring &s1,
88-
const Colouring &s2,
89-
const graph_access &graph) {
90-
executionCounter++;
91-
if(executionCounter > 100) {
92-
Colouring solution(s1.size());
93-
for(Color i = 0; i < solution.size(); i++) {
94-
solution[i] = i;
95-
}
96-
return solution;
97-
}
98-
return s1;
99-
}};
100-
101-
std::vector<LSOperator> lsOps2 = {[](const Colouring &s,
102-
const graph_access &graph) {
86+
validColoring->crossoverOperators.emplace_back([&executionCounter](
87+
const Colouring &s1,
88+
const Colouring &s2,
89+
const graph_access &graph) {
90+
executionCounter++;
91+
if (executionCounter > 100) {
92+
Colouring solution(s1.size());
93+
for (Color i = 0; i < solution.size(); i++) {
94+
solution[i] = i;
95+
}
96+
return solution;
97+
}
98+
return s1;
99+
});
100+
validColoring->lsOperators.emplace_back([](const Colouring &s,
101+
const graph_access &graph) {
103102
return s;
104-
}};
105-
106-
auto validColoring = std::make_shared<VariableColouringStrategy>(initOps2,
107-
crossoverOps2,
108-
lsOps2);
103+
});
109104

110105
graph_access G;
111106
std::string graph_filename = "../../input/simple.graph";

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /