@@ -54,56 +54,65 @@ include("algorithms/time_evolution/simpleupdate.jl")
5454
5555include(" algorithms/toolbox.jl" )
5656
57- include(" algorithms/peps_opt.jl" )
58-
5957include(" utility/symmetrization.jl" )
6058
59+ include(" algorithms/optimization/fixed_point_differentiation.jl" )
60+ include(" algorithms/optimization/peps_optimization.jl" )
61+
6162"""
6263 module Defaults
63- const ctmrg_maxiter = 100
64- const ctmrg_miniter = 4
65- const ctmrg_tol = 1e-8
66- const fpgrad_maxiter = 30
67- const fpgrad_tol = 1e-6
68- const reuse_env = true
69- const trscheme = FixedSpaceTruncation()
70- const fwd_alg = TensorKit.SDD()
71- const rrule_alg = Arnoldi(; tol=1e-2fpgrad_tol, krylovdim=48, verbosity=-1)
72- const svd_alg = SVDAdjoint(; fwd_alg, rrule_alg)
73- const projector_alg_type = HalfInfiniteProjector
74- const projector_alg = projector_alg_type(svd_alg, trscheme, 2)
75- const ctmrg_alg = SimultaneousCTMRG(
76- ctmrg_tol, ctmrg_maxiter, ctmrg_miniter, 2, projector_alg
77- )
78- const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=3)
79- const gradient_linsolver = KrylovKit.BiCGStab(;
80- maxiter=Defaults.fpgrad_maxiter, tol=Defaults.fpgrad_tol
81- )
82- const iterscheme = :fixed
83- const gradient_alg = LinSolver(; solver=gradient_linsolver, iterscheme)
84- const scheduler = Ref{Scheduler}(Threads.nthreads() == 1 ? SerialScheduler() : DynamicScheduler())
85- end
8664
87- Module containing default values that represent typical algorithm parameters .
65+ Module containing default algorithm parameter values and arguments .
8866
89- - `ctmrg_maxiter`: Maximal number of CTMRG iterations per run
90- - `ctmrg_miniter`: Minimal number of CTMRG carried out
91- - `ctmrg_tol`: Tolerance checking singular value and norm convergence
92- - `fpgrad_maxiter`: Maximal number of iterations for computing the CTMRG fixed-point gradient
93- - `fpgrad_tol`: Convergence tolerance for the fixed-point gradient iteration
94- - `reuse_env`: If `true`, the current optimization step is initialized on the previous environment
95- - `trscheme`: Truncation scheme for SVDs and other decompositions
96- - `fwd_alg`: SVD algorithm that is used in the forward pass
67+ # CTMRG
68+ - `ctmrg_tol=1e-8`: Tolerance checking singular value and norm convergence
69+ - `ctmrg_maxiter=100`: Maximal number of CTMRG iterations per run
70+ - `ctmrg_miniter=4`: Minimal number of CTMRG carried out
71+ - `trscheme=FixedSpaceTruncation()`: Truncation scheme for SVDs and other decompositions
72+ - `fwd_alg=TensorKit.SDD()`: SVD algorithm that is used in the forward pass
9773- `rrule_alg`: Reverse-rule for differentiating that SVD
98- - `svd_alg`: Combination of `fwd_alg` and `rrule_alg`
99- - `projector_alg_type`: Default type of projector algorithm
74+
75+ ```
76+ rrule_alg = Arnoldi(; tol=ctmrg_tol, krylovdim=48, verbosity=-1)
77+ ```
78+
79+ - `svd_alg=SVDAdjoint(; fwd_alg, rrule_alg)`: Combination of `fwd_alg` and `rrule_alg`
80+ - `projector_alg_type=HalfInfiniteProjector`: Default type of projector algorithm
10081- `projector_alg`: Algorithm to compute CTMRG projectors
82+
83+ ```
84+ projector_alg = projector_alg_type(; svd_alg, trscheme, verbosity=0)
85+ ```
86+
10187- `ctmrg_alg`: Algorithm for performing CTMRG runs
102- - `optimizer`: Optimization algorithm for PEPS ground-state optimization
88+
89+ ```
90+ ctmrg_alg = SimultaneousCTMRG(
91+ ctmrg_tol, ctmrg_maxiter, ctmrg_miniter, 2, projector_alg
92+ )
93+ ```
94+
95+ # Optimization
96+ - `fpgrad_maxiter=30`: Maximal number of iterations for computing the CTMRG fixed-point gradient
97+ - `fpgrad_tol=1e-6`: Convergence tolerance for the fixed-point gradient iteration
98+ - `iterscheme=:fixed`: Scheme for differentiating one CTMRG iteration
10399- `gradient_linsolver`: Default linear solver for the `LinSolver` gradient algorithm
104- - `iterscheme`: Scheme for differentiating one CTMRG iteration
100+
101+ ```
102+ gradient_linsolver=KrylovKit.BiCGStab(; maxiter=fpgrad_maxiter, tol=fpgrad_tol)
103+ ```
104+
105105- `gradient_alg`: Algorithm to compute the gradient fixed-point
106- - `scheduler`: Multi-threading scheduler which can be accessed via `set_scheduler!`
106+
107+ ```
108+ gradient_alg = LinSolver(; solver=gradient_linsolver, iterscheme)
109+ ```
110+
111+ - `reuse_env=true`: If `true`, the current optimization step is initialized on the previous environment
112+ - `optimizer=LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=3)`: Default `OptimKit.OptimizerAlgorithm` for PEPS optimization
113+
114+ # OhMyThreads scheduler
115+ - `scheduler=Ref{Scheduler}(...)`: Multi-threading scheduler which can be accessed via `set_scheduler!`
107116"""
108117module Defaults
109118 using TensorKit, KrylovKit, OptimKit, OhMyThreads
@@ -113,28 +122,30 @@ module Defaults
113122 SVDAdjoint,
114123 HalfInfiniteProjector,
115124 SimultaneousCTMRG
125+
126+ # CTMRG
116127 const ctmrg_tol = 1e-8
117128 const ctmrg_maxiter = 100
118129 const ctmrg_miniter = 4
119- const fpgrad_maxiter = 30
120- const fpgrad_tol = 1e-6
121130 const sparse = false
122- const reuse_env = true
123131 const trscheme = FixedSpaceTruncation()
124132 const fwd_alg = TensorKit. SDD()
125- const rrule_alg = Arnoldi(; tol= 1e-2 fpgrad_tol , krylovdim= 48 , verbosity= - 1 )
133+ const rrule_alg = Arnoldi(; tol= ctmrg_tol , krylovdim= 48 , verbosity= - 1 )
126134 const svd_alg = SVDAdjoint(; fwd_alg, rrule_alg)
127135 const projector_alg_type = HalfInfiniteProjector
128- const projector_alg = projector_alg_type(svd_alg, trscheme, 2 )
136+ const projector_alg = projector_alg_type(; svd_alg, trscheme, verbosity = 0 )
129137 const ctmrg_alg = SimultaneousCTMRG(
130138 ctmrg_tol, ctmrg_maxiter, ctmrg_miniter, 2 , projector_alg
131139 )
132- const optimizer = LBFGS(32 ; maxiter= 100 , gradtol= 1e-4 , verbosity= 3 )
133- const gradient_linsolver = KrylovKit. BiCGStab(;
134- maxiter= Defaults. fpgrad_maxiter, tol= Defaults. fpgrad_tol
135- )
140+
141+ # Optimization
142+ const fpgrad_maxiter = 30
143+ const fpgrad_tol = 1e-6
144+ const gradient_linsolver = KrylovKit. BiCGStab(; maxiter= fpgrad_maxiter, tol= fpgrad_tol)
136145 const iterscheme = :fixed
137146 const gradient_alg = LinSolver(; solver= gradient_linsolver, iterscheme)
147+ const reuse_env = true
148+ const optimizer = LBFGS(32 ; maxiter= 100 , gradtol= 1e-4 , verbosity= 3 )
138149
139150 # OhMyThreads scheduler defaults
140151 const scheduler = Ref{Scheduler}()
@@ -187,7 +198,7 @@ export SVDAdjoint, IterSVD
187198export CTMRGEnv, SequentialCTMRG, SimultaneousCTMRG
188199export FixedSpaceTruncation, HalfInfiniteProjector, FullInfiniteProjector
189200export LocalOperator
190- export expectation_value, costfun , product_peps, correlation_length
201+ export expectation_value, cost_function , product_peps, correlation_length
191202export leading_boundary
192203export PEPSOptimize, GeomSum, ManualIter, LinSolver
193204export fixedpoint
0 commit comments