Advanced Computing Platform for Theoretical Physics
Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Lei Wang
dTRG
Commits
400ab95a
Commit
400ab95a
authored
Dec 11, 2018
by
Lei Wang
Browse files
correct symmetry
parent
5d8e8921
Changes
3
Hide whitespace changes
Inline
Side-by-side
ctmrg.py
View file @
400ab95a
...
@@ -4,7 +4,10 @@ from itertools import permutations
...
@@ -4,7 +4,10 @@ from itertools import permutations
def
ctmrg
(
T
,
d
,
Dcut
,
no_iter
):
def
ctmrg
(
T
,
d
,
Dcut
,
no_iter
):
#symmetrize
#symmetrize
T
=
(
T
+
T
.
permute
(
3
,
1
,
2
,
0
)
+
T
.
permute
(
0
,
2
,
1
,
3
)
+
T
.
permute
(
2
,
3
,
0
,
1
)
+
T
.
permute
(
1
,
0
,
3
,
2
))
/
5.
T
=
(
T
+
T
.
permute
(
3
,
1
,
2
,
0
))
/
2.
T
=
(
T
+
T
.
permute
(
0
,
2
,
1
,
3
))
/
2.
T
=
(
T
+
T
.
permute
(
2
,
3
,
0
,
1
))
/
2.
T
=
(
T
+
T
.
permute
(
1
,
0
,
3
,
2
))
/
2.
lnZ
=
0.0
lnZ
=
0.0
truncation_error
=
0.0
truncation_error
=
0.0
...
...
dimer_covering.py
View file @
400ab95a
...
@@ -35,9 +35,11 @@ if __name__=='__main__':
...
@@ -35,9 +35,11 @@ if __name__=='__main__':
B
=
0.01
*
torch
.
randn
(
d
,
D
,
D
,
D
,
D
,
dtype
=
dtype
,
device
=
device
)
B
=
0.01
*
torch
.
randn
(
d
,
D
,
D
,
D
,
D
,
dtype
=
dtype
,
device
=
device
)
#symmetrize
#symmetrize
A
=
(
B
+
B
.
permute
(
0
,
4
,
2
,
3
,
1
)
+
B
.
permute
(
0
,
1
,
3
,
2
,
4
)
+
B
.
permute
(
0
,
3
,
4
,
1
,
2
)
+
B
.
permute
(
0
,
2
,
1
,
4
,
3
))
/
5.
B
=
(
B
+
B
.
permute
(
0
,
4
,
2
,
3
,
1
))
/
2.
A
=
A
.
view
(
d
,
D
**
4
)
B
=
(
B
+
B
.
permute
(
0
,
1
,
3
,
2
,
4
))
/
2.
A
=
torch
.
nn
.
Parameter
(
A
)
B
=
(
B
+
B
.
permute
(
0
,
3
,
4
,
1
,
2
))
/
2.
B
=
(
B
+
B
.
permute
(
0
,
2
,
1
,
4
,
3
))
/
2.
A
=
torch
.
nn
.
Parameter
(
B
.
view
(
d
,
D
**
4
))
#dimer covering
#dimer covering
T
=
torch
.
zeros
(
d
,
d
,
d
,
d
,
d
,
d
,
dtype
=
dtype
,
device
=
device
)
T
=
torch
.
zeros
(
d
,
d
,
d
,
d
,
d
,
d
,
dtype
=
dtype
,
device
=
device
)
...
@@ -63,12 +65,12 @@ if __name__=='__main__':
...
@@ -63,12 +65,12 @@ if __name__=='__main__':
lnT
,
error1
=
contraction
(
T1
,
D
**
2
*
d
,
Dcut
,
Niter
)
lnT
,
error1
=
contraction
(
T1
,
D
**
2
*
d
,
Dcut
,
Niter
)
lnZ
,
error2
=
contraction
(
T2
,
D
**
2
,
Dcut
,
Niter
)
lnZ
,
error2
=
contraction
(
T2
,
D
**
2
,
Dcut
,
Niter
)
loss
=
(
-
lnT
+
lnZ
)
loss
=
(
-
lnT
+
lnZ
)
print
(
'contraction done {:.3f}s'
.
format
(
time
.
time
()
-
t0
))
print
(
'
contraction done {:.3f}s'
.
format
(
time
.
time
()
-
t0
))
print
(
'loss, error'
,
loss
.
item
(),
error1
.
item
(),
error2
.
item
())
print
(
'
loss, error'
,
loss
.
item
(),
error1
.
item
(),
error2
.
item
())
t0
=
time
.
time
()
t0
=
time
.
time
()
loss
.
backward
()
loss
.
backward
()
print
(
'backward done {:.3f}s'
.
format
(
time
.
time
()
-
t0
))
print
(
'
backward done {:.3f}s'
.
format
(
time
.
time
()
-
t0
))
return
loss
return
loss
for
epoch
in
range
(
100
):
for
epoch
in
range
(
100
):
...
...
ising.py
View file @
400ab95a
...
@@ -15,7 +15,8 @@ if __name__=='__main__':
...
@@ -15,7 +15,8 @@ if __name__=='__main__':
parser
.
add_argument
(
"-D"
,
type
=
int
,
default
=
2
,
help
=
"D"
)
parser
.
add_argument
(
"-D"
,
type
=
int
,
default
=
2
,
help
=
"D"
)
parser
.
add_argument
(
"-Dcut"
,
type
=
int
,
default
=
20
,
help
=
"Dcut"
)
parser
.
add_argument
(
"-Dcut"
,
type
=
int
,
default
=
20
,
help
=
"Dcut"
)
parser
.
add_argument
(
"-beta"
,
type
=
float
,
default
=
0.22
,
help
=
"beta"
)
parser
.
add_argument
(
"-beta"
,
type
=
float
,
default
=
0.22
,
help
=
"beta"
)
parser
.
add_argument
(
"-Niter"
,
type
=
int
,
default
=
20
,
help
=
"Niter"
)
parser
.
add_argument
(
"-Niter"
,
type
=
int
,
default
=
32
,
help
=
"Niter"
)
parser
.
add_argument
(
"-Nepochs"
,
type
=
int
,
default
=
100
,
help
=
"Nepochs"
)
parser
.
add_argument
(
"-float32"
,
action
=
'store_true'
,
help
=
"use float32"
)
parser
.
add_argument
(
"-float32"
,
action
=
'store_true'
,
help
=
"use float32"
)
parser
.
add_argument
(
"-cuda"
,
type
=
int
,
default
=-
1
,
help
=
"use GPU"
)
parser
.
add_argument
(
"-cuda"
,
type
=
int
,
default
=-
1
,
help
=
"use GPU"
)
...
@@ -32,9 +33,11 @@ if __name__=='__main__':
...
@@ -32,9 +33,11 @@ if __name__=='__main__':
B
=
0.01
*
torch
.
randn
(
d
,
D
,
D
,
D
,
D
,
dtype
=
dtype
,
device
=
device
)
B
=
0.01
*
torch
.
randn
(
d
,
D
,
D
,
D
,
D
,
dtype
=
dtype
,
device
=
device
)
#symmetrize
#symmetrize
A
=
(
B
+
B
.
permute
(
0
,
4
,
2
,
3
,
1
)
+
B
.
permute
(
0
,
1
,
3
,
2
,
4
)
+
B
.
permute
(
0
,
3
,
4
,
1
,
2
)
+
B
.
permute
(
0
,
2
,
1
,
4
,
3
))
/
5.
B
=
(
B
+
B
.
permute
(
0
,
4
,
2
,
3
,
1
))
/
2.
A
=
A
.
view
(
d
,
D
**
4
)
B
=
(
B
+
B
.
permute
(
0
,
1
,
3
,
2
,
4
))
/
2.
A
=
torch
.
nn
.
Parameter
(
A
)
B
=
(
B
+
B
.
permute
(
0
,
3
,
4
,
1
,
2
))
/
2.
B
=
(
B
+
B
.
permute
(
0
,
2
,
1
,
4
,
3
))
/
2.
A
=
torch
.
nn
.
Parameter
(
B
.
view
(
d
,
D
**
4
))
#3D Ising
#3D Ising
c
=
torch
.
sqrt
(
torch
.
cosh
(
beta
))
c
=
torch
.
sqrt
(
torch
.
cosh
(
beta
))
...
@@ -65,7 +68,7 @@ if __name__=='__main__':
...
@@ -65,7 +68,7 @@ if __name__=='__main__':
print
(
' backward done {:.3f}s'
.
format
(
time
.
time
()
-
t0
))
print
(
' backward done {:.3f}s'
.
format
(
time
.
time
()
-
t0
))
return
loss
return
loss
for
epoch
in
range
(
100
):
for
epoch
in
range
(
args
.
Nepochs
):
loss
=
optimizer
.
step
(
closure
)
loss
=
optimizer
.
step
(
closure
)
En
=
beta
.
grad
.
item
()
# En = -d lnZ / d beta
En
=
beta
.
grad
.
item
()
# En = -d lnZ / d beta
print
(
'epoch, free energy, energy'
,
epoch
,
loss
.
item
(),
En
)
print
(
'epoch, free energy, energy'
,
epoch
,
loss
.
item
(),
En
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment