Class solver::PopulationAnnealing
Population Annealing.
Population based optimizer with variable beta stepping. PopulationAnnealing explores the configuration space using multiple Metropolis walkers subject to a birth-death process (depending on their relative cost-fitness within the population).
Stepping method
Population annealing supports three different resampling_strategy
s for dynamically selecting the next step in temperature space (delta_beta
):
friction_tensor
: The stepping size is calculated from
\Delta\beta = c_{FT} / \sqrt\zeta
{
'target': 'populationannealing.cpu',
'version': '1.0',
'resampling_strategy': 'friction_tensor',
'friction_tensor_constant': 1
}
energy_variance
: Scale temperature stepping with the variance in the energy (cost):
\Delta\beta = f_{culling} / \sqrt\sigma
for this, the initial value for the culling fraction needs to be specified:
{
'target': 'populationannealing.cpu',
'version': '1.0',
'resampling_strategy': 'energy_variance',
'initial_culling_fraction': 0.5
}
constant_culling
: The stepping size is chosen to keep the culling rate constant atculling_fraction
(by estimating the expected death ratio and solving fordelta_beta
):
{
'target': 'populationannealing.cpu',
'version': '1.0',
'resampling_strategy': 'constant_culling',
'culling_fraction': 0.1
}
Inherited Members
Constructors
PopulationAnnealing()
Declaration
solver::PopulationAnnealing<Model_T>::PopulationAnnealing()
PopulationAnnealing()
Declaration
solver::PopulationAnnealing<Model_T>::PopulationAnnealing(const PopulationAnnealing&)=delete
Methods
operator=()
Declaration
PopulationAnnealing&solver::PopulationAnnealing<Model_T>::operator=(const PopulationAnnealing&)=delete
get_identifier()
Identifier of this solver (target
in the request)
Declaration
std::string solver::PopulationAnnealing<Model_T>::get_identifier() const override
init_memory_check_error_message()
Declaration
std::string solver::PopulationAnnealing<Model_T>::init_memory_check_error_message() const override
target_number_of_states()
Declaration
size_t solver::PopulationAnnealing<Model_T>::target_number_of_states() const override
init()
Initialize the solver.
Declaration
void solver::PopulationAnnealing<Model_T>::init() override
init_population()
Reset the population with size target_population
Note
This method is invoked both at the start of the simulation and whenever a restart/population increase is triggered.
Declaration
void solver::PopulationAnnealing<Model_T>::init_population()
find_delta_beta()
Adjust the stepping size delta_beta until the estimator returns an estimate of zero. NOTE: This is NOT a generic root finder, it makes several assumptions about the estimator being used.
Declaration
double solver::PopulationAnnealing<Model_T>::find_delta_beta(T&estimator)
make_step()
Declaration
void solver::PopulationAnnealing<Model_T>::make_step(uint64_t step) override
resample()
Declaration
void solver::PopulationAnnealing<Model_T>::resample(double delta_beta)
configure()
Check the identifier and version against the configuraiton.
Declaration
void solver::PopulationAnnealing<Model_T>::configure(const utils::Json&json) override
finalize()
Declaration
void solver::PopulationAnnealing<Model_T>::finalize() override
expand_population()
expand the population to size target_population
Note
This method is called to expand population from current size to target_population
Declaration
void solver::PopulationAnnealing<Model_T>::expand_population()
is_linear_schedule()
Declaration
bool solver::PopulationAnnealing<Model_T>::is_linear_schedule() const
is_geometric_schedule()
Declaration
bool solver::PopulationAnnealing<Model_T>::is_geometric_schedule() const
is_friction_tensor()
Declaration
bool solver::PopulationAnnealing<Model_T>::is_friction_tensor() const
is_energy_variance()
Declaration
bool solver::PopulationAnnealing<Model_T>::is_energy_variance() const
is_constant_culling()
Declaration
bool solver::PopulationAnnealing<Model_T>::is_constant_culling() const