1*fb90e4d1STodd Munson /* 2*fb90e4d1STodd Munson Context for a Newton trust region method (unconstrained minimization) 3*fb90e4d1STodd Munson */ 4*fb90e4d1STodd Munson 5*fb90e4d1STodd Munson #if !defined(__TAO_NTR_H) 6*fb90e4d1STodd Munson #define __TAO_NTR_H 7*fb90e4d1STodd Munson #include <petsc/private/taoimpl.h> 8*fb90e4d1STodd Munson 9*fb90e4d1STodd Munson typedef struct { 10*fb90e4d1STodd Munson Mat M; 11*fb90e4d1STodd Munson 12*fb90e4d1STodd Munson Vec D; 13*fb90e4d1STodd Munson Vec W; 14*fb90e4d1STodd Munson 15*fb90e4d1STodd Munson Vec Diag; 16*fb90e4d1STodd Munson PetscReal radius; 17*fb90e4d1STodd Munson 18*fb90e4d1STodd Munson /* Parameters when updating the trust-region radius based on reduction 19*fb90e4d1STodd Munson 20*fb90e4d1STodd Munson kappa = ared / pred 21*fb90e4d1STodd Munson if kappa < eta1 (very bad step) 22*fb90e4d1STodd Munson radius = alpha1 * min(norm(d), radius) 23*fb90e4d1STodd Munson elif kappa < eta2 (bad step) 24*fb90e4d1STodd Munson radius = alpha2 * min(norm(d), radius) 25*fb90e4d1STodd Munson elif kappa < eta3 (okay step) 26*fb90e4d1STodd Munson radius = alpha3 * radius; 27*fb90e4d1STodd Munson elif kappa < eta4 (good step) 28*fb90e4d1STodd Munson radius = max(alpha4 * norm(d), radius) 29*fb90e4d1STodd Munson else (very good step) 30*fb90e4d1STodd Munson radius = max(alpha5 * norm(d), radius) 31*fb90e4d1STodd Munson fi 32*fb90e4d1STodd Munson */ 33*fb90e4d1STodd Munson 34*fb90e4d1STodd Munson PetscReal eta1; /* used to compute trust-region radius */ 35*fb90e4d1STodd Munson PetscReal eta2; /* used to compute trust-region radius */ 36*fb90e4d1STodd Munson PetscReal eta3; /* used to compute trust-region radius */ 37*fb90e4d1STodd Munson PetscReal eta4; /* used to compute trust-region radius */ 38*fb90e4d1STodd Munson 39*fb90e4d1STodd Munson PetscReal alpha1; /* factor used for trust-region update */ 40*fb90e4d1STodd Munson PetscReal alpha2; /* factor used for trust-region update */ 41*fb90e4d1STodd Munson PetscReal alpha3; /* factor used for trust-region update */ 42*fb90e4d1STodd Munson PetscReal alpha4; /* factor used for trust-region update */ 43*fb90e4d1STodd Munson PetscReal alpha5; /* factor used for trust-region update */ 44*fb90e4d1STodd Munson 45*fb90e4d1STodd Munson /* Parameters when updating the trust-region radius based on interpolation 46*fb90e4d1STodd Munson 47*fb90e4d1STodd Munson kappa = ared / pred 48*fb90e4d1STodd Munson if kappa >= 1.0 - mu1 (very good step) 49*fb90e4d1STodd Munson choose tau in [gamma3, gamma4] 50*fb90e4d1STodd Munson radius = max(tau * norm(d), radius) 51*fb90e4d1STodd Munson elif kappa >= 1.0 - mu2 (good step) 52*fb90e4d1STodd Munson choose tau in [gamma2, gamma3] 53*fb90e4d1STodd Munson if (tau >= 1.0) 54*fb90e4d1STodd Munson radius = max(tau * norm(d), radius) 55*fb90e4d1STodd Munson else 56*fb90e4d1STodd Munson radius = tau * min(norm(d), radius) 57*fb90e4d1STodd Munson fi 58*fb90e4d1STodd Munson else (bad step) 59*fb90e4d1STodd Munson choose tau in [gamma1, 1.0] 60*fb90e4d1STodd Munson radius = tau * min(norm(d), radius) 61*fb90e4d1STodd Munson fi 62*fb90e4d1STodd Munson */ 63*fb90e4d1STodd Munson 64*fb90e4d1STodd Munson PetscReal mu1; /* used for model agreement in radius update */ 65*fb90e4d1STodd Munson PetscReal mu2; /* used for model agreement in radius update */ 66*fb90e4d1STodd Munson 67*fb90e4d1STodd Munson PetscReal gamma1; /* factor used for radius update */ 68*fb90e4d1STodd Munson PetscReal gamma2; /* factor used for radius update */ 69*fb90e4d1STodd Munson PetscReal gamma3; /* factor used for radius update */ 70*fb90e4d1STodd Munson PetscReal gamma4; /* factor used for radius update */ 71*fb90e4d1STodd Munson 72*fb90e4d1STodd Munson PetscReal theta; /* factor used for radius update */ 73*fb90e4d1STodd Munson 74*fb90e4d1STodd Munson /* Parameters when initializing trust-region radius based on interpolation */ 75*fb90e4d1STodd Munson 76*fb90e4d1STodd Munson PetscReal mu1_i; /* used for model agreement in interpolation */ 77*fb90e4d1STodd Munson PetscReal mu2_i; /* used for model agreement in interpolation */ 78*fb90e4d1STodd Munson 79*fb90e4d1STodd Munson PetscReal gamma1_i; /* factor used for interpolation */ 80*fb90e4d1STodd Munson PetscReal gamma2_i; /* factor used for interpolation */ 81*fb90e4d1STodd Munson PetscReal gamma3_i; /* factor used for interpolation */ 82*fb90e4d1STodd Munson PetscReal gamma4_i; /* factor used for interpolation */ 83*fb90e4d1STodd Munson 84*fb90e4d1STodd Munson PetscReal theta_i; /* factor used for interpolation */ 85*fb90e4d1STodd Munson 86*fb90e4d1STodd Munson PetscReal min_radius; /* lower bound on initial radius value */ 87*fb90e4d1STodd Munson PetscReal max_radius; /* upper bound on trust region radius */ 88*fb90e4d1STodd Munson PetscReal epsilon; /* tolerance used when computing actred/prered */ 89*fb90e4d1STodd Munson 90*fb90e4d1STodd Munson PetscInt pc_type; /* Preconditioner for the code */ 91*fb90e4d1STodd Munson PetscInt bfgs_scale_type;/* Scaling matrix for the bfgs preconditioner */ 92*fb90e4d1STodd Munson PetscInt init_type; /* Trust-region initialization method */ 93*fb90e4d1STodd Munson PetscInt update_type; /* Trust-region update method */ 94*fb90e4d1STodd Munson } TAO_NTR; 95*fb90e4d1STodd Munson 96*fb90e4d1STodd Munson #endif /* ifndef __TAO_NTR_H */ 97