Optimizer#
Note
All the optimizers in eON
do not use a line search to determine steepest descent!!
There are several other ways in which the eON
implementations differ from a
standard optimizer software suite[1] . Some prominent reasons are:
They are meant to be used with the Nudged Elastic Band which does not have well defined closed form energy surface
Especially in the global band optimization approach [OPT_STH08].
They are specialized for atomic systems
The optimizers only see the moving atoms, the frozen atoms are omitted before being passed to the optimizer
Configuration#
[Optimizer]
- pydantic model eon.schema.OptimizerConfig[source]#
Show JSON schema
{ "title": "OptimizerConfig", "type": "object", "properties": { "opt_method": { "default": "cg", "description": "The optimization method to use.", "enum": [ "box", "cg", "qm", "lbfgs", "fire" ], "title": "Opt Method", "type": "string" }, "convergence_metric": { "default": "norm", "description": "The metric to use to determine when an optimization is complete.", "enum": [ "norm", "max_atom", "max_component" ], "title": "Convergence Metric", "type": "string" }, "converged_force": { "default": 0.01, "description": "When the convergence_metric is smaller than this value (eV/A), the structure is considered minimized.", "title": "Converged Force", "type": "number" }, "max_move": { "default": 0.2, "description": "Maximum distance that an atom may be moved in a single optimization step (Angstroms).", "title": "Max Move", "type": "number" }, "time_step": { "default": 1.0, "description": "The dynamical timestep for the quickmin algorithm (fs).", "title": "Time Step", "type": "number" }, "max_iterations": { "default": 1000, "description": "The maximum number of optimization iterations that will be performed.", "title": "Max Iterations", "type": "integer" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
- field converged_force: float = 0.01#
When the convergence_metric is smaller than this value (eV/A), the structure is considered minimized.
- field convergence_metric: Literal['norm', 'max_atom', 'max_component'] = 'norm'#
- Options:
norm
: The norm of the entire force vectormax_atom
: The maximum force on any non-frozen atommax_component
: The maximum force on any non-frozen degree of freedom
The metric to use to determine when an optimization is complete.
- field max_iterations: int = 1000#
The maximum number of optimization iterations that will be performed.
- field max_move: float = 0.2#
Maximum distance that an atom may be moved in a single optimization step (Angstroms).
- field opt_method: Literal['box', 'cg', 'qm', 'lbfgs', 'fire'] = 'cg'#
- Options:
box
: Optimizes the atom positions and box using quickmincg
: Conjugate gradientqm
: Quickminlbfgs
: Limited Memory Broyden-Fletcher-Goldfarb-Shanno QuasiNewton optimizerfire
: Fast inertial relaxation engine
The optimization method to use.
Each of the optimizer methods have their own settings as well.
LBFGS#
[LBFGS]
- pydantic model eon.schema.LBFGSConfig[source]#
Show JSON schema
{ "title": "LBFGSConfig", "type": "object", "properties": { "lbfgs_memory": { "default": 5, "description": "Number of previous gradients and positions to store for the LBFGS method.", "title": "Lbfgs Memory", "type": "integer" }, "lbfgs_inverse_curvature": { "default": 0.001, "description": "Initial inverse curvature value for LBFGS.", "title": "Lbfgs Inverse Curvature", "type": "number" }, "lbfgs_max_inverse_curvature": { "default": 0.01, "description": "Maximum inverse curvature value for LBFGS.", "title": "Lbfgs Max Inverse Curvature", "type": "number" }, "lbfgs_auto_scale": { "default": true, "description": "If true, auto-scale the inverse curvature in LBFGS.", "title": "Lbfgs Auto Scale", "type": "boolean" }, "lbfgs_angle_reset": { "default": false, "description": "If true, reset the LBFGS angle.", "title": "Lbfgs Angle Reset", "type": "boolean" }, "lbfgs_distance_reset": { "default": false, "description": "If true, reset the LBFGS distance.", "title": "Lbfgs Distance Reset", "type": "boolean" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
QuickMin#
[QuickMin]
- pydantic model eon.schema.QuickMinConfig[source]#
Show JSON schema
{ "title": "QuickMinConfig", "type": "object", "properties": { "time_step": { "default": 1.0, "description": "Time step for QuickMin, in femtoseconds.", "title": "Time Step", "type": "number" }, "qm_steepest_descent": { "default": false, "description": "If true, use the steepest descent method for QuickMin.", "title": "Qm Steepest Descent", "type": "boolean" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
FIRE#
[FIRE]
- pydantic model eon.schema.FIREConfig[source]#
Show JSON schema
{ "title": "FIREConfig", "type": "object", "properties": { "time_step": { "default": 1.0, "description": "Time step for FIRE, in femtoseconds.", "title": "Time Step", "type": "number" }, "time_step_max": { "default": 1.0, "description": "Maximum time step for FIRE, in femtoseconds.", "title": "Time Step Max", "type": "number" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
CG#
[CG]
- pydantic model eon.schema.CGConfig[source]#
Show JSON schema
{ "title": "CGConfig", "type": "object", "properties": { "cg_no_overshooting": { "default": false, "description": "If true, prevent overshooting in CG.", "title": "Cg No Overshooting", "type": "boolean" }, "cg_knock_out_max_move": { "default": false, "description": "If true, limit the maximum move in CG.", "title": "Cg Knock Out Max Move", "type": "boolean" }, "cg_line_search": { "default": false, "description": "If true, perform a line search in CG.", "title": "Cg Line Search", "type": "boolean" }, "cg_line_converged": { "default": 0.0001, "description": "Convergence criterion for the line search in CG.", "title": "Cg Line Converged", "type": "number" }, "cg_max_iter_before_reset": { "default": 20, "description": "Maximum number of iterations before reset in CG.", "title": "Cg Max Iter Before Reset", "type": "integer" }, "cg_max_iter_line_search": { "default": 10, "description": "Maximum number of iterations for the line search in CG.", "title": "Cg Max Iter Line Search", "type": "integer" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
SD#
[SD]
- pydantic model eon.schema.SDConfig[source]#
Show JSON schema
{ "title": "SDConfig", "type": "object", "properties": { "sd_alpha": { "default": 0.1, "description": "Alpha value for SD.", "title": "Sd Alpha", "type": "number" }, "sd_twopoint": { "default": false, "description": "If true, use the two-point method in SD.", "title": "Sd Twopoint", "type": "boolean" } } }
- Config:
use_attribute_docstrings: bool = True
- Fields:
References#
Daniel Sheppard, Rye Terrell, and Graeme Henkelman. Optimization methods for finding minimum energy paths. The Journal of Chemical Physics, 128(13):134106, April 2008. doi:10.1063/1.2841941.