void function_minimizer::hess_routine_noparallel(void) { int nvar=initial_params::nvarcalc(); // get the number of active parameters //if (adjm_ptr) set_labels_for_hess(nvar); independent_variables x(1,nvar); initial_params::xinit(x); // get the initial values into the x vector double delta=1.e-5; dvector g1(1,nvar); dvector g2(1,nvar); dvector gbest(1,nvar); dvector hess(1,nvar); dvector hess1(1,nvar); dvector hess2(1,nvar); double eps=.1; gradient_structure::set_YES_DERIVATIVES(); gbest.fill_seqadd(1.e+50,0.); adstring tmpstring="admodel.hes"; if (ad_comm::wd_flag) tmpstring = ad_comm::adprogram_name + ".hes"; uostream ofs((char*)tmpstring); ofs << nvar; { { dvariable vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; gradcalc(nvar, g1, vf); } double sdelta1; double sdelta2; for (int i=1;i<=nvar;i++) { hess_calcreport(i,nvar); double xsave=x(i); sdelta1=x(i)+delta; sdelta1-=x(i); x(i)=xsave+sdelta1; dvariable vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; gradcalc(nvar, g1, vf); sdelta2=x(i)-delta; sdelta2-=x(i); x(i)=xsave+sdelta2; vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; gradcalc(nvar, g2, vf); x(i)=xsave; hess1=(g1-g2)/(sdelta1-sdelta2); sdelta1=x(i)+eps*delta; sdelta1-=x(i); x(i)=xsave+sdelta1; vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; gradcalc(nvar, g1, vf); x(i)=xsave-eps*delta; sdelta2=x(i)-eps*delta; sdelta2-=x(i); x(i)=xsave+sdelta2; vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; gradcalc(nvar, g2, vf); x(i)=xsave; vf=initial_params::reset(dvar_vector(x)); double eps2=eps*eps; hess2=(g1-g2)/(sdelta1-sdelta2); hess=(eps2*hess1-hess2) /(eps2-1.); ofs << hess; //if (adjm_ptr) ad_update_hess_stats_report(nvar,i); } } ofs << gradient_structure::Hybrid_bounded_flag; dvector tscale(1,nvar); // need to get scale from somewhere /*int check=*/initial_params::stddev_scale(tscale,x); ofs << tscale; }
void function_minimizer::hess_routine_master() { int nvar=initial_params::nvarcalc(); // get the number of active parameters //if (adjm_ptr) set_labels_for_hess(nvar); independent_variables x(1,nvar); initial_params::xinit(x); // get the initial values into the x vector double f; double delta=1.e-6; dvector g1(1,nvar); dvector g2(1,nvar); dvector gbest(1,nvar); dvector hess(1,nvar); dvector hess1(1,nvar); dvector hess2(1,nvar); double eps=.1; gradient_structure::set_YES_DERIVATIVES(); gbest.fill_seqadd(1.e+50,0.); adstring tmpstring="admodel.hes"; if (ad_comm::wd_flag) tmpstring = ad_comm::adprogram_name + ".hes"; uostream ofs((char*)tmpstring); ofs << nvar; { pvm_master_function_evaluation(f,x,g1,nvar); double sdelta1; double sdelta2; for (int i=1;i<=nvar;i++) { hess_calcreport(i,nvar); double f=0.0; double xsave=x(i); sdelta1=x(i)+delta; useless(sdelta1); sdelta1-=x(i); x(i)=xsave+sdelta1; pvm_master_function_evaluation(f,x,g1,nvar); sdelta2=x(i)-delta; useless(sdelta2); sdelta2-=x(i); x(i)=xsave+sdelta2; pvm_master_function_evaluation(f,x,g2,nvar); x(i)=xsave; hess1=(g1-g2)/(sdelta1-sdelta2); sdelta1=x(i)+eps*delta; useless(sdelta1); sdelta1-=x(i); x(i)=xsave+sdelta1; pvm_master_function_evaluation(f,x,g1,nvar); x(i)=xsave-eps*delta; sdelta2=x(i)-eps*delta; useless(sdelta2); sdelta2-=x(i); x(i)=xsave+sdelta2; pvm_master_function_evaluation(f,x,g2,nvar); x(i)=xsave; dvariable vf=initial_params::reset(dvar_vector(x)); double eps2=eps*eps; hess2=(g1-g2)/(sdelta1-sdelta2); hess=(eps2*hess1-hess2) /(eps2-1.); ofs << hess; //if (adjm_ptr) ad_update_hess_stats_report(nvar,i); } } gradient_structure::set_NO_DERIVATIVES(); }
void function_minimizer::hess_routine_and_constraint(int iprof, const dvector& g, dvector& fg) { int nvar=initial_params::nvarcalc(); // get the number of active parameters independent_variables x(1,nvar); initial_params::xinit(x); // get the initial values into the x vector double delta=1.e-6; dvector g1(1,nvar); dvector g2(1,nvar); dvector gbest(1,nvar); dvector hess(1,nvar); dvector hess1(1,nvar); dvector hess2(1,nvar); //double eps=.1; gradient_structure::set_YES_DERIVATIVES(); gbest.fill_seqadd(1.e+50,0.); uostream ofs("admodel.hes"); //ofstream ofs5("tmphess"); double lambda=fg*g/norm2(g); cout << fg-lambda*g << endl; cout << norm(fg-lambda*g) << " " << fg*g/(norm(g)*norm(fg)) << endl; ofs << nvar; { { dvariable vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; vf-=lambda*likeprof_params::likeprofptr[iprof]->variable(); gradcalc(nvar, g1, vf); } double sdelta1; double sdelta2; for (int i=1;i<=nvar;i++) { hess_calcreport(i,nvar); double xsave=x(i); sdelta1=x(i)+delta; sdelta1-=x(i); x(i)=xsave+sdelta1; dvariable vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; vf-=lambda*likeprof_params::likeprofptr[iprof]->variable(); gradcalc(nvar, g1, vf); sdelta2=x(i)-delta; sdelta2-=x(i); x(i)=xsave+sdelta2; vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; vf-=lambda*likeprof_params::likeprofptr[iprof]->variable(); gradcalc(nvar, g2, vf); x(i)=xsave; hess1=(g1-g2)/(sdelta1-sdelta2); /* sdelta1=x(i)+eps*delta; sdelta1-=x(i); x(i)=xsave+sdelta1; vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; vf-=lambda*likeprof_params::likeprofptr[iprof]->variable(); f=value(vf); gradcalc(nvar,g1); x(i)=xsave-eps*delta; sdelta2=x(i)-eps*delta; sdelta2-=x(i); x(i)=xsave+sdelta2; vf=0.0; vf=0.0; vf=initial_params::reset(dvar_vector(x)); *objective_function_value::pobjfun=0.0; pre_userfunction(); vf+=*objective_function_value::pobjfun; vf-=lambda*likeprof_params::likeprofptr[iprof]->variable(); f=value(vf); gradcalc(nvar,g2); x(i)=xsave; double eps2=eps*eps; hess2=(g1-g2)/(sdelta1-sdelta2); hess=(eps2*hess1-hess2) /(eps2-1.); */ hess=hess1; ofs << hess; } } gradient_structure::set_NO_DERIVATIVES(); }