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

Conjugate gradient for SPEC #83

Open
zhucaoxiang opened this issue Jan 14, 2020 · 1 comment
Open

Conjugate gradient for SPEC #83

zhucaoxiang opened this issue Jan 14, 2020 · 1 comment
Assignees

Comments

@zhucaoxiang
Copy link
Collaborator

The request for using the conjugate gradient (CG) method for minimization was raised recently. Here is what I posted at FOCUS repository about my limited experience of using CG. You can have a look and take it as a reference.


The current nonlinear conjugate gradient (CG) method was written by myself based on the strategy of Yuan & Dai. The line search subroutine is also written by myself based on Numerical Optimization. It is often observed un-converged line search.
In the develop branch, FOCUS is linked to another well-written library, CG-descent. If you want to use the old version CG, just compile with PFLAGS='-D oldcg'.

Here is a test using the rotating ellipse. Solid lines are the CG-descent, and dashed lines the old CG.

  1. Convergence over iterations.
    image

  2. Convergence over wall-time.
    image

  3. Poincare plots from CG-descent
    image

  4. Poincare plots from old CG
    image

The testing results show that the CG-descent is much faster in speed. My guess is that I didn't implement a very good line search subroutine. So I will encourage everyone to test the CG-descent and will merge it into master after some time.

git fetch
git checkout develop
make clean; make xfocus; make dfocus

@zhisong
Copy link
Collaborator

zhisong commented Jan 14, 2020

We can also explore other open source scientific libraries such as PETSc, GSL, NLOPT and so on, which contain lots of nonlinear solvers and optimization algorithms. Many of them come with sparse matrices and in-built parallelization.

We could let users choose at compilation between in-build SPEC nonlinear solvers that maybe slower(such as minpack), or external scientific libraries.

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

No branches or pull requests

4 participants