Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ift
NIFTy
Commits
bf190bbd
Commit
bf190bbd
authored
Jul 22, 2019
by
Philipp Arras
Browse files
Unify notation in conjugate gradient and NewtonCG
parent
b2fa7769
Pipeline
#52268
passed with stages
in 8 minutes and 32 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
nifty5/minimization/conjugate_gradient.py
View file @
bf190bbd
...
@@ -74,27 +74,27 @@ class ConjugateGradient(Minimizer):
...
@@ -74,27 +74,27 @@ class ConjugateGradient(Minimizer):
if
previous_gamma
==
0
:
if
previous_gamma
==
0
:
return
energy
,
controller
.
CONVERGED
return
energy
,
controller
.
CONVERGED
i
ter
=
0
i
i
=
0
while
True
:
while
True
:
q
=
energy
.
apply_metric
(
d
)
q
=
energy
.
apply_metric
(
d
)
ddotq
=
d
.
vdot
(
q
).
real
curv
=
d
.
vdot
(
q
).
real
if
ddotq
==
0.
:
if
curv
==
0.
:
logger
.
error
(
"Error: ConjugateGradient:
ddotq
==0."
)
logger
.
error
(
"Error: ConjugateGradient:
curv
==0."
)
return
energy
,
controller
.
ERROR
return
energy
,
controller
.
ERROR
alpha
=
previous_gamma
/
ddotq
alpha
=
previous_gamma
/
curv
if
alpha
<
0
:
if
alpha
<
0
:
logger
.
error
(
"Error: ConjugateGradient: alpha<0."
)
logger
.
error
(
"Error: ConjugateGradient: alpha<0."
)
return
energy
,
controller
.
ERROR
return
energy
,
controller
.
ERROR
i
ter
+=
1
i
i
+=
1
if
i
ter
<
self
.
_nreset
:
if
i
i
<
self
.
_nreset
:
r
=
r
-
q
*
alpha
r
=
r
-
q
*
alpha
energy
=
energy
.
at_with_grad
(
energy
.
position
-
alpha
*
d
,
r
)
energy
=
energy
.
at_with_grad
(
energy
.
position
-
alpha
*
d
,
r
)
else
:
else
:
energy
=
energy
.
at
(
energy
.
position
-
alpha
*
d
)
energy
=
energy
.
at
(
energy
.
position
-
alpha
*
d
)
r
=
energy
.
gradient
r
=
energy
.
gradient
i
ter
=
0
i
i
=
0
s
=
r
if
preconditioner
is
None
else
preconditioner
(
r
)
s
=
r
if
preconditioner
is
None
else
preconditioner
(
r
)
...
...
nifty5/minimization/descent_minimizers.py
View file @
bf190bbd
...
@@ -162,32 +162,29 @@ class NewtonCG(DescentMinimizer):
...
@@ -162,32 +162,29 @@ class NewtonCG(DescentMinimizer):
def
get_descent_direction
(
self
,
energy
):
def
get_descent_direction
(
self
,
energy
):
float64eps
=
np
.
finfo
(
np
.
float64
).
eps
float64eps
=
np
.
finfo
(
np
.
float64
).
eps
grad
=
energy
.
gradient
r
=
energy
.
gradient
maggrad
=
abs
(
grad
).
sum
()
maggrad
=
abs
(
r
).
sum
()
termcond
=
np
.
min
([
0.5
,
np
.
sqrt
(
maggrad
)])
*
maggrad
termcond
=
np
.
min
([
0.5
,
np
.
sqrt
(
maggrad
)])
*
maggrad
xsupi
=
energy
.
position
*
0
pos
=
energy
.
position
*
0
ri
=
grad
d
=
-
r
psupi
=
-
ri
previous_gamma
=
r
.
vdot
(
r
)
dri0
=
ri
.
vdot
(
ri
)
ii
=
0
i
=
0
while
True
:
while
True
:
if
abs
(
ri
).
sum
()
<=
termcond
:
if
abs
(
r
).
sum
()
<=
termcond
:
return
xsupi
return
pos
Ap
=
energy
.
apply_metric
(
psupi
)
q
=
energy
.
apply_metric
(
d
)
# check curvature
curv
=
d
.
vdot
(
q
)
curv
=
psupi
.
vdot
(
Ap
)
if
0
<=
curv
<=
3
*
float64eps
:
if
0
<=
curv
<=
3
*
float64eps
:
return
xsupi
return
pos
el
if
curv
<
0
:
if
curv
<
0
:
return
xsupi
if
i
>
0
else
(
dri0
/
curv
)
*
grad
return
pos
if
i
i
>
0
else
previous_gamma
/
curv
*
r
alpha
i
=
dri0
/
curv
alpha
=
previous_gamma
/
curv
xsupi
=
xsupi
+
alpha
i
*
psupi
pos
=
pos
+
alpha
*
d
r
i
=
r
i
+
alpha
i
*
Ap
r
=
r
+
alpha
*
q
dri1
=
r
i
.
vdot
(
r
i
)
gamma
=
r
.
vdot
(
r
)
psupi
=
(
dri1
/
dri0
)
*
psupi
-
r
i
d
=
(
gamma
/
previous_gamma
)
*
d
-
r
i
+=
1
i
i
+=
1
dri0
=
dri1
# update numpy.dot(ri,ri) for next time.
previous_gamma
=
gamma
# curvature keeps increasing, bail out
# curvature keeps increasing, bail out
raise
ValueError
(
"Warning: CG iterations didn't converge. "
raise
ValueError
(
"Warning: CG iterations didn't converge. "
...
...
Write
Preview
Supports
Markdown
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