Skip to content

Commit

Permalink
Make birth count repl respect partitions
Browse files Browse the repository at this point in the history
  • Loading branch information
mmore500 committed Nov 24, 2023
1 parent bbf134e commit 3deb007
Showing 1 changed file with 27 additions and 6 deletions.
33 changes: 27 additions & 6 deletions avida-core/source/actions/PopulationActions.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5389,12 +5389,31 @@ class cActionReplicateDemesHighestBirthCount : public cAction

static const cString GetDescription() { return "Arguments: [double replprob=0.01] [int replmax = intmax]"; }

void Process(cAvidaContext& ctx)
void Process(cAvidaContext &ctx)
{
const int part_size = m_world->GetConfig().DEMES_PARTITION_INTERVAL.Get();
const int num_demes = m_world->GetPopulation().GetNumDemes();
if (part_size)
{
for (int i = 0; i < num_demes; i += part_size)
{
const int begin = i;
const int end = std::min(i + part_size, num_demes);
ProcessPartition(begin, end, ctx);
}
}
else
{
ProcessPartition(0, num_demes, ctx);
}
}

void ProcessPartition(const int begin, const int end, cAvidaContext &ctx)
{
cPopulation& pop = m_world->GetPopulation();
const int num_demes = pop.GetNumDemes();
const int num_demes = end - begin;
std::vector<int> deme_indices(num_demes);
std::iota(std::begin(deme_indices), std::end(deme_indices), 0);
std::iota(std::begin(deme_indices), std::end(deme_indices), begin);

const int binomial_draw = ctx.GetRandom().GetRandBinomial(
num_demes,
Expand All @@ -5421,17 +5440,19 @@ class cActionReplicateDemesHighestBirthCount : public cAction

struct Comp {
std::vector<double> &births;
Comp(std::vector<double> &births) : births(births) {}
const int begin;
Comp(std::vector<double> &births, const int begin)
: births(births), begin(begin) {}
bool operator()(const int d1, const int d2)
{
return births[d1] > births[d2];
return births[d1 - begin] > births[d2 - begin];
}
};
std::partial_sort(
std::begin(deme_indices),
std::next(std::begin(deme_indices), repl_quota),
std::end(deme_indices),
Comp(birth_counts)
Comp(birth_counts, begin)
);

struct DoRepl {
Expand Down

0 comments on commit 3deb007

Please sign in to comment.