I've noticed that the excited state search will become quite slow and eventually stop working beyond some highly energetic state (i.e. it's impossible to get the full spectrum unlike in exact diagonalization). I would assume it's because you have to keep subtracting off your new state , resulting in a shrinking state space similar to what happens in a Gran Schmidt procedure
What if for each new state from the search, you add a term \lambda |\Psi > < \Psi | to the Hamiltonian and repeat the search process? \lambda should be a very large number compared to the eigenenergies so that the previously lowest energetic states are shifted to the top of the spectrum. I'm wondering if I can get more excited states this way compared to your current algorithm.
If so would it be easy for me to implement this with your current code?
Thanks
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
yes indeed, it does slow down due to Gram-Schmidt. Moreover, the code has
to do the Gram-Schmidt via fitting new MPS states in contrast to the simple
subtraction known from vectors. Subtracting MPSs would increase the bond
dimension.
From the algorithmic point of view, your approach would be working. But we
should think about computational scaling, too. Psi has probably bond
dimension chi, |psi><psi| inside the MPO has an MPO bond dimension of
chi^2. My first intuition is that we won't be better of, probably worse due
to the chi^2.
As an alternative, I could imagine that the following works: 1) Find the
first n excited states. 2) Shift the energy with local identities in the
Hamiltonian in a way that the n-th excited has an energy just below zero.
3) Switch to search for the eigenstates with the lowest magnitude, which
should be possible via ARPACK's DNAUPD. Probably I would still project out
the 3-5 highest excited states you know. 4) Check the new eigenstate, if
the energy is below zero there is probably a gap and you continue with 2)
and the known eigenstates and a new shift. If the energy is above zero, add
the state to the known eigenstates, shift accordingly for the next
iteration in 2). I don't know if you can get this approach implemented in a
stable fashion within a sweep and using ARPACK.
The final question would be what problem you want to solve. I always assume
you don't want to find all eigenstates in the end. Maybe you can approach
the problem altogether from another end.
I've noticed that the excited state search will become quite slow and
eventually stop working beyond some highly energetic state (i.e. it's
impossible to get the full spectrum unlike in exact diagonalization). I
would assume it's because you have to keep subtracting off your new state ,
resulting in a shrinking state space similar to what happens in a Gran
Schmidt procedure
What if for each new state from the search, you add a term \lambda |\Psi >
< \Psi | to the Hamiltonian and repeat the search process? \lambda should
be a very large number compared to the eigenenergies so that the previously
lowest energetic states are shifted to the top of the spectrum. I'm
wondering if I can get more excited states this way compared to your
current algorithm.
If so would it be easy for me to implement this with your current code?
I've noticed that the excited state search will become quite slow and eventually stop working beyond some highly energetic state (i.e. it's impossible to get the full spectrum unlike in exact diagonalization). I would assume it's because you have to keep subtracting off your new state , resulting in a shrinking state space similar to what happens in a Gran Schmidt procedure
What if for each new state from the search, you add a term \lambda |\Psi > < \Psi | to the Hamiltonian and repeat the search process? \lambda should be a very large number compared to the eigenenergies so that the previously lowest energetic states are shifted to the top of the spectrum. I'm wondering if I can get more excited states this way compared to your current algorithm.
If so would it be easy for me to implement this with your current code?
Thanks
Hi Alex,
yes indeed, it does slow down due to Gram-Schmidt. Moreover, the code has
to do the Gram-Schmidt via fitting new MPS states in contrast to the simple
subtraction known from vectors. Subtracting MPSs would increase the bond
dimension.
From the algorithmic point of view, your approach would be working. But we
should think about computational scaling, too. Psi has probably bond
dimension chi, |psi><psi| inside the MPO has an MPO bond dimension of
chi^2. My first intuition is that we won't be better of, probably worse due
to the chi^2.
As an alternative, I could imagine that the following works: 1) Find the
first n excited states. 2) Shift the energy with local identities in the
Hamiltonian in a way that the n-th excited has an energy just below zero.
3) Switch to search for the eigenstates with the lowest magnitude, which
should be possible via ARPACK's DNAUPD. Probably I would still project out
the 3-5 highest excited states you know. 4) Check the new eigenstate, if
the energy is below zero there is probably a gap and you continue with 2)
and the known eigenstates and a new shift. If the energy is above zero, add
the state to the known eigenstates, shift accordingly for the next
iteration in 2). I don't know if you can get this approach implemented in a
stable fashion within a sweep and using ARPACK.
The final question would be what problem you want to solve. I always assume
you don't want to find all eigenstates in the end. Maybe you can approach
the problem altogether from another end.
Bests,
Daniel
On Fri, Oct 22, 2021 at 9:15 PM Alex W alexwigner11@users.sourceforge.net
wrote: