From 8f5829e2fca372605b2cc28ba73ff8949510f39d Mon Sep 17 00:00:00 2001 From: CompatHelper Julia Date: Tue, 28 Jan 2025 01:10:05 +0000 Subject: [PATCH 1/3] CompatHelper: bump compat for OptimKit to 0.4, (keep existing compat) --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 8b9d043d1..32816721a 100644 --- a/Project.toml +++ b/Project.toml @@ -34,7 +34,7 @@ LoggingExtras = "1" MPSKit = "0.11" MPSKitModels = "0.3.5" OhMyThreads = "0.7" -OptimKit = "0.3" +OptimKit = "0.3, 0.4" Printf = "1" QuadGK = "2.11.1" Random = "1" From cc72e54669d55ffb1a6f1ce2ecacad56c49f2b3f Mon Sep 17 00:00:00 2001 From: Paul Brehmer Date: Fri, 31 Jan 2025 15:31:03 +0100 Subject: [PATCH 2/3] Update random seed and default LBFGS verbosity --- README.md | 2 +- docs/src/index.md | 2 +- examples/heisenberg.jl | 2 +- src/PEPSKit.jl | 4 +- test/heisenberg.jl | 2 +- test/j1j2_model.jl | 2 +- test/pwave.jl | 2 +- test/sandbox.jl | 126 +++++++++++++++++++++++++++++++++++++++++ test/tf_ising.jl | 4 +- 9 files changed, 136 insertions(+), 10 deletions(-) create mode 100644 test/sandbox.jl diff --git a/README.md b/README.md index 25f9a9248..381cb8d90 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ chi = 20 ctm_alg = SimultaneousCTMRG(; tol=1e-10, trscheme=truncdim(chi)) opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, - optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=2), + optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=3), gradient_alg=LinSolver(), reuse_env=true, ) diff --git a/docs/src/index.md b/docs/src/index.md index 709f42222..115349e12 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -29,7 +29,7 @@ chi = 20 ctm_alg = SimultaneousCTMRG(; tol=1e-10, trscheme=truncdim(chi)) opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, - optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=2), + optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=3), gradient_alg=LinSolver(), reuse_env=true, ) diff --git a/examples/heisenberg.jl b/examples/heisenberg.jl index 34baed189..3b0b0d657 100644 --- a/examples/heisenberg.jl +++ b/examples/heisenberg.jl @@ -14,7 +14,7 @@ H = heisenberg_XYZ(InfiniteSquare(); Jx=-1, Jy=1, Jz=-1) ctm_alg = SimultaneousCTMRG(; tol=1e-10, verbosity=2) opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, - optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=2), + optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=3), gradient_alg=LinSolver(; solver=GMRES(; tol=1e-6, maxiter=100)), reuse_env=true, ) diff --git a/src/PEPSKit.jl b/src/PEPSKit.jl index b9ea58e64..314c80833 100644 --- a/src/PEPSKit.jl +++ b/src/PEPSKit.jl @@ -76,7 +76,7 @@ include("utility/symmetrization.jl") const ctmrg_alg = SimultaneousCTMRG( ctmrg_tol, ctmrg_maxiter, ctmrg_miniter, 2, projector_alg ) - const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=2) + const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=3) const gradient_linsolver = KrylovKit.BiCGStab(; maxiter=Defaults.fpgrad_maxiter, tol=Defaults.fpgrad_tol ) @@ -130,7 +130,7 @@ module Defaults const ctmrg_alg = SimultaneousCTMRG( ctmrg_tol, ctmrg_maxiter, ctmrg_miniter, 2, projector_alg ) - const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=2) + const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=3) const gradient_linsolver = KrylovKit.BiCGStab(; maxiter=Defaults.fpgrad_maxiter, tol=Defaults.fpgrad_tol ) diff --git a/test/heisenberg.jl b/test/heisenberg.jl index 29a0f0d5e..48e58be01 100644 --- a/test/heisenberg.jl +++ b/test/heisenberg.jl @@ -11,7 +11,7 @@ Dbond = 2 χenv = 16 ctm_alg = SimultaneousCTMRG() opt_alg = PEPSOptimize(; - boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=2) + boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=3) ) # compare against Juraj Hasik's data: # https://github.com/jurajHasik/j1j2_ipeps_states/blob/main/single-site_pg-C4v-A1/j20.0/state_1s_A1_j20.0_D2_chi_opt48.dat diff --git a/test/j1j2_model.jl b/test/j1j2_model.jl index 8dd883972..5d13bba74 100644 --- a/test/j1j2_model.jl +++ b/test/j1j2_model.jl @@ -11,7 +11,7 @@ using OptimKit ctm_alg = SimultaneousCTMRG() opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, - optimizer=LBFGS(4; gradtol=1e-3, verbosity=2), + optimizer=LBFGS(4; gradtol=1e-3, verbosity=3), gradient_alg=LinSolver(; iterscheme=:diffgauge), ) diff --git a/test/pwave.jl b/test/pwave.jl index dcdecf7ea..4e36b14e9 100644 --- a/test/pwave.jl +++ b/test/pwave.jl @@ -12,7 +12,7 @@ H = pwave_superconductor(InfiniteSquare(unitcell...)) χenv = 16 ctm_alg = SimultaneousCTMRG(; maxiter=150) opt_alg = PEPSOptimize(; - boundary_alg=ctm_alg, optimizer=LBFGS(4; maxiter=10, gradtol=1e-3, verbosity=2) + boundary_alg=ctm_alg, optimizer=LBFGS(4; maxiter=10, gradtol=1e-3, verbosity=3) ) # initialize states diff --git a/test/sandbox.jl b/test/sandbox.jl new file mode 100644 index 000000000..d2809d4f9 --- /dev/null +++ b/test/sandbox.jl @@ -0,0 +1,126 @@ +using Test +using Random +using TensorKit +using KrylovKit +using LineSearches, Manifolds, Manopt +using PEPSKit + +## +using KrylovKit +using TensorKit +using PEPSKit + +Dbond = 2 +χenv = 16 +svd_alg = SVDAdjoint(; fwd_alg=IterSVD(; alg=GKL(; tol=1e-10))) +ctmrg_alg = SimultaneousCTMRG(; svd_alg) +ψ = InfinitePEPS(2, Dbond) +env = leading_boundary(CTMRGEnv(ψ, ℂ^χenv), ψ, ctmrg_alg); + +## +# initialize parameters +Dbond = 2 +χenv = 16 +# ctm_alg = SequentialCTMRG() +# opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, tol=1e-3, gradient_alg=LinSolver(; solver=GMRES(; tol=1e-4), iterscheme=:diffgauge)) +ctm_alg = SimultaneousCTMRG() +opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, tol=1e-3) +# compare against Juraj Hasik's data: +# https://github.com/jurajHasik/j1j2_ipeps_states/blob/main/single-site_pg-C4v-A1/j20.0/state_1s_A1_j20.0_D2_chi_opt48.dat +E_ref = -0.6602310934799577 + +# initialize states +Random.seed!(123) +H = heisenberg_XYZ(InfiniteSquare()) +psi_init = InfinitePEPS(2, Dbond) +env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg) + +# optimize energy and compute correlation lengths +peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init); +ξ_h, ξ_v, = correlation_length(peps, env) + +@test E ≈ E_ref atol = 1e-2 +@test all(@. ξ_h > 0 && ξ_v > 0) + +## +g = 3.1 +e = -1.6417 * 2 +mˣ = 0.91 + +# initialize parameters +χbond = 2 +χenv = 16 +ctm_alg = SimultaneousCTMRG() +opt_alg = PEPSOptimize(; + boundary_alg=ctm_alg, + tol=1e-3, + # stepsize=WolfePowellBinaryLinesearch(), + # stepsize=Manopt.LineSearchesStepsize(LineSearches.HagerZhang(; alphamax=1.0)), + # stepsize=ConstantLength(1.0), + # stepsize=WolfePowellLinesearch(), + # stepsize=WolfePowellLinesearch(; sufficient_decrease=0.1, sufficient_curvature=0.9), + # direction_update=InverseBroyden(1.0), + # cautious_update=true, +) + +# initialize states +H = transverse_field_ising(InfiniteSquare(); g) +H_polar = transverse_field_ising(InfiniteSquare(); g=4.5) +Random.seed!(91283219347) +psi_init = InfinitePEPS(2, χbond) +env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg) + +# find fixedpoint +peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init); +# peps_polar, env_polar, E_polar, = fixedpoint(psi_init, H_polar, opt_alg, env_init); + +## +χbond = 2 +χenv = 12 +ctm_alg = SimultaneousCTMRG() +opt_alg = PEPSOptimize(; + boundary_alg=ctm_alg, + tol=1e-3, + gradient_alg=LinSolver(; iterscheme=:diffgauge), + symmetrization=RotateReflect(), +) + +# initialize states +Random.seed!(91283219347) +H = j1_j2(InfiniteSquare(); J2=0.25) +psi_init = product_peps(2, χbond; noise_amp=1e-1) +psi_init = symmetrize!(psi_init, RotateReflect()) +env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg); + +# find fixedpoint +result = fixedpoint(psi_init, H, opt_alg, env_init) + +## +unitcell = (2, 2) +H = pwave_superconductor(InfiniteSquare(unitcell...)) +Dbond = 2 +χenv = 16 +ctm_alg = SimultaneousCTMRG() +opt_alg = PEPSOptimize(; + boundary_alg=ctm_alg, + maxiter=10, + gradient_alg=LinSolver(; iterscheme=:diffgauge), + # stepsize=WolfePowellLinesearch(), + stepsize=ConstantLength(1.5), + memory_size=4, +) + +# initialize states +Pspace = Vect[FermionParity](0 => 1, 1 => 1) +Vspace = Vect[FermionParity](0 => Dbond ÷ 2, 1 => Dbond ÷ 2) +Envspace = Vect[FermionParity](0 => χenv ÷ 2, 1 => χenv ÷ 2) +Random.seed!(91283219347) +psi_init = InfinitePEPS(Pspace, Vspace, Vspace; unitcell) +env_init, = leading_boundary(CTMRGEnv(psi_init, Envspace), psi_init, ctm_alg); + +# find fixedpoint +peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init); +@show E / 4 + +# comparison with Gaussian PEPS minimum at D=2 on 1000x1000 square lattice with aPBC +@test E / prod(size(psi_init)) ≈ -2.6241 atol = 5e-2 diff --git a/test/tf_ising.jl b/test/tf_ising.jl index 8b84696f2..903770214 100644 --- a/test/tf_ising.jl +++ b/test/tf_ising.jl @@ -21,12 +21,12 @@ mˣ = 0.91 χenv = 16 ctm_alg = SimultaneousCTMRG() opt_alg = PEPSOptimize(; - boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=2) + boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=3) ) # initialize states H = transverse_field_ising(InfiniteSquare(); g) -Random.seed!(91283219347) +Random.seed!(2928528935) psi_init = InfinitePEPS(2, χbond) env_init = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg) From e74e655698c2aa7a9fa0dd2c9c414ff910d99bd9 Mon Sep 17 00:00:00 2001 From: Paul Brehmer Date: Mon, 3 Feb 2025 10:41:57 +0100 Subject: [PATCH 3/3] Remove sandbox file --- test/sandbox.jl | 126 ------------------------------------------------ 1 file changed, 126 deletions(-) delete mode 100644 test/sandbox.jl diff --git a/test/sandbox.jl b/test/sandbox.jl deleted file mode 100644 index d2809d4f9..000000000 --- a/test/sandbox.jl +++ /dev/null @@ -1,126 +0,0 @@ -using Test -using Random -using TensorKit -using KrylovKit -using LineSearches, Manifolds, Manopt -using PEPSKit - -## -using KrylovKit -using TensorKit -using PEPSKit - -Dbond = 2 -χenv = 16 -svd_alg = SVDAdjoint(; fwd_alg=IterSVD(; alg=GKL(; tol=1e-10))) -ctmrg_alg = SimultaneousCTMRG(; svd_alg) -ψ = InfinitePEPS(2, Dbond) -env = leading_boundary(CTMRGEnv(ψ, ℂ^χenv), ψ, ctmrg_alg); - -## -# initialize parameters -Dbond = 2 -χenv = 16 -# ctm_alg = SequentialCTMRG() -# opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, tol=1e-3, gradient_alg=LinSolver(; solver=GMRES(; tol=1e-4), iterscheme=:diffgauge)) -ctm_alg = SimultaneousCTMRG() -opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, tol=1e-3) -# compare against Juraj Hasik's data: -# https://github.com/jurajHasik/j1j2_ipeps_states/blob/main/single-site_pg-C4v-A1/j20.0/state_1s_A1_j20.0_D2_chi_opt48.dat -E_ref = -0.6602310934799577 - -# initialize states -Random.seed!(123) -H = heisenberg_XYZ(InfiniteSquare()) -psi_init = InfinitePEPS(2, Dbond) -env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg) - -# optimize energy and compute correlation lengths -peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init); -ξ_h, ξ_v, = correlation_length(peps, env) - -@test E ≈ E_ref atol = 1e-2 -@test all(@. ξ_h > 0 && ξ_v > 0) - -## -g = 3.1 -e = -1.6417 * 2 -mˣ = 0.91 - -# initialize parameters -χbond = 2 -χenv = 16 -ctm_alg = SimultaneousCTMRG() -opt_alg = PEPSOptimize(; - boundary_alg=ctm_alg, - tol=1e-3, - # stepsize=WolfePowellBinaryLinesearch(), - # stepsize=Manopt.LineSearchesStepsize(LineSearches.HagerZhang(; alphamax=1.0)), - # stepsize=ConstantLength(1.0), - # stepsize=WolfePowellLinesearch(), - # stepsize=WolfePowellLinesearch(; sufficient_decrease=0.1, sufficient_curvature=0.9), - # direction_update=InverseBroyden(1.0), - # cautious_update=true, -) - -# initialize states -H = transverse_field_ising(InfiniteSquare(); g) -H_polar = transverse_field_ising(InfiniteSquare(); g=4.5) -Random.seed!(91283219347) -psi_init = InfinitePEPS(2, χbond) -env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg) - -# find fixedpoint -peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init); -# peps_polar, env_polar, E_polar, = fixedpoint(psi_init, H_polar, opt_alg, env_init); - -## -χbond = 2 -χenv = 12 -ctm_alg = SimultaneousCTMRG() -opt_alg = PEPSOptimize(; - boundary_alg=ctm_alg, - tol=1e-3, - gradient_alg=LinSolver(; iterscheme=:diffgauge), - symmetrization=RotateReflect(), -) - -# initialize states -Random.seed!(91283219347) -H = j1_j2(InfiniteSquare(); J2=0.25) -psi_init = product_peps(2, χbond; noise_amp=1e-1) -psi_init = symmetrize!(psi_init, RotateReflect()) -env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg); - -# find fixedpoint -result = fixedpoint(psi_init, H, opt_alg, env_init) - -## -unitcell = (2, 2) -H = pwave_superconductor(InfiniteSquare(unitcell...)) -Dbond = 2 -χenv = 16 -ctm_alg = SimultaneousCTMRG() -opt_alg = PEPSOptimize(; - boundary_alg=ctm_alg, - maxiter=10, - gradient_alg=LinSolver(; iterscheme=:diffgauge), - # stepsize=WolfePowellLinesearch(), - stepsize=ConstantLength(1.5), - memory_size=4, -) - -# initialize states -Pspace = Vect[FermionParity](0 => 1, 1 => 1) -Vspace = Vect[FermionParity](0 => Dbond ÷ 2, 1 => Dbond ÷ 2) -Envspace = Vect[FermionParity](0 => χenv ÷ 2, 1 => χenv ÷ 2) -Random.seed!(91283219347) -psi_init = InfinitePEPS(Pspace, Vspace, Vspace; unitcell) -env_init, = leading_boundary(CTMRGEnv(psi_init, Envspace), psi_init, ctm_alg); - -# find fixedpoint -peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init); -@show E / 4 - -# comparison with Gaussian PEPS minimum at D=2 on 1000x1000 square lattice with aPBC -@test E / prod(size(psi_init)) ≈ -2.6241 atol = 5e-2