1ac9112b8SAlp Dener /* 2ac9112b8SAlp Dener Context for bound-constrained nonlinear conjugate gradient method 3ac9112b8SAlp Dener */ 4ac9112b8SAlp Dener 5ac9112b8SAlp Dener 6ac9112b8SAlp Dener #ifndef __TAO_BNCG_H 7ac9112b8SAlp Dener #define __TAO_BNCG_H 8ac9112b8SAlp Dener 9ac9112b8SAlp Dener #include <petsc/private/taoimpl.h> 10ac9112b8SAlp Dener 11ac9112b8SAlp Dener typedef struct { 12*50b47da0SAdam Denchfield Mat B; 13*50b47da0SAdam Denchfield Vec G_old, X_old, W, work; 14c8bcdf1eSAdam Denchfield Vec g_work, y_work, d_work; 15c8bcdf1eSAdam Denchfield Vec sk, yk; 16c8bcdf1eSAdam Denchfield Vec steffnm1, steffn, steffnp1; 17*50b47da0SAdam Denchfield Vec steffva, steffvatmp; 1889da521bSAlp Dener Vec unprojected_gradient, unprojected_gradient_old; 19ac9112b8SAlp Dener Vec inactive_grad, inactive_step; 2061be54a6SAlp Dener 21*50b47da0SAdam Denchfield PetscReal alpha; /* convex ratio in the scalar scaling */ 22*50b47da0SAdam Denchfield PetscReal hz_theta; 23*50b47da0SAdam Denchfield PetscReal xi; /* Parameter for KD, DK, and HZ methods. */ 24*50b47da0SAdam Denchfield PetscReal theta; /* The convex combination parameter in the SSML_Broyden method. */ 25*50b47da0SAdam Denchfield PetscReal zeta; /* Another parameter, exclusive to Kou-Dai, modifying the y_k scalar contribution */ 26*50b47da0SAdam Denchfield PetscReal hz_eta, dk_eta; 27*50b47da0SAdam Denchfield PetscReal bfgs_scale, dfp_scale; /* Scaling of the bfgs/dfp tau parameter in the bfgs and broyden methods. Default 1. */ 28*50b47da0SAdam Denchfield PetscReal tau_bfgs, tau_dfp; 29*50b47da0SAdam Denchfield PetscReal as_step, as_tol, yts, yty, sts; 30c0f10754SAlp Dener PetscReal f; 31*50b47da0SAdam Denchfield PetscReal epsilon; /* Machine precision unless changed by user */ 32c8bcdf1eSAdam Denchfield PetscReal eps_23; /* Two-thirds power of machine precision */ 33*50b47da0SAdam Denchfield 34*50b47da0SAdam Denchfield IS active_lower, active_upper, active_fixed, active_idx, inactive_idx, inactive_old, new_inactives; 35*50b47da0SAdam Denchfield 36*50b47da0SAdam Denchfield PetscInt cg_type; /* Formula to use */ 37*50b47da0SAdam Denchfield PetscInt min_restart_num; /* Restarts every x*n iterations, where n is the dimension */ 38*50b47da0SAdam Denchfield PetscInt ls_fails, resets, descent_error; 39*50b47da0SAdam Denchfield PetscInt iter_quad, min_quad; /* Dynamic restart variables in Dai-Kou, SIAM J. Optim. Vol 23, pp. 296-320, Algorithm 4.1 */ 40*50b47da0SAdam Denchfield PetscInt as_type; 41*50b47da0SAdam Denchfield 42c0f10754SAlp Dener PetscBool recycle; 43c8bcdf1eSAdam Denchfield PetscBool inv_sig; 44c8bcdf1eSAdam Denchfield PetscReal tol_quad; /* tolerance for Dai-Kou dynamic restart */ 45c8bcdf1eSAdam Denchfield PetscBool dynamic_restart; /* Keeps track of whether or not to do a dynamic (KD) restart */ 46c8bcdf1eSAdam Denchfield PetscBool use_steffenson; /* In development - attempting to use vector-based steffenson acceleration to the fixed point */ 47c8bcdf1eSAdam Denchfield PetscBool spaced_restart; /* If true, restarts the CG method every x*n iterations */ 48c8bcdf1eSAdam Denchfield PetscBool use_dynamic_restart; 49c8bcdf1eSAdam Denchfield PetscBool neg_xi; 50*50b47da0SAdam Denchfield PetscBool unscaled_restart; /* Gradient descent restarts are done without rescaling*/ 51c8bcdf1eSAdam Denchfield PetscBool diag_scaling; 52*50b47da0SAdam Denchfield 53ac9112b8SAlp Dener } TAO_BNCG; 54ac9112b8SAlp Dener 55ac9112b8SAlp Dener #endif /* ifndef __TAO_BNCG_H */ 56ac9112b8SAlp Dener 5761be54a6SAlp Dener PETSC_INTERN PetscErrorCode TaoBNCGEstimateActiveSet(Tao, PetscInt); 58a1318120SAlp Dener PETSC_INTERN PetscErrorCode TaoBNCGBoundStep(Tao, PetscInt, Vec); 59c0f10754SAlp Dener PETSC_EXTERN PetscErrorCode TaoBNCGSetRecycleFlag(Tao, PetscBool); 60c8bcdf1eSAdam Denchfield PETSC_INTERN PetscErrorCode TaoBNCGComputeScalarScaling(PetscReal, PetscReal, PetscReal, PetscReal*, PetscReal); 61c8bcdf1eSAdam Denchfield PETSC_INTERN PetscErrorCode TaoBNCGConductIteration(Tao, PetscReal); 62c8bcdf1eSAdam Denchfield PETSC_INTERN PetscErrorCode TaoBNCGStepDirectionUpdate(Tao, PetscReal, PetscReal, PetscReal, PetscReal, PetscBool, PetscReal, PetscReal); 63c8bcdf1eSAdam Denchfield PETSC_INTERN PetscErrorCode TaoBNCGComputeDiagScaling(Tao, PetscReal, PetscReal); 64c8bcdf1eSAdam Denchfield PETSC_INTERN PetscErrorCode TaoBNCGResetUpdate(Tao, PetscReal); 65c8bcdf1eSAdam Denchfield PETSC_INTERN PetscErrorCode TaoBNCGCheckDynamicRestart(Tao, PetscReal, PetscReal, PetscReal, PetscBool*, PetscReal); 66c8bcdf1eSAdam Denchfield PETSC_INTERN PetscErrorCode TaoBNCGSteffensonAcceleration(Tao); 67