📄 test.fitness.cc
字号:
// test.fitness.cc INCLUDE file for test.cc// W. Langdon cs.ucl.ac.uk 12 February 1995// based upon gp.cc Revision: 1.2#define main_version "$Revision: 1.24 $"//Modifications (in reverse order)//WBL 18 Oct 95 Support rand_test//WBL 17 Oct 95 Support hurdle//WBL 15 Oct 95 Clear myfitnessvalue if not using STORE_FIT//WBL 27 Jun 95 Support multiple test phases//WBL 3 May 95 Add STORE_FIT//WBL 2 May 95 Add TRACE_RUN//WBL 23 Apr 95 Add calculating number of tests run//WBL 22 Apr 95 Add adf_cache//WBL Feb-Apr95 see RCS//WBL 12 Feb 95 new file#ifdef DISPLAYcout << "\nExecuting "<< chrome << flush;chrome->write(PRETTY_NONE); cout<<endl;chrome->SetupEval();#endif#ifdef TIMINGSThisTimmer = new run_time;if(ThisTimmer->too_many_times()) { cout<<"Continuing -- ThisTimer->too_many_times\n"; chrome->write(PRETTY_NONE); cout<<endl;} //debug info#ifdef DISPLAYcout<<*ThisTimmer;#endif#endifint passes = 0;int start_tests_run = ThisTest->num_tests_run();#ifdef STORE_FIT//ptrmyfitnessvalue(chrome->nfitness)->clear(); already init:need to keep dataif((chrome->params->params[pStoreFit] & 2) != 0) ::clear_stats(); //clear primitive stats (global)#elseptrmyfitnessvalue(chrome->nfitness)->clear();chrome->nfitness->fvalue = 0.0;::clear_stats(); //clear primitive stats (global)#endif#ifdef ADF_CACHEcache_init();#endifptrmyfitnessvalue(chrome->nfitness)->test_seed = ThisTest->test_seed;//BOOL sequence_run[ThisTest->phase_end_seq[current_phase]];//memset(sequence_run,0,sizeof(sequence_run));BOOL* sequence_run = new BOOL [ThisTest->phase_end_seq[current_phase]];memset(sequence_run,0,ThisTest->phase_end_seq[current_phase]*sizeof(BOOL));hurdle_passes = 0;for(int tt=0;tt<=ThisTest->phase_end_seq[current_phase] && passes>=hurdle_passes && ((ThisTest->test_seed == 0) || (ThisTest->rand_test_min() == 0) || (tt<=ThisTest->rand_test_min()) || ((tt-passes) < ThisTest->rand_test_max_fails())); tt++) {int t = tt;if ((ThisTest->test_seed != 0) && (ThisTest->rand_test_min() != 0)) {// cout<<":tt: "<<tt<<" sequence_run["<<t<<"] "<<flush;// if(sequence_run[t]) cout<<"TRUE";// else cout<<"FALSE";// cout<<endl;for(;sequence_run[ (t=intrnd(ThisTest->test_seed)%ThisTest->phase_end_seq[current_phase])];) {;// cout<<"tt "<<tt<<" sequence_run[ "<<t<<" ] "<<flush;// if(sequence_run[t]) cout<<"TRUE";// else cout<<"FALSE";// cout<<endl;};}//end if random testingsequence_run[t] = TRUE;#ifndef DISPLAY#ifdef STORE_FIT if(need_to_run(chrome,t)) { clear_seq_score(chrome,t);#endif#endif int i = ThisTest->sequence_start[t]; if(i!=0) {#ifdef TRACE_RUN ThisTrace = new trace_run;#endif#ifndef DISPLAY#ifdef STORE_FIT if((chrome->params->params[pStoreFit] & 2) == 0) ::clear_stats(); //clear primitive stats (global) ThisTimmer->clear(); int start_tests_run = ThisTest->num_tests_run(); int p = ThisTest->run_tests(chrome,t,i); passes += p;#ifdef TEST_STATS ThisTest->sequence_stats(t,p);#endif ThisTest->update_seq_score(chrome,t,p, ThisTest->num_tests_run() - start_tests_run);#else int p = ThisTest->run_tests(chrome,t,i); passes += p;#ifdef TEST_STATS ThisTest->sequence_stats(t,p);#endif ThisTest->update_seq_score(chrome,t,p);#ifdef TRACE_RUNcout<<"Fix this byte overflow problem!"<<endl; const ptrmyfitnessvalue f=ptrmyfitnessvalue(chrome->nfitness); for(int j = 0; j<NUM_TREES; j++) { f->ok[j] += ThisTrace->tree_passes(j); //nocheck >255 f->nak[j]+= ThisTrace->tree_fails(j);//not yet f->used[sequence][j] |= ThisTrace->tree_used(j); };#endif#endif /*STORE_FIT*///cout<<"Sequence "<<t<<" test "<<i<<" p "<<p<<" passes "<<passes<<endl;#else cout<<"Starting test sequence "<<t<<" at test "<<i<<endl; passes += ThisTest->display_tests(chrome,t,i);#endif#ifdef TRACE_RUN delete ThisTrace; ThisTrace = NULL;#endif }#ifndef DISPLAY#ifdef STORE_FIT }//endif need to run test sequence#endif#endif}#ifdef DISPLAYcout<<"Ran "<<(ThisTest->num_tests_run()-start_tests_run)/2<<" tests "<<flush;//NB display_run actually does a prepass, ie runs tests twicecout<<"Passed "<<passes<<" scorxx "<<flush;#endif#ifdef STORE_FITptrmyfitnessvalue(chrome->nfitness)->test_phase = current_phase;float fitness = ThisTest->final_score(chrome);#elsefloat fitness = ThisTest->final_score(chrome, passes, ThisTest->num_tests_run() - start_tests_run);#endif#ifdef DISPLAYcout<<"fitness = "<<fitness<<endl;#ifdef ADF_CACHEcache_stats();#endif#endif#ifdef TIMINGSdelete ThisTimmer;ThisTimmer = NULL;#endifdelete[] sequence_run;return fitness;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -