# A particular initial guess for DMRG calculation

+1 vote

Dear all

I am interested to specify a kind of pair-singlet initial guess to do DMRG, instead of "auto psi0 = randomMPS(sites)"

Let me be more clear: assume we have 6 spins-1/2 and they make pairs as follows [(1,5),(2,3),(4,6)], and psi0 should be a tensor product of these singlet-pairs as below: see here:

https://ibb.co/DKgrRkt

here is the latex formula:

psi0=\otimes{\rm singlest-pairs} |o{ij}\rangle,~~ |o{ij}\rangle=\frac{|\uparrowi\downarrowj\rangle-|\uparrowj\downarrow_i\rangle}{\sqrt{2}}

Many thanks for your help
Bests regards

commented by (70.1k points)
Hi Javad, one question back to you first: would you be happy instead with nearest-neighbor singlet pairs instead? Like of the form [(1,2),(3,4),(5,6)] ?

The reason I ask is that for a large enough system, a state with singlets connecting random sites could have a very large entanglement. For example, if the pairing is [(1,N),(2,N-1),(3,N-2),...] then the entanglement will be so large that the bond dimension of the resulting MPS will be exponential in N.

Also the code to make the case you are asking for is significantly more complicated to write than for the nearest-neighbor case.

Best regards,
Miles
commented by (70.1k points)
Also, let me ask: is your goal of making this state to help with convergence of DMRG, because you were encountering a convergence problem? Or is it for a different reason i.e. just to investigate what this initial choice does in some way?
commented by (420 points)
Dear Miles

Yes, sure with  long-range pairs, we have to deal with large entanglement and it needs big bond-dimension.

Indeed, we are working on Long-range disorder spin-1/2 chains with power law coupling $J_{ij}=1/|i-j|^a$. ("a" --> power)

We have solved the model analyticaly with strong disorder renormalization group (SDRG) , and numerically with exact diagonalization (ED), and DMRG (using itensor code). Entanglement entropy (Svn) is calculated and results  of SDRG and ED are consistent, while DMRG  finds wrong results!!!.

I spent time on small systems with comparing ED and DMRG inorder to figure out the problem. I understood, however ground-state "ENERGY" captured by DMRG is very close to ED (super tiny difference of order O(1e-6) for any power "a"), but as power increases "a", the ground state (GS) wave function are not close to ED and it gets worser for bigger "a".

I checked many initial guess, and it seems during the variational process, as DMRG do to minimise entanglement, it stuck in a kind of local minimum with lower entanglement than  true GS !!!! (at least comparing with my ED calculations, note ED already showed consistent with SDRG).

Then I guess, if we start with true GS, lets take it from SDRG calculation as a MPS of random pairs in system,  then maybe we conclude with true result.

Small systems is just a test, if it works, then we can extract true GS of a big chain from SDRG and feed it as an initial guess in DMRG.

Bests regards
commented by (70.1k points)
Thanks for taking the time to explain! I gave an answer below outlining the steps I would do. Some of the technicalities might need more detail, so please let me know if you can't figure out how to do some of the steps in ITensor.

Regarding the idea of using MPS and DMRG to study SDRG physics, I think it's pretty natural behavior by the DMRG algorithm, and not necessarily a failure, to return an MPS which leaves out many of the long-range singlets. The reason is that these probably only contribute a very tiny (exponentially tiny?) lowering of the energy compared to including them, while on the other hand they contribute a huge amount to increasing the entanglement, which goes against the kind of low-entanglement approximation or bias DMRG tends to make.

Also, you may already know, but there have been some papers which explored using tree tensor networks (TTN) instead of MPS to study SDRG physics, for example this one:
https://arxiv.org/abs/1708.07652

answered by (70.1k points)

Thanks for the discussion above. I thought of a solution that could work well for what you want to do. I'll just give an outline, though happy to discuss some technical aspects of implementing it in ITensor (C++ v3).

First of all, prepare an MPS which is a product of singlets on sites (1,2), (3,4), (5,6), etc. To do so, you can use code similar to the following:
https://github.com/ITensor/ITensor/blob/a1254d56a180d5e0b992c9b7d9a463bb06a5333d/tutorial/finiteT/ancilla.cc#L58
which is from the "tutorial/finiteT/ancilla.cc" code included with ITensor.

Then use "swap moves" to exchange MPS sites to obtain the pattern of singlets that you want. For example, if you merge the MPS tensors on sites 2 and 3:

auto wf = psi(2)*psi(3);


then SVD these tensors back apart, but now grouping the 3rd physical index with the MPS bond index connecting MPS tensors 1 and 2:

auto b1 = commonIndex(psi(1),psi(2));
auto [U,S,V] = svd(wf,{b1,sites(2)});


Finally, reassign U and (S*V) into the MPS to update it:

psi.ref(2) = U;
psi.ref(3) = S*V;


Now the pattern of singlets will be (1,3),(2,4),(5,6),... and the bond dimensions of the MPS will be increased accordingly, and should now be: 2,4,2,1,2,1,... However note that the site indices will be out of order from the original ones you may want: they will be 1,3,2,4,5,...

Keep repeating the above steps to swap pairs of neighboring physical sites. It's ok if you ignore the MPS gauge (orthogonality) conditions as long as all of the SVD's you do are exact and don't truncate.

Finally, the site indices of the MPS will be very scrambled up compared to the original order. You can either fix this by doing code lik psi.ref(j).replaceInds({sites(n)},{sites(j)}); on each MPS tensor to put the physical index sites(j) back on MPS tensor j. Or you can just work with the new order of site indices if that's convenient to do.

Best regards,
Miles