1*a4963045SJacob Faibussowitsch #pragma once 2a7e14dcfSSatish Balay 3a7e14dcfSSatish Balay /* Context for an Armijo (nonmonotone) linesearch for unconstrained 4a7e14dcfSSatish Balay minimization. 5a7e14dcfSSatish Balay 6a7e14dcfSSatish Balay Given a function f, the current iterate x, and a descent direction d: 7a7e14dcfSSatish Balay Find the smallest i in 0, 1, 2, ..., such that: 8a7e14dcfSSatish Balay 9a7e14dcfSSatish Balay f(x + (beta**i)d) <= f(x) + (sigma*beta**i)<grad f(x),d> 10a7e14dcfSSatish Balay 11a7e14dcfSSatish Balay The nonmonotone modification of this linesearch replaces the f(x) term 12a7e14dcfSSatish Balay with a reference value, R, and seeks to find the smallest i such that: 13a7e14dcfSSatish Balay 14a7e14dcfSSatish Balay f(x + (beta**i)d) <= R + (sigma*beta**i)<grad f(x),d> 15a7e14dcfSSatish Balay 16a7e14dcfSSatish Balay This modification does effect neither the convergence nor rate of 17a7e14dcfSSatish Balay convergence of an algorithm when R is chosen appropriately. Essentially, 18a7e14dcfSSatish Balay R must decrease on average in some sense. The benefit of a nonmonotone 19a7e14dcfSSatish Balay linesearch is that local minimizers can be avoided (by allowing increase 20a7e14dcfSSatish Balay in function value), and typically, fewer iterations are performed in 21a7e14dcfSSatish Balay the main code. 22a7e14dcfSSatish Balay 23a7e14dcfSSatish Balay The reference value is chosen based upon some historical information 24a7e14dcfSSatish Balay consisting of function values for previous iterates. The amount of 25a7e14dcfSSatish Balay historical information used is determined by the memory size where the 26a7e14dcfSSatish Balay memory is used to store the previous function values. The memory is 27a7e14dcfSSatish Balay initialized to alpha*f(x^0) for some alpha >= 1, with alpha=1 signifying 28a7e14dcfSSatish Balay that we always force decrease from the initial point. 29a7e14dcfSSatish Balay 30a7e14dcfSSatish Balay The reference value can be the maximum value in the memory or can be 31a7e14dcfSSatish Balay chosen to provide some mean descent. Elements are removed from the 32a7e14dcfSSatish Balay memory with a replacement policy that either removes the oldest 33a7e14dcfSSatish Balay value in the memory (FIFO), or the largest value in the memory (MRU). 34a7e14dcfSSatish Balay 35a7e14dcfSSatish Balay Additionally, we can add a watchdog strategy to the search, which 36a7e14dcfSSatish Balay essentially accepts small directions and only checks the nonmonotonic 37a7e14dcfSSatish Balay descent criteria every m-steps. This strategy is NOT implemented in 38a7e14dcfSSatish Balay the code. 39a7e14dcfSSatish Balay 40a7e14dcfSSatish Balay Finally, care must be taken when steepest descent directions are used. 41f51b456fSStefano Zampini For example, when the Newton direction does not satisfy a sufficient 42a7e14dcfSSatish Balay descent criteria. The code will apply the same test regardless of 43a7e14dcfSSatish Balay the direction. This type of search may not be appropriate for all 44a7e14dcfSSatish Balay algorithms. For example, when a gradient direction is used, we may 45a7e14dcfSSatish Balay want to revert to the best point found and reset the memory so that 46a7e14dcfSSatish Balay we stay in an appropriate level set after using a gradient steps. 47a7e14dcfSSatish Balay This type of search is currently NOT supported by the code. 48a7e14dcfSSatish Balay 49a7e14dcfSSatish Balay References: 50606c0280SSatish Balay + * - Armijo, "Minimization of Functions Having Lipschitz Continuous 51a7e14dcfSSatish Balay First-Partial Derivatives," Pacific Journal of Mathematics, volume 16, 52a7e14dcfSSatish Balay pages 1-3, 1966. 53606c0280SSatish Balay . * - Ferris and Lucidi, "Nonmonotone Stabilization Methods for Nonlinear 54a7e14dcfSSatish Balay Equations," Journal of Optimization Theory and Applications, volume 81, 55a7e14dcfSSatish Balay pages 53-71, 1994. 56606c0280SSatish Balay . * - Grippo, Lampariello, and Lucidi, "A Nonmonotone Line Search Technique 57a7e14dcfSSatish Balay for Newton's Method," SIAM Journal on Numerical Analysis, volume 23, 58a7e14dcfSSatish Balay pages 707-716, 1986. 59606c0280SSatish Balay - * - Grippo, Lampariello, and Lucidi, "A Class of Nonmonotone Stabilization 60a7e14dcfSSatish Balay Methods in Unconstrained Optimization," Numerische Mathematik, volume 59, 61a7e14dcfSSatish Balay pages 779-805, 1991. */ 62af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h> 63a7e14dcfSSatish Balay typedef struct { 64a7e14dcfSSatish Balay PetscReal *memory; 65a7e14dcfSSatish Balay 66a7e14dcfSSatish Balay PetscReal alpha; /* Initial reference factor >= 1 */ 67a7e14dcfSSatish Balay PetscReal beta; /* Steplength determination < 1 */ 68a7e14dcfSSatish Balay PetscReal beta_inf; /* Steplength determination < 1 */ 69a7e14dcfSSatish Balay PetscReal sigma; /* Acceptance criteria < 1) */ 70a7e14dcfSSatish Balay PetscReal minimumStep; /* Minimum step size */ 71a7e14dcfSSatish Balay PetscReal lastReference; /* Reference value of last iteration */ 72a7e14dcfSSatish Balay 73a7e14dcfSSatish Balay PetscInt memorySize; /* Number of functions kept in memory */ 74a7e14dcfSSatish Balay PetscInt current; /* Current element for FIFO */ 75a7e14dcfSSatish Balay PetscInt referencePolicy; /* Integer for reference calculation rule */ 76a7e14dcfSSatish Balay PetscInt replacementPolicy; /* Policy for replacing values in memory */ 77a7e14dcfSSatish Balay 78a7e14dcfSSatish Balay PetscBool nondescending; 79a7e14dcfSSatish Balay PetscBool memorySetup; 80a7e14dcfSSatish Balay 81a7e14dcfSSatish Balay Vec x; /* Maintain reference to variable vector to check for changes */ 82a7e14dcfSSatish Balay Vec work; 838caf6e8cSBarry Smith } TaoLineSearch_ARMIJO; 84