How to construct a MPS ground state to calculate?

I am considering to construct a MPS ground state directly, to calculate expectation values of some observables.

For exmaple, for spin-1 AKLT model with periodic boundayr condition (PBC), we have known its ground state as a VBS state exactly. Are there any methods to construct it directly by using iTensor.jl?

Thanks

Hi @souhang,
I would recommend the following steps to do this.

  1. make an array of spin 1 site indices:
sites = siteinds("S=1",N)
  1. make an array of ITensor Index objects of the dimension you need to serve as bond or link indices. Something like this:
links = [Index(2,"n=$n,Link") for n=1:N]
  1. then, inside a for loop over each site, construct an ITensor and its elements to the correct numbers
for j=1:N
Aj = ITensor(links[j], sites[j], links[j+1])
# ... setting other elements
Aj[1,2,1] = -sqrt(1/3)
Aj[2,2,2] = +sqrt(1/3)
# ... setting other elements
end

Finally, you will need to take care of boundary conditions. For AKLT and open boundary conditions it can be quite an interesting story. There are actually four AKLT ‘ground states’ which have very slightly different energies but whose energy differences become exponentially small as a function of increasing system size, so conceptually they are treated as ‘degenerate’ states (meaning degenerate in the thermodynamic limit). There is also a trick of making the first and last site actual S=1/2 sites which perfectly ‘cancels’ boundary effects.

Thanks @miles
I think this is very helpful for me, but I’m considering a periodic boundary condition (PBC) here, so it should be only unique gapped ground state.

A little question about the constructed Tensor:

for j=1:N
Aj = ITensor(links[j], sites[j], links[j+1])
# ... setting other elements
Aj[1,2,1] = -sqrt(1/3)
Aj[2,2,2] = +sqrt(1/3)
# ... setting other elements
end

then could I use it to calculate energy directly?

Hm, I guess I don’t know what you are asking when you ask “could I use it to calculate energy directly?”. What does directly mean? Of course, given an MPS made of correct tensors and a Hamiltonian, then there are algorithms to compute the energy of the MPS (mainly contracting the Hamiltonian as an MPO with the MPS and its conjugate).

As far as the PBC version of this state goes, yes that is fine and I think the tensor definitions generalize – you may have to check the literature. But as far as ITensor goes, we do not offer many tools right now for working with periodic tensor networks, mainly because such tools have not been developed very much by the TN community. But we are researching some possible ones that we could offer in the future, such as using the belief propagation algorithm.