Collect in one place and improve the convex weight routines
EDIIS and ADIIS employ convex interpolation of Fock matrices $\overline{\bf F} = \sum_i w_i {\bf F}_i$ with the mapping $w_i = x_i^2 / \sum_j x_j^2$.
The mapping is invariant to scaling ${\bf x} \to c {\bf x}$, and sometimes behaves badly in line searches: the line search may not converge, e.g. when the optimum is found for ${\bf w} = (1, 0, 0, \dots)^{\text T}$.
The solution is to eliminate the wiggle room in the weights by adding a penalty to the energy function
$ E({\bf x}) \to E({\bf x}) + \lambda (\sum_i x_i^2 - 1)^2 $ with $\lambda$ a small shift factor.
In addition, the weight function mappings should be moved to a common place.
0 条评论