Actual source code: ntrimpl.h
1: /*
2: Context for a Newton trust region method (unconstrained minimization)
3: */
5: #pragma once
6: #include <petsc/private/taoimpl.h>
8: typedef struct {
9: Mat M;
10: PC bfgs_pre;
12: Vec D;
13: Vec W;
15: PetscReal radius;
17: /* Parameters when updating the trust-region radius based on reduction
19: kappa = ared / pred
20: if kappa < eta1 (very bad step)
21: radius = alpha1 * min(norm(d), radius)
22: elif kappa < eta2 (bad step)
23: radius = alpha2 * min(norm(d), radius)
24: elif kappa < eta3 (okay step)
25: radius = alpha3 * radius;
26: elif kappa < eta4 (good step)
27: radius = max(alpha4 * norm(d), radius)
28: else (very good step)
29: radius = max(alpha5 * norm(d), radius)
30: fi
31: */
33: PetscReal eta1; /* used to compute trust-region radius */
34: PetscReal eta2; /* used to compute trust-region radius */
35: PetscReal eta3; /* used to compute trust-region radius */
36: PetscReal eta4; /* used to compute trust-region radius */
38: PetscReal alpha1; /* factor used for trust-region update */
39: PetscReal alpha2; /* factor used for trust-region update */
40: PetscReal alpha3; /* factor used for trust-region update */
41: PetscReal alpha4; /* factor used for trust-region update */
42: PetscReal alpha5; /* factor used for trust-region update */
44: /* Parameters when updating the trust-region radius based on interpolation
46: kappa = ared / pred
47: if kappa >= 1.0 - mu1 (very good step)
48: choose tau in [gamma3, gamma4]
49: radius = max(tau * norm(d), radius)
50: elif kappa >= 1.0 - mu2 (good step)
51: choose tau in [gamma2, gamma3]
52: if (tau >= 1.0)
53: radius = max(tau * norm(d), radius)
54: else
55: radius = tau * min(norm(d), radius)
56: fi
57: else (bad step)
58: choose tau in [gamma1, 1.0]
59: radius = tau * min(norm(d), radius)
60: fi
61: */
63: PetscReal mu1; /* used for model agreement in radius update */
64: PetscReal mu2; /* used for model agreement in radius update */
66: PetscReal gamma1; /* factor used for radius update */
67: PetscReal gamma2; /* factor used for radius update */
68: PetscReal gamma3; /* factor used for radius update */
69: PetscReal gamma4; /* factor used for radius update */
71: PetscReal theta; /* factor used for radius update */
73: /* Parameters when initializing trust-region radius based on interpolation */
75: PetscReal mu1_i; /* used for model agreement in interpolation */
76: PetscReal mu2_i; /* used for model agreement in interpolation */
78: PetscReal gamma1_i; /* factor used for interpolation */
79: PetscReal gamma2_i; /* factor used for interpolation */
80: PetscReal gamma3_i; /* factor used for interpolation */
81: PetscReal gamma4_i; /* factor used for interpolation */
83: PetscReal theta_i; /* factor used for interpolation */
85: PetscReal min_radius; /* lower bound on initial radius value */
86: PetscReal max_radius; /* upper bound on trust region radius */
87: PetscReal epsilon; /* tolerance used when computing actred/prered */
89: PetscInt init_type; /* Trust-region initialization method */
90: PetscInt update_type; /* Trust-region update method */
91: } TAO_NTR;