Skip to content

Commit 668fbf7

Browse files
committed
refactor: update randomIndividualSafe and randomIndividualPartitionCopySafe methods to accept deterministic flag instead of full context
1 parent 42c6fe8 commit 668fbf7

4 files changed

Lines changed: 18 additions & 18 deletions

File tree

mt-kahypar/partition/evo_partitioner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ namespace mt_kahypar {
489489
std::mt19937* rng) {
490490
Hypergraph hypergraph = input_hg.copy(parallel_tag_t{});
491491

492-
const std::vector rnd_ind_partition(population.randomIndividualPartitionCopySafe(context, rng));
492+
const std::vector rnd_ind_partition(population.randomIndividualPartitionCopySafe(context.partition.deterministic, rng));
493493
switch (pick::decideNextMutation(context, rng)) {
494494
case EvoMutateStrategy::new_initial_partitioning_vcycle:
495495
return mutate::vCycleWithNewInitialPartitioning<TypeTraits>(hypergraph, rnd_ind_partition, target_graph,

mt-kahypar/partition/evolutionary/combine.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,10 @@ static constexpr bool debug = false;
117117
Individual usingKWaySelection(const typename TypeTraits::Hypergraph& input_hg, TargetGraph* target_graph, Population& population, Context context, std::mt19937* rng) {
118118
std::vector<size_t> parents;
119119
//Maybe change to actually use Tournament Selection
120-
size_t best(population.randomIndividualSafe(context, rng));
120+
size_t best(population.randomIndividualSafe(context.partition.deterministic, rng));
121121
parents.push_back(best);
122122
for (int x = 1; x < context.evolutionary.kway_combine; x++) {
123-
size_t new_parent = population.randomIndividualSafe(context, rng);
123+
size_t new_parent = population.randomIndividualSafe(context.partition.deterministic, rng);
124124
parents.push_back(new_parent);
125125
if (population.fitnessAtSafe(new_parent) <= population.fitnessAtSafe(best)) {
126126
best = new_parent;
@@ -166,7 +166,7 @@ static constexpr bool debug = false;
166166
template <typename TypeTraits>
167167
Individual usingArtificialSecondParent(const typename TypeTraits::Hypergraph& input_hg, Population& population, TargetGraph* target_graph, ContextModifierParameters params,const Context context, std::mt19937* rng) {
168168
std::vector<std::vector<PartitionID>> parent_partitions;
169-
size_t best(population.randomIndividualSafe(context, rng));
169+
size_t best(population.randomIndividualSafe(context.partition.deterministic, rng));
170170

171171
// generate new parent individual with modified context
172172
Context modified_context = modifyContext(context, params);

mt-kahypar/partition/evolutionary/population.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,9 @@ class Population {
173173
}
174174

175175
// Thread-safe accessors
176-
inline size_t randomIndividualSafe(Context context, std::mt19937* rng = nullptr) {
176+
inline size_t randomIndividualSafe(const bool deterministic, std::mt19937* rng = nullptr) {
177177
std::lock_guard<std::mutex> guard(_population_mutex);
178-
if (context.partition.deterministic) {
178+
if (deterministic) {
179179
ASSERT(rng != nullptr, "Deterministic mode requires a valid RNG");
180180
std::uniform_int_distribution<size_t> dist(0, _individuals.size() - 1);
181181
return dist(*rng);
@@ -202,10 +202,10 @@ class Population {
202202
return _individuals[best_position].partition(); // returns copy
203203
}
204204

205-
inline std::vector<PartitionID> randomIndividualPartitionCopySafe(const Context& context, std::mt19937* rng = nullptr) {
205+
inline std::vector<PartitionID> randomIndividualPartitionCopySafe(const bool deterministic, std::mt19937* rng = nullptr) {
206206
std::lock_guard<std::mutex> guard(_population_mutex);
207207
size_t random_position;
208-
if (context.partition.deterministic) {
208+
if (deterministic) {
209209
ASSERT(rng != nullptr, "Deterministic mode requires a valid RNG");
210210
std::uniform_int_distribution<size_t> dist(0, _individuals.size() - 1);
211211
random_position = dist(*rng);

tests/partition/evolutionary/population_test.cc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -334,19 +334,19 @@ TYPED_TEST(APopulation, ConcurrentSafeAccessorsKeepIndicesAndFitnessValid) {
334334

335335
executeConcurrent([&] {
336336
for (size_t i = 0; i < 200; ++i) {
337-
const size_t idx = pop.randomIndividualSafe(this->context);
337+
const size_t idx = pop.randomIndividualSafe(this->context.partition.deterministic);
338338
EXPECT_LT(idx, pop.size());
339339
EXPECT_EQ(pop.bestFitnessSafe(), expected_best_fitness);
340340
EXPECT_LT(pop.bestSafe(), pop.size());
341341
}
342342
}, [&] {
343343
for (size_t i = 0; i < 200; ++i) {
344-
const size_t idx = pop.randomIndividualSafe(this->context);
344+
const size_t idx = pop.randomIndividualSafe(this->context.partition.deterministic);
345345
EXPECT_LT(idx, pop.size());
346346
EXPECT_EQ(pop.fitnessAtSafe(pop.bestSafe()), expected_best_fitness);
347347
EXPECT_EQ(pop.bestPartitionCopySafe().size(), 7);
348348
EXPECT_EQ(pop.partitionCopySafe(idx).size(), 7);
349-
EXPECT_EQ(pop.randomIndividualPartitionCopySafe(this->context).size(), 7);
349+
EXPECT_EQ(pop.randomIndividualPartitionCopySafe(this->context.partition.deterministic).size(), 7);
350350
}
351351
});
352352
}
@@ -395,20 +395,20 @@ TYPED_TEST(APopulation, DeterministicSafeRandomMethodsAreStableAcrossThreads) {
395395
std::vector<std::vector<PartitionID>> expected_partitions;
396396
expected_partitions.reserve(100);
397397
for (size_t i = 0; i < 100; ++i) {
398-
expected_idxs.push_back(pop.randomIndividualSafe(ctx, &rng));
399-
expected_partitions.push_back(pop.randomIndividualPartitionCopySafe(ctx, &rng));
398+
expected_idxs.push_back(pop.randomIndividualSafe(ctx.partition.deterministic, &rng));
399+
expected_partitions.push_back(pop.randomIndividualPartitionCopySafe(ctx.partition.deterministic, &rng));
400400
}
401401
executeConcurrent([&] {
402402
std::mt19937 thread_rng(ctx.partition.seed);
403403
for (size_t i = 0; i < 100; ++i) {
404-
EXPECT_EQ(pop.randomIndividualSafe(ctx, &thread_rng), expected_idxs[i]);
405-
EXPECT_EQ(pop.randomIndividualPartitionCopySafe(ctx, &thread_rng), expected_partitions[i]);
404+
EXPECT_EQ(pop.randomIndividualSafe(ctx.partition.deterministic, &thread_rng), expected_idxs[i]);
405+
EXPECT_EQ(pop.randomIndividualPartitionCopySafe(ctx.partition.deterministic, &thread_rng), expected_partitions[i]);
406406
}
407407
}, [&] {
408408
std::mt19937 thread_rng(ctx.partition.seed);
409409
for (size_t i = 0; i < 100; ++i) {
410-
EXPECT_EQ(pop.randomIndividualSafe(ctx, &thread_rng), expected_idxs[i]);
411-
EXPECT_EQ(pop.randomIndividualPartitionCopySafe(ctx, &thread_rng), expected_partitions[i]);
410+
EXPECT_EQ(pop.randomIndividualSafe(ctx.partition.deterministic, &thread_rng), expected_idxs[i]);
411+
EXPECT_EQ(pop.randomIndividualPartitionCopySafe(ctx.partition.deterministic, &thread_rng), expected_partitions[i]);
412412
}
413413
});
414414
}
@@ -444,7 +444,7 @@ TYPED_TEST(APopulation, ConcurrentInsertsAndSafeReadsRemainConsistent) {
444444
}
445445
}, [&] {
446446
for (size_t i = 0; i < 300; ++i) {
447-
const size_t idx = this->population.randomIndividualSafe(this->context);
447+
const size_t idx = this->population.randomIndividualSafe(this->context.partition.deterministic);
448448
EXPECT_LT(idx, this->population.size());
449449
EXPECT_LT(this->population.bestSafe(), this->population.size());
450450

0 commit comments

Comments
 (0)