Trial

class Trial

A trial contains a number of TrialStages. The Acceptance is computed as the stages are enacted, and then sent to Criteria to decide if the trial is accepted or rejected.

Subclassed by feasst::TrialAVB2Half, feasst::TrialAVB4, feasst::TrialAdd, feasst::TrialAddAVB, feasst::TrialAddAVBDivalent, feasst::TrialAddMultiple, feasst::TrialBeta, feasst::TrialFactory, feasst::TrialGibbsParticleTransferOneWay, feasst::TrialGibbsVolumeTransferOneWay, feasst::TrialGrowLinear, feasst::TrialModel, feasst::TrialMorph, feasst::TrialMorphExpanded, feasst::TrialMove, feasst::TrialRemove, feasst::TrialRemoveAVB, feasst::TrialRemoveAVBDivalent, feasst::TrialRemoveMultiple, feasst::TrialRotateCluster, feasst::TrialSwapSites, feasst::TrialTranslateCluster, feasst::TrialVolume

Public Functions

double weight() const

Return the unnormalized relative probability of selection of this trial with respect to all trials.

double weight_per_number_fraction() const

Return the weight per number of particles of given type.

int number_fraction_exclude_type() const

Return the particle type excluded in number fraction weights.

void add_stage(std::shared_ptr<TrialSelect> select, std::shared_ptr<Perturb> perturb, argtype *stage_args)

Add a stage which includes selection and perturbation with arguments.

void add_stage(std::shared_ptr<TrialSelect> select, std::shared_ptr<Perturb> perturb)

Same as above, but without arguments for stage.

void add_stage(std::shared_ptr<TrialStage> stage)

Same as above, but by copying an existing stage.

void set(const int index, std::shared_ptr<TrialStage> stage)

Set a stage, as can be done just before each attempt.

int num_stages() const

Number of stages.

const TrialStage &stage(const int index) const

Return a stage.

int64_t num_success() const

Number of successful attempts.

int64_t num_attempts() const

Number of attempts.

int64_t num_auto_reject() const

Number of automatic rejections.

void increment_num_attempts()

Increment the number of attempts for acceptance.

double acceptance() const

Return the ratio of the number of successful attempts and total attempts. Return -1 if no attempts were performed.

virtual void reset_stats()

Reset trial statistics.

virtual std::string status_header() const

Return the header description for the status of the trial (e.g., acceptance, etc).

virtual std::string status() const

Return the status of the trial (e.g., acceptance, etc).

virtual void tune()

Tune parameters.

virtual void precompute(Criteria *criteria, System *system)

Precompute quantities before simulation for optimization.

void set(std::shared_ptr<TrialCompute> compute)

Set the computation of the trial and acceptance.

const TrialCompute &compute() const

Return TrialCompute.

void revert(System *system, Criteria *criteria)

Revert all stages in reverse order.

virtual bool attempt(Criteria *criteria, System *system, Random *random)

Attempt a trial. Return true if accepted.

const std::string &description() const

Return the description, as used in Log.

void set_description(const std::string &description)

Set the description.

Arguments

Trial(argtype args = argtype())

args:

  • weight: unnormalized relative probability of selection of this trial with respect to all trials (default: 1).

  • weight_per_number_fraction: if > 0, the weight is continuously updated to (weight_per_number_fraction * number of TrialSelect::particle_type in first TrialStage / total number of particles). If <= 0, the given weight above is fixed to that value (default: -1). For a multicomponent simulation, weight_per_number_fraction with a separate trial for each mobile particle_type ensures equal probability of selecting any particles of those types type regardless of the number of particles of each type, while still allowing for different tunable parameters for each particle_type.

  • number_fraction_exclude_type: if >= 0 (default: -1), exclude this particle type from the total number of fractions in weight_per_number_fraction. If there is a rigid particle type in the grand canonical ensemble, avoid changing the relative weight of translation vs insert/delete and breaking detailed balance.

  • print_num_accepted: if true (default: false), print the number of accepted trials.