Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A general QNOperator #257

Open
paraynaud opened this issue Dec 12, 2022 · 1 comment
Open

A general QNOperator #257

paraynaud opened this issue Dec 12, 2022 · 1 comment

Comments

@paraynaud
Copy link
Member

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} = y_k{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} y_k + \frac{s_{k}^\top B_k v}{s_k^\top B_k s_k} B_k s_k + \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
Copy link
Member

dpo commented Jul 6, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants