ITensorInfiniteMPS.jl icon indicating copy to clipboard operation
ITensorInfiniteMPS.jl copied to clipboard

Improvements to VUMPS implementation

Open mtfishman opened this issue 3 years ago • 5 comments

Some improvements to the VUMPS implementation:

  • [ ] Use Eq. (22) instead of Eq. (20) in [1] for updating the left and right orthogonal gauges of the state when singular values are small enough, to get better precision.
  • [ ] Compute the left and right Hamiltonian environments within the unit cell more accurately, currently only one is computed using Eq. (15) of [1] and the others are computed from that one.
  • [ ] Find better left and right fixed points of the transfer matrices to use when computing the environments using Eq. (15) of [1]. Currently just using C^T C and C C^T for R and L, which are only approximate fixed points.

mtfishman avatar Aug 24 '21 21:08 mtfishman

for 1), do you actually notice a difference? We looked at this a bit, and it was all very inconsistent, or even dependent on what kind of decomposition was used when doing the canicalization (finding AL-C = C-AR)

maartenvd avatar Aug 26 '21 15:08 maartenvd

By which kind of decomposition, do you mean using positive QR vs. polar in Eq. (22)? Did you find one worked better than the other?

I just started to test it out now so haven't drawn any conclusions yet. I seem to recall that Valentin Zauner-Stauber said that using a polar decomposition was more accurate in practice compared to the positive QR when using Eq. (22) to update AL and AR, so far I have only used a polar decomposition.

mtfishman avatar Aug 26 '21 16:08 mtfishman

indeed, positive qr vs positive ql vs polar. The matlab people in our group apparantly use polar, while I have it set to positive qr.

I remember that we did some benchmarking in the past and there was no clear conclusion, with results dependent on other finicky details. For example, if your input mps had an upper triangular C matrix, then it somehow mattered if you used some ql or qr decomposition in the vumps step. I was wondering if you had a clearer conclusion :)

Another thing to play with is to not do what the original vumps paper suggests (extracting AL and AR from (20) ). Instead what we now typically do is only extracting AL and then finding C,AR from the consistency equation AL * C = C * AR. That's another issue with no clear consensus on which is better.

maartenvd avatar Aug 26 '21 16:08 maartenvd

That's interesting. I also remember having some finicky details like that when I was trying to impose reflection symmetry (explicitly imposing AR = AL^T), in which case one or the other of Eq. (20) or (22) caused convergence problems, though I don't remember all of the details now.

I remember at some point I tried to extract C and AR from AL at every step of VUMPS, which of course makes the translational invariance numerically exact. However I believe when I tried that, it completely destroyed the convergence of VUMPS, though that was a while ago so I may be remembering wrong.

It would be good to share notes about best practices for implementation details like that, there are definitely a few choices to make.

mtfishman avatar Aug 26 '21 17:08 mtfishman

ah I actually tried to do reflection invariance too, but it's really tricky. If I remember correctly you can prove that there are two classes of solutions and only in one of the cases can you set AR = AL^T. Assuming it is indeed in the class of AR = AL^T, I think you can do it by first finding AL, then finding a gauge transform which transforms AL into AL', but this AL' can then be related to AR' = AL'^T. In the end I gave up on that primarily because it may go horribly wrong for certain models that don't allow such a solution.

I'd be interested in contributing to notes like that! I think in general there is quite a lot of knowledge build up in specific groups that doesn't really get into papers, because it's not very interesting in and of itself.

maartenvd avatar Aug 26 '21 17:08 maartenvd