Add AMML algorithms to work with AMML structrures and AMML calculators
Introduction
Algorithms compute specified properties for given input structures or make changes in the input structures. Sometimes the algorithms use a specified calculator (such that need the potential energy), sometimes they do not (for example, for finding a centroid or center of mass).
Algorithms available in ASE are:
- Molecular dynamics: VelocityVerlet/NVE, Langevin/NVT, Andersen/NVT, Berendsen/NVT, Nosé-Hoover/NVT, Berendsen/NPT, Nosé-Hoover/NPT
- Structure optimization
- Local minimum search: BFGS, BFGSLineSearch, LBFGS, LBFGSLineSearch, GPMin, MDMin, QuasiNewton, FIRE
- Transition state search: BFGSClimbFixInternals, NEB, Dimer
- Global minimum search: BasinHopping, MinimaHopping, Genetic Algorithm
- Vibrations: normal modes analysis, infrared and Raman spectra, Franck-Condon factors
There might be additional algorithms from other python packages built on top of ASE (i.e. using the Atoms and Calculator objects). In addition, it should be possible to define further algorithms internally using the AMML.
See also #131 (closed)
Grammar
Here some suggestions for a possible grammar:
AMMLProperty:
// methods should contain extactly one calculator and/or one algorithm in any order
// constraints must be applied to ensure only two objects are in the list and are of these two types
... 'with methods'? methods += AMMLMethod[','] ...
;
AMMLMethod: AMMLCalculator | AMMLAlgorithm | VarReference;
Better restriction to calc and algo rules but the VarReference is missing here, thus no reuse of calc and algo possible:
AMMLProperty:
... 'with methods'? ( calc = AMMLCalculator ',' algo = AMMLAlgorithm ) |
( algo = AMMLAlgorithm ',' calc = AMMLCalculator ) ...
;
This is with the full set of allowed possibilities:
AMMLProperty:
... 'with methods'? ( calc = AMMLCalculator ',' algo = AMMLAlgorithm ) |
( algo = AMMLAlgorithm ',' calc = AMMLCalculator ) |
( calc = [Variable|TrueID] ',' algo = AMMLAlgorithm ) |
( algo = AMMLAlgorithm ',' calc = [Variable|TrueID] ) ...
;
AMMLAlgorithm:
// temporarily as string matches but should become common rules holding their own parameters
'BFGS' | 'BFGSLineSearch' | 'LBFGS' | 'LBFGSLineSearch' | 'GPMin' | 'MDMin' | 'QuasiNewton' |
'FIRE' | 'VelocityVerlet' | 'Langevin' | 'Andersen' | 'Berendsen' | 'Nosé-Hoover' |
'BFGSClimbFixInternals' | 'NEB' | 'Dimer' | 'BasinHopping' | 'MinimaHopping' | 'GA' |
'PourbaixDiagram' | 'PhaseDiagram' | 'RDF'
;
Higher priority should get the MD algorithms, RDF and NEB.
Interpreter
A Python class for Algorithm, similar to the ASE Calculator should be devised. The goal is to have a Python interface to diverse algorithms, including ASE algorithms and user-defined algorithms.