1 /* 2 Context for a Newton trust region method (unconstrained minimization) 3 */ 4 5 #pragma once 6 #include <petsc/private/taoimpl.h> 7 8 typedef struct { 9 Mat M; 10 PC bfgs_pre; 11 12 Vec D; 13 Vec W; 14 15 PetscReal radius; 16 17 /* Parameters when updating the trust-region radius based on reduction 18 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 */ 32 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 */ 37 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 */ 43 44 /* Parameters when updating the trust-region radius based on interpolation 45 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 */ 62 63 PetscReal mu1; /* used for model agreement in radius update */ 64 PetscReal mu2; /* used for model agreement in radius update */ 65 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 */ 70 71 PetscReal theta; /* factor used for radius update */ 72 73 /* Parameters when initializing trust-region radius based on interpolation */ 74 75 PetscReal mu1_i; /* used for model agreement in interpolation */ 76 PetscReal mu2_i; /* used for model agreement in interpolation */ 77 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 */ 82 83 PetscReal theta_i; /* factor used for interpolation */ 84 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 */ 88 89 PetscInt init_type; /* Trust-region initialization method */ 90 PetscInt update_type; /* Trust-region update method */ 91 } TAO_NTR; 92