⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gp.cc

📁 标准的GP源代码,由Andy Singleton维护
💻 CC
📖 第 1 页 / 共 2 页
字号:
     <<endl;}//end display_best_stats();void dout(int i){char buf[80]; sprintf(buf,"%5d",i); cout << buf;}void display_list(Pop* pop, int output[], int duplicates[], int outputsize, 		  int popwidth,	BOOL details){#define max_display_list 10cout<<"Best ("<<outputsize<<") in population "<<endl;for (int i=0; i<outputsize; i++){	if (popwidth == 0) dout(output[i]);	else 		{dout(output[i] % popwidth);		 dout(output[i] / popwidth);}	dout(duplicates[i]);	pop->pop[output[i]]->nfitness->write();	cout<<endl;}//end loop write fitness onlyfor (i=0; i<outputsize && i<max_display_list; i++){	if (popwidth == 0) dout(output[i]);	else 		{dout(output[i] % popwidth);		 dout(output[i] / popwidth);}	dout(duplicates[i]);	pop->pop[output[i]]->nfitness->write();#ifdef TRACE	if ( details ) pop->pop[output[i]]->write(PRETTY_NONE,cout);#endif	cout<<endl;}//end loop}//end display_listvoid display_elite(Pop* pop, int popsize, int popwidth){int i;const int limit = popsize;//Chrome*  chromes[limit];Chrome** chromes = new Chrome* [limit];int num_elite;scoretype best [num_ellite_pareto];int       count[num_ellite_pareto];find_elite(chromes, limit, num_elite, best, count);cout<<"Ellite ("<<num_elite<<") in population "<<endl;cout<<"bst ";for (i=0; i<num_ellite_pareto; i++){//	char buf[80]; sprintf(buf,"%4d",best[i]);//	cout << buf << ",";	cout << best[i] << ",";}cout<<endl;cout<<"No. ";for (i=0; i<num_ellite_pareto; i++){	char buf[80]; sprintf(buf,"%4d",count[i]);	cout << buf << ",";}cout<<endl;//Now reduce size of list of best in pop by weeding out those dominated//by others in the list.int dummy;int outputsize = num_elite;//int duplicates[outputsize];//int slot      [outputsize];int* duplicates = new int [outputsize];int* slot       = new int [outputsize];{//int output    [outputsize];int* output     = new int [outputsize];select_hits(chromes, num_elite, 0, &dummy, TRUE, output, duplicates, &outputsize);//Now convert output to slot numbers in pop.for (i=0; i<outputsize; i++){	BOOL found = FALSE;	for(int s=0; !found; s++) {		assert(s<popsize);		if(pop->pop[s] == chromes[output[i]]) {			found = TRUE;			slot[i] = s;		}	}}delete[] output;}//end scope outputdisplay_list(pop, slot, duplicates, outputsize, popwidth, TRUE);delete[] slot;delete[] duplicates;delete[] chromes;}//end display_elite();void display_all_best(Pop* pop, int popsize, int popwidth, BOOL details){int dummy;int outputsize = popsize;//int output[outputsize];//int duplicates[outputsize];int* output     = new int [outputsize];int* duplicates = new int [outputsize];select_hits(pop->pop, popsize, 0, &dummy, TRUE, output, duplicates, &outputsize);display_list(pop, output, duplicates, outputsize, popwidth, details);delete[] duplicates;delete[] output;}//end display_all_best();#endif //PARETO//void write_fitness_summary()//{////};//end write_fitness_summary//**************************************************************************int do_gens (Pop* pop, int number, int tree, int& phase) //return if complete or not{         pop->ClearCStats();     cout << "Running, gpquick_seed " << gpquick_seed          << " at " <<pop->gencount+1 << ". ";     if ( tree >= 0 )	  {  cout << "Crossover in ";             ThisProblem->WriteTreeName(tree);          }     else	     cout << "Random crossover tree\n";//   cout << "gpquick_seed "<<gpquick_seed<<endl;//debug     if(pop->params->params[pTournOff] != 0         && 	pop->params->params[pTournSize] > 1 &&	(pop->gencount+1)>=pop->params->params[pTournOff]) {       cout<<"Setting pTournSize to 1\n";       pop->params->params[pTournSize] = 1;     };     Chrome* last_chrome = pop->go_until(0,number,max_fitness,tree);//     if((((pop->gencount+1)/ThisParams->params[pPopSize]) <= 1)   ||//	(((pop->gencount+1)/ThisParams->params[pPopSize])%5 == 0))   {     // Display the best so far     cout << "\n\nAfter " << pop->gencount+1 << " ";#ifdef PARETO     if(ThisParams->params[pTrace] & pTracePareto )	     display_all_best(pop, ThisParams->params[pPopSize],			      ThisParams->params[pPopWidth], TRUE);     display_best_stats(pop, ThisParams->params[pPopSize]);#else     cout << " generates, BestFitness = ";     cout << pop->BestFitness->fvalue << " ";#ifdef TRACE     cout << pop->BestMember;     pop->pop[pop->BestMember]->write_trace();     pop->pop[pop->BestMember]->write(PRETTY_NONE,cout);     cout << endl;#endif#endif //PARETO     pop->DisplayStats();     if ( ThisParams->params[pTrace] & pTraceDStats ) pop->DisplayDStats();     if ( ThisParams->params[pTrace] & pTracePStats ) pop->DisplayPStats();     else                                             pop->DisplayLPStats();     if ( ThisParams->params[pTrace] & pTraceDupStats)pop->DisplayDupStats();//     display_run(pop->best()); //show what it does//     test_all_adf1(pop, 1);//     }#ifdef PARETO     cout<<"select_hits callss ";select_hits_write_stats(); cout<<endl;#endif     cout<<"crossovers ";pop->DisplayCStats();     phase = end_gens(); //problem specific#ifdef GRID_LIB     display_schedule_counts(cout);#endif     return (last_chrome->nfitness->fvalue >=max_fitness);}//end do_gens()///////////////////////////////  MAINint main(int argc, char * argv[]){	time_t start, end;	ThisProblem=new gp();	output_header(cout);	assert ( NUM_TREES >= NUM_OPERATIONS );	time (&start);	memcpy(&last_save_time,&start,sizeof(start));	ifstream gpParams ("gp.ini");	if ( gpParams )	     { ThisParams->Load(gpParams);	       gpParams.close();             }	else {		cerr << "Could not open gp.ini\n";		exit(0);	     }	ifstream gpTests ("gp.test");	if ( gpTests )	     { ThisTest = new test(ThisProblem, gpTests);	       gpTests.close();//	       ThisTest->write(ThisProblem,cout);//debug             }	else {		cerr << "Could not open gp.test"<<endl;		exit(0);	     }	for(int i=0; i<argc;i++) {		ThisParams->Load(argv[i]); }	int initial_gencount = load_dumpfile(argc, argv); //if possible			ThisTest->test_seed = ThisParams->params[pTestSeed];	if ( ThisParams->params[pPopSeed] > 0 )		gpquick_seed = ThisParams->params[pPopSeed];  //dirty I know	else	      { rndomize(); //use random seed		ThisParams->params[pPopSeed] = gpquick_seed; //record seed used	      }	max_fitness = setmaxfit(ThisParams);	ifstream gpLoad ("gp.load");	if ( gpLoad )	     { cout << "Loading chromes from gp.load\n";	       if(ThisParams->params[pSeeds]==0) {	       ThisParams->params[pPopSize]=1;	       ThisParams->params[pGenerateLimit]=1;             }}	else if(ThisParams->params[pSeeds]!=0)		cout << "Failed to open gp.load\n";	int pop_size = ThisParams->params[pPopSize];	int gen_max  = ThisParams->params[pGenerateLimit];	if( initial_gencount<0 ) {	cout << "Creating new population of " << pop_size<< " individuals\n";	if(gpLoad && ThisParams->params[pSeeds]!=0)		ThisPop = new Pop(ThisProblem,ThisParams,pop_size,&gpLoad);	else	ThisPop = new Pop(ThisProblem,ThisParams,pop_size);	cout << "new Pop -- completed\n";        }	else		ThisPop->gencount = initial_gencount - (pop_size-1);	write_problem_params();	ThisParams->Save();	int done;	if ( gpLoad && ThisParams->params[pSeeds]==0 )	     { cout << "Overwritting with file gp.load\n";	       //prevent trying to maintain list of best members of population	       ThisParams->params[pElitist] = 0;	       current_phase = ThisTest->num_phases-1; //display all tests	       int rval = ThisPop->pop[0]->Load(gpLoad, TRUE);	       if (rval != 0)		       cout<<"Load error - "<<rval<<endl;	       else		   {   ThisTest->test_seed = ThisParams->params[pTestSeed];		       ThisPop->pop[0]->SetupEval();		       ThisProblem->fitness(ThisPop->pop[0]);		       ThisPop->pop[0]->write_trace();		       ThisPop->pop[0]->write(PRETTY_NONE,cout);#ifdef ADF_CACHE		       cache_stats_init();#endif		       display_run (ThisPop->pop[0]);#ifdef ADF//		       test_all_adf1(ThisPop, 0);#endif	           }	       gpLoad.close();	       done = TRUE;        }else{	int phase;	cout << "Setting each fitness value\n";	done = do_gens (ThisPop, pop_size-1, -1, phase); //no xover on init pop	cout << "Initial fitness values calculated,\n";	if ( initial_gencount >= 0 ) {//		ThisPop->gencount = initial_gencount;		//It is important that gpquick_seed is restored to correct		//value. This step is only required because generate()		//unneccessarily calls rnd()		gpquick_seed = ThisParams->params[pPopSeed];	}	cout << "Creating a total of " << gen_max << " individuals\n";	const int generates_per_report = pop_size *	  ((ThisParams->params[pTrace] & 	    (pTraceDStats|pTracePStats|pTraceDupStats))? 	   1 : ((gen_max+(50*pop_size)-1)/(50*pop_size)));	if( ((ThisPop->gencount+1) % generates_per_report!=0) &&	    ((ThisPop->gencount+1) < gen_max) && !done && !kbhit() )  	{		done = do_gens (ThisPop, generates_per_report-pop_size, -1,				phase);#ifdef PARETO		if(ThisParams->params[pElitist] == 0)			display_all_best(ThisPop,ThisParams->params[pPopSize], 					 ThisParams->params[pPopWidth], TRUE);		else			display_elite(   ThisPop,ThisParams->params[pPopSize], 				         ThisParams->params[pPopWidth]);#endif	}//endif catchup to even boundary on generates	                         // kbhit IS NOT PORTABLE (Borland specific)	while ( (ThisPop->gencount+1) < gen_max && !done && !kbhit() )  	{		done = do_gens (ThisPop, generates_per_report, -1, phase);		save_state(phase);#ifdef PARETO		if(ThisParams->params[pElitist] == 0)			display_all_best(ThisPop,ThisParams->params[pPopSize], 					 ThisParams->params[pPopWidth], TRUE);		else			display_elite(   ThisPop,ThisParams->params[pPopSize], 				         ThisParams->params[pPopWidth]);#endif	}	save_state(9);//	// Display the best	cout << "\n\nFINAL RESULTS. After " << ThisPop->gencount+1 << " ";#ifdef PARETO	if(ThisParams->params[pElitist] == 0)		display_all_best(ThisPop, ThisParams->params[pPopSize], 				 ThisParams->params[pPopWidth], TRUE);	else		display_elite(   ThisPop, ThisParams->params[pPopSize], 				 ThisParams->params[pPopWidth]);#else	cout << " generates, BestFitness = ";	cout << ThisPop->BestFitness->fvalue<<endl;#endif //PARETO	// Display the final population	if ( ThisParams->params[pTrace] & pTraceStatic )	  {  cout << "\n\nFINAL Population";	     ThisPop->Write();          }//	display_run(ThisPop->best()); //show what it does}//if not loading from file	ThisProblem->write_stats();	ThisTest->write_stats();	time (&end);	cout << "\nGP took " << end - start << " secs. Finished at ";	cout << ctime(&end);//	cout << clock() << " ticks cpu";	cout << endl;        //prevent trying to maintain list of best members of population        ThisParams->params[pElitist] = 0;	delete ThisPop;	delete ThisProblem;	delete ThisParams;	        return done? 1 : 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -