pele.transition_states._generalized_dimer#
- class pele.transition_states._generalized_dimer.GeneralizedDimer
-
class GeneralizedDimer:Use the generalized dimer method to find a saddle point
This should be considered experimental. It works, but I haven’t spent enough time on it to make it very robust and efficient. I would recommend using FindTransitionState instead.
- Parameters:
- coordsarray
The starting point for the optimization
- potentialthe potential object
- eigenvec0array
An initial guess for the smallest eigenvector (dimer direction)
- rotational_stepsint
The number of iterations for optimizing the smallest eigenvector (rotating the dimer) between translational moves
- translational_stepsint
The number of translational steps before re-optimizing the smallest eigenvector
- maxiterint
the maximum number of iterations
- minimizer_kwargsdict
these keyword arguments are passed to the minimizer that does the translational steps
- leig_kwargsdict
these keyword arguments are passed to the class for optimizing the smallest eigenvector
Notes
The dimer method defines a way of walking along an energy surface towards a saddle point. The dimer is defined by a location and a direction, vec. vec will point along the direction of largest negative curvature, which corresponds to the eigenvector of the Hessian matrix with the smallest eigenvalue. The eigenvalue is the curvature. The eigenvector can be computed analytically if the Hessian is available, but this is often computationally expensive normally you would use gradients and an optimization function to converge towards the direction of largest curvature. If the gradient is inverted along the direction of the largest negative curvature then following that gradient will lead you towards a saddle point. As you walk towards the saddle point the direction of largest negative curvature will change, so it will need to be periodically re-optimized. Thus the main iteration loop is
1. Optimize the rotation of the dimer so that it is aligned with the direction of largest negative curvature.
2. Translate the dimer uphill following the direction of largest negative curvature while simultaneously walking downhill in all perpendicular directions.
If converged, then end, else go to 1.
- GeneralizedDimer.get_true_energy_gradient()
-
def get_true_energy_gradient(self, coords):return the true energy and gradient
- GeneralizedDimer.get_coords()
-
def get_coords(self):return the current location of the dimer
- GeneralizedDimer.stop_criterion_satisfied()
-
def stop_criterion_satisfied(self):return True if the stop criterion is satisfied
- GeneralizedDimer.one_iteration()
-
def one_iteration(self):do one iteration
- GeneralizedDimer.run()
-
def run(self):the main iteration loop
- GeneralizedDimer.get_result()
-
def get_result(self):return a results object