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].

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).

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]

Changed in version 2.1_TBA: In TOML, this will be [Basin_Hopping]

pydantic model eon.schema.BasinHoppingConfig[source]#

Show JSON schema
{
   "title": "BasinHoppingConfig",
   "type": "object",
   "properties": {
      "steps": {
         "default": 10000,
         "description": "Number of steps to take at the assigned temperature.",
         "title": "Steps",
         "type": "integer"
      },
      "displacement": {
         "default": 0.5,
         "description": "Displacement in each degree of freedom.",
         "title": "Displacement",
         "type": "number"
      },
      "write_unique": {
         "default": false,
         "description": "If true, the client will write out all the unique geometries and their energies",
         "title": "Write Unique",
         "type": "boolean"
      },
      "initial_state_pool_size": {
         "default": 1,
         "description": "Number of lowest energy states in the pool from which the initial structures are drawn.",
         "title": "Initial State Pool Size",
         "type": "integer"
      },
      "initial_random_structure_probability": {
         "default": 0.0,
         "description": "Probability that the initial structure is generated randomly.",
         "title": "Initial Random Structure Probability",
         "type": "number"
      },
      "push_apart_distance": {
         "default": 0.4,
         "description": "Push atoms apart until no atoms are closer than this distance.",
         "title": "Push Apart Distance",
         "type": "number"
      },
      "adjust_displacement": {
         "default": true,
         "description": "Flag to automatically adjust the displacement to meet the target acceptance ratio.",
         "title": "Adjust Displacement",
         "type": "boolean"
      },
      "adjust_fraction": {
         "default": 0.05,
         "description": "Fraction by which to change the step size in order to meet the target acceptance ratio.",
         "title": "Adjust Fraction",
         "type": "number"
      },
      "adjust_period": {
         "default": 10,
         "description": "Number of Monte Carlo steps between adjustments of the step size.",
         "title": "Adjust Period",
         "type": "integer"
      },
      "target_ratio": {
         "default": 0.5,
         "description": "Target acceptance ratio used to determine whether to increase or decrease the step size.",
         "title": "Target Ratio",
         "type": "number"
      },
      "displacement_distribution": {
         "default": "gaussian",
         "description": "Distribution used for the displacement of each atom.",
         "enum": [
            "gaussian",
            "uniform"
         ],
         "title": "Displacement Distribution",
         "type": "string"
      },
      "swap_probability": {
         "default": 0.0,
         "description": "Probability (in range [0,1]) that a swapping step takes place instead of a displacement step.",
         "title": "Swap Probability",
         "type": "number"
      },
      "single_atom_displace": {
         "default": false,
         "description": "Displace only one atom per step.",
         "title": "Single Atom Displace",
         "type": "boolean"
      },
      "jump_max": {
         "default": 0,
         "description": "Number of consecutive rejected steps after which jump steps should be taken.",
         "title": "Jump Max",
         "type": "integer"
      },
      "significant_structure": {
         "default": true,
         "description": "Displace from minimized structures.",
         "title": "Significant Structure",
         "type": "boolean"
      },
      "jump_steps": {
         "default": 0,
         "description": "Number of jump steps to take after jump_max consecutive rejections.",
         "title": "Jump Steps",
         "type": "integer"
      }
   }
}

Config:
  • use_attribute_docstrings: bool = True

Fields:
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 displacement: float = 0.5#

Displacement in each degree of freedom.

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

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 initial_random_structure_probability: float = 0.0#

Probability that the initial structure is generated randomly.

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 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 jump_steps: int = 0#

Number of jump steps to take after jump_max consecutive rejections.

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 significant_structure: bool = True#

Implements the method of White and Mayne [BH_WM98].

Displace from minimized structures.

field single_atom_displace: bool = False#

Displace only one atom per step.

field steps: int = 10000#

Number of steps to take at the assigned temperature.

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 target_ratio: float = 0.5#

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

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

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.