susilehtola / OpenOrbitalOptimizer

Open Orbital Optimizer
7 stars 2 forks source link

Collect in one place and improve the convex weight routines #13

Open susilehtola opened 6 months ago

susilehtola commented 6 months ago

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.