Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Neighborhood Tensor Update (aka Cluster Update) #121

Draft
wants to merge 69 commits into
base: master
Choose a base branch
from

Conversation

Yue-Zhengyuan
Copy link
Collaborator

This PR adds the Neighborhood Tensor Update (NTU, arXiv 2107.06635) which is a variant of the Cluster Update (CU, arXiv 1110.4362 and arXiv 1311.6696).

When truncating a bond after applying a time evolution gate, the NTU uses some neighboring tensors as the bond environment, instead of using only a few bond weights (simple update) of the full iPEPS approximated by CTM (full update), "interpolating" between the two extremes. Currently the NN, NNN and NNN+ bond environments (see description in the YASTN package) are implemented.

Similar to the full update, the NTU often also needs to start from a good initialization (e.g. provided by simple update).

Differences from the NTU paper

  • Bond weights are introduced in the iPEPS.
  • The step of applying gate to the bond is made more efficient.
  • Two ways of truncating the bond are implemented: ALSTruncation and FullEnvTruncation. The former is the traditional way to do it. The latter is proposed in arXiv 1801.05390 to truncate any internal bond in a network with closed loops. It seems that both have their own advantages.

To do

  • Determine convergence criteria: with bond weights, the convergence can in principle be determined from the change of weights between two steps. But I observe that the energy can start to increase when the weight change is still decreasing.
  • Compare with YASTN: the NTU was first implemented there. We should make sure that our implementation is as performant as (or even better than) theirs.
  • Reduce code redundancy: some part of NTU code is very similar to SU.
  • Polish docstrings.

Copy link

codecov bot commented Jan 26, 2025

Codecov Report

Attention: Patch coverage is 3.68764% with 444 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/algorithms/time_evolution/ntupdate.jl 0.00% 110 Missing ⚠️
.../algorithms/time_evolution/bondenv/optimize_als.jl 0.00% 75 Missing ⚠️
src/algorithms/time_evolution/bondenv/env_tools.jl 0.00% 70 Missing ⚠️
src/utility/fullenv_truncation.jl 0.00% 45 Missing ⚠️
src/algorithms/time_evolution/bondenv/env_ntu.jl 0.00% 34 Missing ⚠️
src/algorithms/time_evolution/bondenv/env_ctm.jl 0.00% 32 Missing ⚠️
src/states/infiniteweightpeps.jl 0.00% 18 Missing ⚠️
.../algorithms/time_evolution/bondenv/optimize_fet.jl 0.00% 16 Missing ⚠️
src/states/infinitepeps.jl 42.85% 16 Missing ⚠️
src/algorithms/time_evolution/simpleupdate.jl 0.00% 15 Missing ⚠️
... and 3 more
Files with missing lines Coverage Δ
src/PEPSKit.jl 87.50% <ø> (ø)
src/algorithms/ctmrg/sequential.jl 98.36% <100.00%> (+0.08%) ⬆️
...rc/algorithms/time_evolution/bondenv/env_approx.jl 0.00% <0.00%> (ø)
src/utility/util.jl 51.54% <0.00%> (-1.09%) ⬇️
src/algorithms/time_evolution/evoltools.jl 0.00% <0.00%> (ø)
src/algorithms/time_evolution/simpleupdate.jl 0.00% <0.00%> (-87.92%) ⬇️
.../algorithms/time_evolution/bondenv/optimize_fet.jl 0.00% <0.00%> (ø)
src/states/infinitepeps.jl 58.97% <42.85%> (-11.03%) ⬇️
src/states/infiniteweightpeps.jl 0.00% <0.00%> (-93.34%) ⬇️
src/algorithms/time_evolution/bondenv/env_ctm.jl 0.00% <0.00%> (ø)
... and 5 more

... and 14 files with indirect coverage changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants