2 #define REPORT(object) report << #object "\n" << object << endl;
4 #define COUT(object) cout<<fixed<<#object "\n"<<object<<endl;
18 long hour,minute,second;
27 void ad_boundf(
int i);
31 model_data::model_data(
int argc,
char * argv[]) : ad_comm(argc,argv)
36 if( ( on=option_match(ad_comm::argc,ad_comm::argv,
"-mse",opt) ) >-1 )
39 rseed=atoi(ad_comm::argv[on+1]);
42 agek.allocate(
"agek");
45 iyr.allocate(syr,nyr,
"iyr");
46 ct.allocate(syr,nyr,
"ct");
47 it.allocate(syr,nyr,
"it");
48 nScenario.allocate(
"nScenario");
49 n_hcr.allocate(
"n_hcr");
50 n_pyr.allocate(
"n_pyr");
51 n_flg_perfect_information.allocate(
"n_flg_perfect_information");
52 iuu_rate.allocate(
"iuu_rate");
53 min_tac.allocate(
"min_tac");
54 sEstimator.allocate(
"sEstimator");
63 void model_parameters::initializationfunction(
void)
65 log_bo.set_initial_value(8.0);
66 h.set_initial_value(0.9);
67 s.set_initial_value(0.9);
68 log_sigma.set_initial_value(4.65);
69 log_tau.set_initial_value(4.65);
72 model_parameters::model_parameters(
int sz,
int argc,
char * argv[]) :
73 model_data(argc,argv) , function_minimizer(sz)
75 initializationfunction();
76 log_bo.allocate(0,10,1,
"log_bo");
77 h.allocate(0.2,1.0,1,
"h");
78 s.allocate(0.0,1.0,1,
"s");
79 log_sigma.allocate(2,
"log_sigma");
80 log_tau.allocate(3,
"log_tau");
81 wt.allocate(syr,nyr,-15,15,3,
"wt");
83 prior_function_value.allocate(
"prior_function_value");
84 likelihood_function_value.allocate(
"likelihood_function_value");
86 #ifndef NO_AD_INITIALIZE
90 #ifndef NO_AD_INITIALIZE
94 #ifndef NO_AD_INITIALIZE
98 #ifndef NO_AD_INITIALIZE
102 #ifndef NO_AD_INITIALIZE
106 #ifndef NO_AD_INITIALIZE
109 reck.allocate(
"reck");
110 #ifndef NO_AD_INITIALIZE
114 #ifndef NO_AD_INITIALIZE
117 fpen.allocate(
"fpen");
118 #ifndef NO_AD_INITIALIZE
121 bt.allocate(syr,nyr+1,
"bt");
122 #ifndef NO_AD_INITIALIZE
125 rt.allocate(syr,nyr,
"rt");
126 #ifndef NO_AD_INITIALIZE
129 ft.allocate(syr,nyr,
"ft");
130 #ifndef NO_AD_INITIALIZE
133 epsilon.allocate(syr,nyr,
"epsilon");
134 #ifndef NO_AD_INITIALIZE
135 epsilon.initialize();
137 nll.allocate(1,8,
"nll");
138 #ifndef NO_AD_INITIALIZE
141 sd_dep.allocate(
"sd_dep");
144 void model_parameters::userfunction(
void)
148 sPars.log_bo = log_bo;
151 sPars.log_sigma = log_sigma;
152 sPars.log_tau = log_tau;
155 sig = sqrt(1.0/mfexp(log_sigma));
156 tau = sqrt(1.0/mfexp(log_tau));
162 LRGS cLRGSmodel(data,sPars);
163 cLRGSmodel.initialize_model();
164 cLRGSmodel.population_dynamics();
165 cLRGSmodel.observation_model();
166 epsilon = cLRGSmodel.get_epsilon();
167 sd_dep = cLRGSmodel.get_depletion();
168 bt = cLRGSmodel.get_bt();
169 ft = cLRGSmodel.get_ft();
170 q = cLRGSmodel.get_q();
175 calc_objective_function();
184 for( i = 1; i <= 100; i++ )
187 fe(i) = double((i-1.)/(100.-1.))*1.2;
188 for( j = 1; j <= 100; j++ )
190 ce = be * (1.-exp(-fe(i)));
191 be = value(s*be + a*be/(1.+b*be)) - ce;
193 cout<<setprecision(5)<<fe(i)<<
"\t"<<ce<<
"\t"<<be<<endl;
197 void model_parameters::initialize_model()
206 rt(syr,syr+agek) = ro * exp(wt(syr,syr+agek));
208 sig = sqrt(1.0/mfexp(log_sigma));
209 tau = sqrt(1.0/mfexp(log_tau));
217 for(i=syr;i<=nyr;i++)
219 ft(i) = -log((-ct(i)+bt(i))/bt(i));
222 rt(i) = a*bt(i-agek)/(1.+b*bt(i-agek)) * exp(wt(i));
224 btmp = s*bt(i) + rt(i) - ct(i);
225 bt(i+1) = posfun(btmp,0.1,fpen);
230 void model_parameters::observation_model()
233 dvar_vector zt = log(it) - log(bt(syr,nyr));
235 epsilon = zt - mean(zt);
238 void model_parameters::run_mse()
241 Scenario cScenario1(agek,nScenario,n_pyr,n_flg_perfect_information,rseed,value(bo),
242 value(h),value(s),iuu_rate,
243 value(q),value(sig),value(tau),value(ft),
244 value(wt),it,ct,min_tac);
249 cOM.runMSEscenario(cScenario1);
251 ofs<<
"t_bo\n" << cOM.get_bo() <<endl;
252 ofs<<
"t_est_bo\n" << cOM.get_est_bo() <<endl;
253 ofs<<
"t_bmsy\n" << cOM.get_bmsy() <<endl;
254 ofs<<
"t_fmsy\n" << cOM.get_fmsy() <<endl;
255 ofs<<
"t_msy\n" << cOM.get_msy() <<endl;
256 ofs<<
"t_bt\n" << cOM.get_bt() <<endl;
257 ofs<<
"t_aav\n" << cOM.get_aav() <<endl;
262 Scenario cScenarioP(agek,nScenario,n_pyr,0,rseed,value(bo),
263 value(h),value(s),iuu_rate,
264 value(q),value(sig),value(tau),value(ft),
267 cOMP.runMSEscenario(cScenarioP);
269 ofs1<<
"p_bo\n" << cOMP.get_est_bo() <<endl;
270 ofs1<<
"p_bmsy\n"<< cOMP.get_bmsy() <<endl;
271 ofs1<<
"p_fmsy\n"<< cOMP.get_fmsy() <<endl;
272 ofs1<<
"p_msy\n" << cOMP.get_msy() <<endl;
273 ofs1<<
"p_bt\n" << cOMP.get_bt() <<endl;
274 ofs1<<
"p_ct\n" << cOMP.get_hat_ct() <<endl;
275 ofs1<<
"p_aav\n" << cOMP.get_aav() <<endl;
279 void model_parameters::calc_objective_function()
282 dvariable isig2 = mfexp(log_sigma);
283 dvariable itau2 = mfexp(log_tau);
285 nll(1) = dnorm(epsilon,sig);
286 nll(2) = dbeta(s,30.01,10.01);
287 nll(3) = dnorm(log_bo,log(3000),1.0);
288 nll(4) = dbeta((h-0.2)/0.8,1.01,1.01);
289 nll(5) = dgamma(isig2,1.01,1.01);
292 nll(6) = dgamma(itau2,1.01,1.01);
293 nll(7) = dnorm(wt,tau);
297 nll(7) = dnorm(wt,1.0);
299 if(fpen>0 && !mc_phase()) cout<<
"Fpen = "<<fpen<<endl;
300 f = sum(nll) + 100000.*fpen;
303 void model_parameters::report()
305 adstring ad_tmp=initial_params::get_reportfile_name();
306 ofstream report((
char*)(adprogram_name + ad_tmp));
309 cerr <<
"error trying to open report file" << adprogram_name <<
".rep";
319 double fmsy = cMSY.get_fmsy();
320 double bmsy = cMSY.get_bmsy();
321 double msy = cMSY.get_msy();
332 ofs<<bo<<
"\n"<<reck<<
"\n"<<s<<
"\n"<<bt(nyr+1)<<endl;
335 void model_parameters::final_calcs()
339 cout<<
"Running MSE"<<endl;
343 elapsed_time=difftime(finish,start);
344 hour=long(elapsed_time)/3600;
345 minute=long(elapsed_time)%3600/60;
346 second=(long(elapsed_time)%3600)%60;
347 cout<<endl<<endl<<
"*******************************************"<<endl;
348 cout<<
"--Start time: "<<ctime(&start)<<endl;
349 cout<<
"--Finish time: "<<ctime(&finish)<<endl;
351 cout<<hour<<
" hours, "<<minute<<
" minutes, "<<second<<
" seconds"<<endl;
352 cout<<
"*******************************************"<<endl;
357 void model_parameters::preliminary_calculations(
void){
358 #if defined(USE_ADPVM)
360 admaster_slave_variable_interface(*
this);
365 model_data::~model_data()
368 model_parameters::~model_parameters()
371 void model_parameters::set_runtime(
void){}
374 extern unsigned _stklen=10000U;
379 extern unsigned int _stack=10000U;
382 long int arrmblsize=0;
384 int main(
int argc,
char * argv[])
386 ad_set_new_handler();
389 arrmblsize = 50000000;
390 gradient_structure::set_GRADSTACK_BUFFER_SIZE(1.e7);
391 gradient_structure::set_CMPDIF_BUFFER_SIZE(1.e7);
392 gradient_structure::set_MAX_NVAR_OFFSET(5000);
393 gradient_structure::set_NUM_DEPENDENT_VARIABLES(5000);
395 gradient_structure::set_NO_DERIVATIVES();
396 gradient_structure::set_YES_SAVE_VARIABLES_VALUES();
397 if (!arrmblsize) arrmblsize=15000000;
398 model_parameters mp(arrmblsize,argc,argv);
400 mp.preliminary_calculations();
401 mp.computations(argc,argv);
406 void ad_boundf(
int i)