line_search.py 2.13 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

19
import abc
Martin Reinecke's avatar
Martin Reinecke committed
20
from ..utilities import NiftyMetaBase
21

22

Martin Reinecke's avatar
Martin Reinecke committed
23
class LineSearch(NiftyMetaBase()):
24
    """Class for determining the optimal step size along some descent direction.
25

Martin Reinecke's avatar
Martin Reinecke committed
26 27 28 29
    Parameters
    ----------
    preferred_initial_step_size : float, optional
        Newton-based methods should intialize this to 1.
30
    """
31

Martin Reinecke's avatar
Martin Reinecke committed
32 33
    def __init__(self, preferred_initial_step_size=None):
        self.preferred_initial_step_size = preferred_initial_step_size
34 35

    @abc.abstractmethod
36
    def perform_line_search(self, energy, pk, f_k_minus_1=None):
Martin Reinecke's avatar
Martin Reinecke committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
        """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
57 58
        bool
            whether the line search was considered successful or not
Martin Reinecke's avatar
Martin Reinecke committed
59
        """
60
        raise NotImplementedError