Class solver::Population
A population is a container for several instances of Content_T
Each instance of Content_T
is internally wrapped in a Citizen
wrapper, which allows setting the desired duplicity count of the contained instance after resampling. These new counts are, however, only applied after a call to resample()
.
Example:
Populationstd::string population; population.insert("foo"); population.insert("bar"); population.insert("baz"); for (size_t i = 0; i < population.size(); i++) { auto& citizen = population[i]; if (citizen.content() == "foo") citizen.kill() if (citizen.content() == "baz") citizen.spawn(2) } // output before resampling: "foobarbaz" for (size_t i = 0; i < population.size(); i++) { std::cout << population[i].content(); }
population.resample();
// output after resampling: "bazbarbazbaz" for (size_t i = 0; i < population.size(); i++) { std::cout << population[i].content(); }
Constructors
Population()
Declaration
solver::Population<Content_T>::Population()
Methods
reserve()
Declaration
void solver::Population<Content_T>::reserve(size_t size)
insert()
Add content
to the population (with a count of 1).
Declaration
void solver::Population<Content_T>::insert(Content_T content)
resize()
Declaration
void solver::Population<Content_T>::resize(size_t new_count)
size()
Get the current number of citizens.
This does not consider current count
s set on the citizens, so it should be called after resample()
, prior to any set_count()
on the citizens.
Declaration
size_t solver::Population<Content_T>::size() const
empty()
Check if the population is empty.
Declaration
bool solver::Population<Content_T>::empty()
operator[]()
Positional access to citizens.
They are in no particular order, but the order remains "stable" during resampling.
Declaration
const Citizen&solver::Population<Content_T>::operator[](size_t position) const
operator[]()
Declaration
Citizen&solver::Population<Content_T>::operator[](size_t position)
resample()
Resample the population such that count_
copies of each citizen in the current population are present in the resampled one.
Declaration
void solver::Population<Content_T>::resample()
get_families()
Returns a map describing the sizes of the remaining families.
Declaration
const std::map<FamilyId, size_t>&solver::Population<Content_T>::get_families()
partial_sort()
Declaration
void solver::Population<Content_T>::partial_sort(unsigned solutions_to_sort)
clear()
Declaration
void solver::Population<Content_T>::clear()
clear_cache_pool()
Declaration
void solver::Population<Content_T>::clear_cache_pool()
do_census()
Declaration
void solver::Population<Content_T>::do_census()
create_citizen()
Declaration
void solver::Population<Content_T>::create_citizen(std::unique_ptr<Citizen>&citizen, const Content_T&content)
remove_citizen()
Declaration
void solver::Population<Content_T>::remove_citizen(std::unique_ptr<Citizen>&citizen)