JuliaSmoothOptimizers / LinearOperators.jl

Linear Operators for Julia
Other
150 stars 32 forks source link

A general QNOperator #257

Open paraynaud opened 1 year ago

paraynaud commented 1 year ago

Hello all, I want to submit to you an idea about quasi-Newton operators. Currently, we have LBFGSOperator to build a convex quasi-Newton approximation and LSR1Operator to catch negative curvatures. I wonder if we can build a limited-memory operator that could use both BFGS and SR1 equations. Even if positive definitness is lost, we get more chance to satisfy numerical safeguards. Contrary to a damped operator, it keeps the real curvature instead of a damped one.

Suppose a first LBFGS update

$$ B_{k+1} = B_k + \frac{y_k y_k^\top}{y_k^\top s_k} + \frac{B_k s_k s_k^\top B_k}{s_k B_k s_k}, $$

and then, a LSR1 update

$$ B{k+1} = B{k+1} v + \frac{r{k+1} r{k+1}^\top}{r{k+1}^\top s{k+1}}, $$

with $r_{k+1} = yk{k+1} - B{k+1} s{k+1}$. Then we get the product $B{k+2} v$ as

$$ B_{k+2}v = B_k v + \frac{y_k^\top s_k}{y_k^\top s_k} yk + \frac{s{k}^\top B_k v}{s_k^\top B_k s_k} B_k sk + \frac{r{k+1}^\top v}{r{k+1}^\top s} r{k+1} $$

where $B_k$ may be initially set as a multiple of the identity.

This QNOperator could choose automatically which update perform based on the satisfaction of numerical safeguards. It would keep the related vectors and adapt product accordingly to the update selected. What do you think?

dpo commented 1 year ago

Yes it’s a good idea and I see where you would use it.