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
On Thursday, 7th July from 1 to 3 pm there will be a maintenance with a short downtime of GitLab.
Open sidebar
Neel Shah
NIFTy
Commits
9327b752
Commit
9327b752
authored
Sep 26, 2019
by
Martin Reinecke
Browse files
cleaner interface for get_descent_direction
parent
e9284196
Changes
1
Hide whitespace changes
Inline
Side-by-side
nifty5/minimization/descent_minimizers.py
View file @
9327b752
...
...
@@ -85,7 +85,8 @@ class DescentMinimizer(Minimizer):
# compute a step length that reduces energy.value sufficiently
new_energy
,
success
=
self
.
line_searcher
.
perform_line_search
(
energy
=
energy
,
pk
=
self
.
get_descent_direction
(
energy
,
f_k_minus_1
),
energy
=
energy
,
pk
=
self
.
get_descent_direction
(
energy
,
f_k_minus_1
),
f_k_minus_1
=
f_k_minus_1
)
if
not
success
:
self
.
reset
()
...
...
@@ -109,7 +110,7 @@ class DescentMinimizer(Minimizer):
def
reset
(
self
):
pass
def
get_descent_direction
(
self
,
energy
):
def
get_descent_direction
(
self
,
energy
,
old_value
=
None
):
"""Calculates the next descent direction.
Parameters
...
...
@@ -118,6 +119,10 @@ class DescentMinimizer(Minimizer):
An instance of the Energy class which shall be minimized. The
position of `energy` is used as the starting point of minimization.
old_value : float
if provided, this must be the value of the energy in the previous
step.
Returns
-------
Field
...
...
@@ -133,7 +138,7 @@ class SteepestDescent(DescentMinimizer):
functional's gradient for minimization.
"""
def
get_descent_direction
(
self
,
energy
,
_
):
def
get_descent_direction
(
self
,
energy
,
_
=
None
):
return
-
energy
.
gradient
...
...
@@ -150,7 +155,7 @@ class RelaxedNewton(DescentMinimizer):
super
(
RelaxedNewton
,
self
).
__init__
(
controller
=
controller
,
line_searcher
=
line_searcher
)
def
get_descent_direction
(
self
,
energy
,
_
):
def
get_descent_direction
(
self
,
energy
,
_
=
None
):
return
-
energy
.
metric
.
inverse_times
(
energy
.
gradient
)
...
...
@@ -171,12 +176,12 @@ class NewtonCG(DescentMinimizer):
self
.
_nreset
=
nreset
self
.
_file_name
=
file_name
def
get_descent_direction
(
self
,
energy
,
f_k_minus_1
):
if
f_k_minus_1
is
None
:
def
get_descent_direction
(
self
,
energy
,
old_value
=
None
):
if
old_value
is
None
:
ic
=
GradientNormController
(
iteration_limit
=
5
)
else
:
alpha
=
0.1
ediff
=
alpha
*
(
f_k_minus_1
-
energy
.
value
)
ediff
=
alpha
*
(
old_value
-
energy
.
value
)
ic
=
AbsDeltaEnergyController
(
ediff
,
iteration_limit
=
200
,
name
=
self
.
_name
,
file_name
=
self
.
_file_name
)
...
...
@@ -205,7 +210,7 @@ class L_BFGS(DescentMinimizer):
self
.
_s
=
[
None
]
*
self
.
max_history_length
self
.
_y
=
[
None
]
*
self
.
max_history_length
def
get_descent_direction
(
self
,
energy
,
_
):
def
get_descent_direction
(
self
,
energy
,
_
=
None
):
x
=
energy
.
position
s
=
self
.
_s
y
=
self
.
_y
...
...
@@ -268,7 +273,7 @@ class VL_BFGS(DescentMinimizer):
def
reset
(
self
):
self
.
_information_store
=
None
def
get_descent_direction
(
self
,
energy
,
_
):
def
get_descent_direction
(
self
,
energy
,
_
=
None
):
x
=
energy
.
position
gradient
=
energy
.
gradient
# initialize the information store if it doesn't already exist
...
...
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