Basin hopping

Basin hopping is a Monte Carlo method in which the energy of each configuration is taken to be the energy of a local minimum [BH_WD97].

The driver stores bh.log and lockfile in the results directory. A second driver in that directory logs Couldn't get lock and exits. See Communicator for how the lock is taken. Registering results and recording a new state both create their directory when that path is already present.

At each basin hopping step the client will print out:

  • the current energy (current),

  • the trial energy (trial),

  • the lowest energy found (global min),

  • the number of force calls needed to minimize the structure (fc),

  • the acceptance ratio (ar),

  • and the current max displacement (md).

Acceptance

The client minimizes each trial before the test. de is the quenched energy difference between that minimum and the current minimum. During steps, an uphill hop is accepted with probability exp(-de/(kB*temperature)) when temperature and kB are positive. kB is in eV/K, and temperature is in kelvin. A temperature or kB that is not positive rejects the uphill hop. Other hops are accepted. quenching_steps reject an uphill hop and skip the factor.

Notes

  • eOn defaults to letting displacements occur from minimized structures as per the method of White and Mayne [BH_WM98], which is controlled by siginificant_structure

  • The occasional jumping variant of Iwamatsu and Okabe [BH_IO04] is also implemented, and is controlled by jump_max.

Configuration

[Basin Hopping]
pydantic model eon.schema.BasinHoppingConfig[source]
Fields:
  • steps (int)

  • displacement (float)

  • write_unique (bool)

  • initial_state_pool_size (int)

  • initial_random_structure_probability (float)

  • push_apart_distance (float)

  • adjust_displacement (bool)

  • adjust_fraction (float)

  • adjust_period (int)

  • target_ratio (float)

  • displacement_distribution (Literal['gaussian', 'uniform'])

  • max_displacement_algorithm (str)

  • quenching_steps (int)

  • swap_probability (float)

  • single_atom_displace (bool)

  • jump_max (int)

  • significant_structure (bool)

  • jump_steps (int)

field steps: int = 10000

Number of steps to take at the assigned temperature.

field displacement: float = 0.5

Displacement in each degree of freedom.

field write_unique: bool = False

The files are named min_xxxxx.con and energy_xxxxx.con, where ‘xxxxx’ corresponds to the Monte Carlo step where the structure was first seen. For clusters it is important to set eon.schema.StructureComparisonConfig.check_rotation.

If true, the client will write out all the unique geometries and their energies

field initial_state_pool_size: int = 1

A value of 1 ensures simulation always starts from the lowest energy found so far.

Number of lowest energy states in the pool from which the initial structures are drawn.

field initial_random_structure_probability: float = 0.0

Probability that the initial structure is generated randomly.

field push_apart_distance: float = 0.4

This criterion is enforced for both the initial structure and all those generated by random displacement.

Push atoms apart until no atoms are closer than this distance.

field adjust_displacement: bool = True

Flag to automatically adjust the displacement to meet the target acceptance ratio.

field adjust_fraction: float = 0.05

Fraction by which to change the step size in order to meet the target acceptance ratio.

field adjust_period: int = 10

Number of Monte Carlo steps between adjustments of the step size.

field target_ratio: float = 0.5

Target acceptance ratio used to determine whether to increase or decrease the step size.

field displacement_distribution: Literal['gaussian', 'uniform'] = 'uniform'

eon.schema.BasinHoppingConfig.displacement for the gaussian will serve as the standard deviation of the normal distribution used to select displacements.

uniform will select a random number between the positive and negative values of eon.schema.BasinHoppingConfig.displacement.

Distribution used for the displacement of each atom.

field max_displacement_algorithm: str = 0

Method for displacements.

field quenching_steps: int = 0

Number of quenching steps.

field swap_probability: float = 0.0

The swap step selects two atoms of different elements and swaps their position.

Probability (in range [0,1]) that a swapping step takes place instead of a displacement step.

field single_atom_displace: bool = False

Displace only one atom per step.

field jump_max: int = 0

This provides a more global search when the structure is stuck in a certain basin. The number of jump steps is assigned in eon.schema.BasinHoppingConfig.jump_steps. See Iwamatsu and Okabe [BH_IO04] for more details.

Number of consecutive rejected steps after which jump steps should be taken.

field significant_structure: bool = True

Implements the method of White and Mayne [BH_WM98].

Displace from minimized structures.

field jump_steps: int = 0

Number of jump steps to take after jump_max consecutive rejections.

References

[BH_IO04] (1,2)

Masao Iwamatsu and Yutaka Okabe. Basin hopping with occasional jumping. Chemical Physics Letters, 399(4):396–400, December 2004. doi:10.1016/j.cplett.2004.10.032.

[BH_WD97]

David J. Wales and Jonathan P. K. Doye. Global Optimization by Basin-Hopping and the Lowest Energy Structures of Lennard-Jones Clusters Containing up to 110 Atoms. The Journal of Physical Chemistry A, 101(28):5111–5116, July 1997. doi:10.1021/jp970984n.

[BH_WM98] (1,2)

Ronald P White and Howard R Mayne. An investigation of two approaches to basin hopping minimization for atomic and molecular clusters. Chemical Physics Letters, 289(5-6):463–468, June 1998. doi:10.1016/S0009-2614(98)00431-X.