Tuesday, September 8, 2009

Min::linemin_quadratic() flowchart

Concerns:
(1) We may be abandoning plain Armijo backtracking when it may be having some remaining mileage . The danger in this is that the quadratic mode may satisfy Armijo by jumping to the initial point.

(2) The quadratic mode assumes success when:
(de <= de_ideal || de_ideal >= -IDEAL_TOL) == True
At the initial point this is automatically true (even when forces aren't zero).
Note that: de_ideal = -0.4(alpha)(initial_f.s)
and in quadratic mode: alpha = alpha0

(3) Jumping to the initial point can cause the minimizer to go into an infinite loop causing it to exit with either MAX_FORCE_EVALUATIONS or MAX_ITERATIONS (ie. max cg loops).

(4) Example of linemin_quadratic() when it exit with success by jumping to the initial point:

----
count fdotdirall energy alpha start
0 2.436356006811224e-03 -2.719796543157099e+00 3.460098962684194e-01 initial
1 -1.801321567525278e+01 -1.684889377507936e+00 3.460098962684194e-01
2 -1.017649600012320e+00 -2.658368603360779e+00 1.730049481342097e-01
3 -2.847044105111986e-01 -2.708236347904628e+00 8.650247406710485e-02
4 -1.597636733426530e-01 -2.715590284316164e+00 5.290154968720939e-02 insideQuad
5 -1.297466257039866e-01 -2.716985938194178e+00 4.325123703355242e-02
6 -6.561635732195255e-02 -2.719095785009185e+00 2.162561851677621e-02
7 -3.280817866097375e-02 -2.719629373969908e+00 1.081280925838811e-02
8 2.436356006811224e-03 -2.719796543157099e+00 1.665334536937735e-15 insideQuad
9 2.436356006811224e-03 -2.719796543157099e+00 1.665334536937735e-15
9 2.436356006811223e-03 -2.719796543157099e+00 1.660130366509804e-15 0.000000000000000e+00 -1.617867436214352e-18 exitingLinemin
---
The 3rd last entry in line 9 (last line) is the decrease in energy compared to the initial point & the 2nd last entry is de_ideal.

This caused an infinite loop and at the end the minimizer quit due to MAX_FORCE_EVALS, leaving the final state with large forces.

----

1 comment:

  1. It seems to us that the #IDEAL_TOL which is used in min.cpp should be set to 1E-13 (conservatively 12)... instead the LAMMPS authors set it to 1E-8.

    Discussion: when adding N items of order unity, the precision to which we know the sum is the machine precision, less N. e.g. if we have 10,000 items, the sum should only be meaningful to 1 part in 10 to the 10 rather than 1 part in 10 to the 14. Our guess is that the developers picked 1E-8 as a tradeoff between having the armijo backtracker keep going on forever (IDEAL_TOL too small) and the backtracker getting failed linesearches too early (IDEAL_TOL too big).

    We should modify min.cpp to allow IDEAL_TOL to be set at runtime in the LAMMPS script and then play with it.

    --Craig

    ReplyDelete