line_search.py 2.23 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Theo Steininger's avatar
Theo Steininger committed
13
#
Martin Reinecke's avatar
Martin Reinecke committed
14
# Copyright(C) 2013-2018 Max-Planck-Society
Theo Steininger's avatar
Theo Steininger committed
15
16
17
#
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.
18

Martin Reinecke's avatar
Martin Reinecke committed
19
from __future__ import absolute_import, division, print_function
20

21
import abc
22
23

from ..compat import *
Martin Reinecke's avatar
Martin Reinecke committed
24
from ..utilities import NiftyMetaBase
25

26

Martin Reinecke's avatar
Martin Reinecke committed
27
class LineSearch(NiftyMetaBase()):
28
29
    """Class for determining the optimal step size along some descent
       direction.
30

Martin Reinecke's avatar
Martin Reinecke committed
31
32
33
34
    Parameters
    ----------
    preferred_initial_step_size : float, optional
        Newton-based methods should intialize this to 1.
35
    """
36

Martin Reinecke's avatar
Martin Reinecke committed
37
38
    def __init__(self, preferred_initial_step_size=None):
        self.preferred_initial_step_size = preferred_initial_step_size
39
40

    @abc.abstractmethod
41
    def perform_line_search(self, energy, pk, f_k_minus_1=None):
Martin Reinecke's avatar
Martin Reinecke committed
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
        """Find step size and advance.

        Determines a good step size and advances the current estimate
        by this step size in the search direction.

        Parameters
        ----------
        energy : Energy
            Energy object from which we will calculate the energy and the
            gradient at a specific point.
        pk : Field
            Vector pointing into the search direction.
        f_k_minus_1 : float, optional
            Value of the fuction (which is being minimized) at the k-1
            iteration of the line search procedure. (Default: None)

        Returns
        -------
        Energy
            The new Energy object on the new position.
Martin Reinecke's avatar
stage 1  
Martin Reinecke committed
62
63
        bool
            whether the line search was considered successful or not
Martin Reinecke's avatar
Martin Reinecke committed
64
        """
65
        raise NotImplementedError