Ignore:
Timestamp:
Jul 3, 2017, 3:06:53 PM (8 years ago)
Author:
Frederik Heber <frederik.heber@…>
Branches:
Action_Thermostats, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_StructOpt_integration_tests, AutomationFragmentation_failures, Candidate_v1.6.1, ChemicalSpaceEvaluator, EmpiricalPotential_contain_HomologyGraph_documentation, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, Fix_Verbose_Codepatterns, ForceAnnealing_oldresults, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, Gui_displays_atomic_force_velocity, IndependentFragmentGrids_IntegrationTest, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, PythonUI_with_named_parameters, Recreated_GuiChecks, StoppableMakroAction, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps
Children:
95b64f
Parents:
b52710e
git-author:
Frederik Heber <heber@…> (03/01/17 20:36:01)
git-committer:
Frederik Heber <frederik.heber@…> (07/03/17 15:06:53)
Message:

DOCU: Updated potentials.dox.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/documentation/constructs/potentials.dox

    rb52710e r3cfb31  
    2121 * fragments (ab-initio) and summing up to a good approximation of the total
    2222 * energy of the whole system, \sa fragmentation.
    23  * Second, having calculated these energies, there quickly comes up the thought
     23 * Second, having calculated these energies, there quickly comes up the idea
    2424 * that one actually calculates quite similar systems all time and if one could
    2525 * not cache results in an intelligent (i.e. interpolating) fashion ...
     
    3030 * give a value for the total energy without the need to solve a complex
    3131 * ab-initio model (essentially, not solving the electronic Schrödinger equation
    32  * anymore).
     32 * anymore). And they are accompanied by a specific binding model that
     33 * represents what kind of many-body force is represented by the potential.
    3334 *
    3435 * Empirical potentials have been thought of by fellows such as Lennard-Jones,
    35  * Morse, Tersoff, Stillinger and Weber, etc. And in their honor, the
    36  * potential form is named after its inventor. Hence, we speak e.g. of a
     36 * Morse, Tersoff, Stillinger and Weber, etc. And in their honor, most of the
     37 * potential forms are named after its inventor. Hence, we speak e.g. of a
    3738 * Lennard-Jones potential.
    3839 *
     
    4344 * -# evaluate the potential instead of an ab-initio calculation
    4445 *
    45  * The terms we use, model the classes that are implemented:
     46 * However, we need more: What are similar fragments? How do we perform the
     47 * fitting procedure? And as the potentials are mathematical functions, what
     48 * arguments do they depend on?
     49 *
     50 * Similar fragments are those that share the same bond graph, i.e. they have
     51 * the same number of nodes and the same number of edges. And each edge is
     52 * between the same two elements.
     53 *
     54 * The fitting procedure works by looking at a training set, i.e. a list of
     55 * elements where each contains an energy and a number of arguments, namely
     56 * pair-wise distances. The error is then the difference between the energies
     57 * in the set and all the energy values that we obtain when we feed the
     58 * arguments into the fitted potentials. This error is minimized in the
     59 * euclidian norm, i.e. least squares regression. But other norms might be
     60 * possible in the future, too.
     61 *
     62 * And the pair-wise distances, we mentioned are the arguments.
     63 *
     64 * The terms, that we use, model the classes that are implemented:
    4665 * -# EmpiricalPotential: Contains the interface to a function that can be
    4766 *    evaluated given a number of arguments_t, i.e. distances. Also, one might
    4867 *    want to evaluate derivatives.
    49  * -# FunctionModel: Is a function that can be fitted, i.e. that has internal
    50  *    parameters to be set and got.
     68 * -# FunctionModel: Is a function that can be fitted, i.e. it depends on a
     69 *    set of internal parameters that can be set and got.
    5170 * -# argument_t: The Argument stores not only the distance but also the index
    5271 *    pair of the associated atoms and also their charges, to let the potential
     
    5675 *    class.
    5776 * -# HomologyGraph: "Similar" fragments in our case have to have the same bond
    58  *    graph. It is stored in the HomologyGraph that acts as representative
    59  * -# HomologyContainer: This container combines, in multimap fashion, all
     77 *    graph. It is stored in the HomologyGraph that acts as representative.
     78 * -# HomologyContainer: This container combines, in a ultimap fashion, all
    6079 *    similar fragments with their energies together, with the HomologyGraph
    6180 *    as their "key".
     
    6382 *    the set of distances required for the FunctionModel (e.g. only a single
    6483 *    distance/argument for a pair potential, three for an angle potential,
    65  *    etc.) and also the expected OutputVector. This in combination with the
    66  *    FunctionModel is the basis for the non-linear regression used for the
    67  *    fitting procedure.
     84 *    etc.) and also the expected OutputVector, i.e. the energy of the specific
     85 *    configuration in our case. This in combination with the FunctionModel is
     86 *    the basis for the non-linear regression used for the fitting procedure.
    6887 * -# Extractors: These set of functions yield the set of distances from a
    6988 *    given fragment that is stored in the HomologyContainer.
     
    7493 * \section potentials-fit-potential-action What happens in FitPotentialAction.
    7594 *
    76  *  First, either a potential file is parsed via PotentialDeserializer or charges
    77  *  and a potential type from the given options. This is used to instantiate
    78  *  EmpiricalPotentials via the PotentialFactory, stored within the
    79  *  PotentialRegistry. This is the available set of potentials (without requiring
    80  *  any knowledge as to the nature of the fragment employed in fitting).
     95 *  First, charges and a potential type is used from the given options. This
     96 *  is used to instantiate EmpiricalPotentials via the PotentialFactory, stored
     97 *  within the PotentialRegistry. This is the available set of potentials
     98 *  (without requiring any knowledge as to the nature of the fragment employed
     99 *  in fitting).
    81100 *
    82101 *  Second, the given fragment is used to get a suitable HomologyGraph from
     
    114133 *  to find the minimum in the L2-norm.
    115134 *
    116  *  This is done more than once as high-dimensional regression is sensititive the
     135 *  This is done more than once as high-dimensional regression is sensitive to
    117136 *  the starting values as there are possible numerous local minima. The lowest
    118137 *  of the found minima is taken, either via a given threshold or the best of a
     
    139158 *  The main issue with the evaluation is picking the right set of distances from
    140159 *  ones given in the input vector and feed it to each potential contained in
    141  *  CompoundPotential. Note that the distances have already been prepared by
    142  *  the TrainingData instantiation.
     160 *  CompoundPotential.
    143161 *
    144162 *  Initially, the HomologyGraph only contains a list of configurations of a
     
    146164 *  energy value. These first have to be converted into distances.
    147165 *
    148  *
     166 *  These distances are prepared by the TrainingData instantiation, i.e. a
     167 *  fragment with all its atomic positions has already been converted to the
     168 *  set of all pair-wise interatomic distances.
     169 *
     170 * \section potentials-distance-picking How does the distance picking work
     171 *
     172 *  Given a set of pair-wise distances, how do we pick the subset of distances
     173 *  needed by a particular potential.
     174 * 
     175 *  Let's make an example first: Imagine a water molecule, i.e. one oxygen and
     176 *  and two hydrogen atoms with two O-H bonds. Naturally, we obtain three pair-
     177 *  wise distances, OH1, OH2 and H1H2. Now, we would like to fit a Morse
     178 *  potential that just depends on a single interatomic distance. We would like
     179 *  it to represents the O-H bond energy. Hence, the distance picker, namely
     180 *  the Extractor function, needs to pick any subset of distance that contains
     181 *  a unique single O-H distance. In effect, it needs to return a list
     182 *  containing OH1 and OH2 as the Morse potential needs to represent both bond
     183 *  energies together.
     184 * 
     185 *  Now, this is really still quite simple as long as the potential only
     186 *  depends on a single distance. However, what if we continue and look at a
     187 *  angle potential, requiring three atoms, i.e. H-O-H?
     188 * 
     189 *  Or even more complicated: Imagine an ethane molecule (C2H6) and we would
     190 *  to represent the H-C-C angular interaction by a harmonic angle potential.
     191 *  Now, there are multiple of these at the same time, namely six angular
     192 *  interactions.
     193 * 
     194 *  What have to do is look for subgraphs inside a graph. Each potential comes
     195 *  with a small graph that represents the binding structure, in our terms
     196 *  the bond model, that we expect. And we need to find the all matching
     197 *  subgraphs in the whole graph being the fragment itself. Then, for each
     198 *  subgraph the potential tells us in what order the pair-wise distances
     199 *  associated with the subgraph are required to be. All of these subset of
     200 *  distances are eventually concatenated and fed into the model on evaluation.
     201 * 
    149202 * \section potentials-howto-use Howto use the potentials
    150203 *
     
    208261 *  As we always start from random initial parameters (within a certain sensible
    209262 *  range at least), the non-linear fit does not always converge. Note that the
    210  *  random values are drawn from the defined distribution and the uniform distributionm
     263 *  random values are drawn from the defined distribution and the uniform distribution
    211264 *  engine is obtained from the currently set, see \ref randomnumbers. Hence, you
    212265 *  can manipulate both in order to get different results or to set the seed such that
    213266 *  some "randomly" drawn value always work well (e.g. for testing).
    214267 * 
    215  *  In any case, For this case the FragmentationFitPotentialAction has the option
     268 *  In any case, the FragmentationFitPotentialAction has the option
    216269 *  "take-best-of" to allow for multiple fits where the best (in terms of l2 error)
    217270 *  is taken eventually. Furthermore, you can use the "set-threshold" option to
    218  *  stop restarting the fit procedure first when the L2 error has dropped below the
    219  *  given threshold.
     271 *  repeat the fit procedure until the L2 error has dropped below the given
     272 *  threshold.
    220273 *
    221274 * \section potentials-howto-add Howto add new potentials
     
    237290 *
    238291 *
    239  * \date 2013-04-09
     292 * \date 2017-05-14
    240293 */
Note: See TracChangeset for help on using the changeset viewer.