Skip to content

Proposal to replace direct_minimization and switch to Manopt solvers #1102

@kellertuer

Description

@kellertuer

This semester I have student (@elorannug) working on the direct minimization for scf and port it to Manopt.

In this issue I would like to check how to best continue. Before describing the current for of direct_minimization and a proposed new form, let's first state the main questions that I would like to discuss

Should the old method stay but be moved into an Optim.jl extension? That makes a new release at least only “mildly breaking”, a user has to load Optim and potentially Linesearches themselves.
The disadvantage is, if someone loads Optim and Manopt, both extensions have to work nicely together still.

What do you think @antoine-levitt ?

Current form

In the current scf/direct_minimization.jl the user has an easy interface based on a PlaneWaveInterface that allows to set the usual maxiter/tol stopping criteria, choose a solver from Optim and (optionally= provide a start point.

The only keyword I personally do not fully understand is alpha_guess – is that a function to have a good initial step size guess for the line search?

New form

The basis will stay the only mandatory parameter.

All existing kwargs would stay, we we just use them differently internally

Keyword arguments

  • stopping_criterion= will use the existing maxiter/tol to introduce a default stopping criterion based on that, but a user could also provide their own one
    one challenge might be that we currently have one that we do define ourselves – if that is only introduced in the extension, it would be quite private, and hence not so easy to use for an end user, but I think I know a trick
  • solver= provide an AbstractManoptSolverState to specify which solver to use
  • peconditioner= a manopt preconditioner, especially when using LBFGS (there is also a second one its, type)
  • manifold= specify whether to use Stiefel or Grassmann; one could also allow for their Generalized (i.e. weighted) versions
  • kwargs... can be used to decorate both problem and state, such that debug= and such would also work in this function call.

Since this requires both Manopt anf Manifolds, I would propose to do this in a DFTKManoptManifoldsExt.jl with the above keywords. It would still only be “mildly bearking” for end users.

Let me know what you think.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions