Ejemplo n.º 1
0
void eva_step()
{
   cout<<"iteration="<<(iteration++)<<endl;
   while (population.size() < psize + nchildren)
     {
	make_sex();
     }
   extinction();
   print_best_result();
}
Ejemplo n.º 2
0
void eva_step()
{
   cout<<"iteration="<<(iteration++)<<endl;
   while (population.size() < psize + nchildren)
     {
	make_sex();
     }
   if (ext_type == "e") //elitist extinction
     {
	extinction();
     }
   else if (ext_type == "p") //proportional extinction
     {
	extinction_proportional();
     }
   else
     {
	cerr<<"Error | eva_step | unknown extinction type"<<endl;
	exit(EXIT_FAILURE);
     }
   print_best_result();
}
Ejemplo n.º 3
0
void extinction_proportional()
{   
   sort(population.begin(), population.end(), fun_for_sort_members);
   
   //make pre extinction (remove all with INF_PENALTY)
   size_t n_del = 0;
   for (size_t i = population.size() - 1 ; 
	i >= psize && population[i]->penalty == INF_PENALTY ; //remove not more than psize
	i--) 
     {
	delete_member(population[i]);
	n_del++;
     }
   population.resize(population.size() - n_del);
   
   
   if (population.size() == psize) //ok
     return;

   double min_prob = 0.02;
   double max_prob = 1; 
   double min_pen = population.front()->penalty; //probability of extinction min_prob
   double max_pen = population.back()->penalty;   //probability of extinction max_prob
   
   if (min_pen == max_pen)  //in this case we make simple extinction
     {
	extinction();
	return;
     }
//   cout<<"min/max="<<min_pen<<" "<<max_pen<<endl;
   
   double black_label = max_pen * 2;
   
   size_t ext = 0;
   
   while (ext < (population.size() - psize))  //we should kill (population.size() - psize)
     {
	size_t idx = random() % population.size();
	if (population[idx]->penalty != black_label) //if it haven't been already killed
	  {
	     double ep = min_prob + (max_prob - min_prob) *
	       (population[idx]->penalty - min_pen) / (max_pen - min_pen);
//	     cout<<ep<<" "<<population[idx]->penalty<<" "<<min_pen<<"/"<<max_pen<<endl;
	     double r = random() / double(RAND_MAX);
	     if (ep > r) 
	       {
//		  if (population[idx]->penalty == min_pen)
//		    cout<<"Best extinction "<<ep<<" "<<r<<endl;
//		  cout<<"extinction"<<endl;
		  population[idx]->penalty = black_label;
		  ext++;
	       }
	  }
     }

   extinction();
   for (size_t i = 0 ; i < population.size() ; i++)
     if (population[i]->penalty == black_label)
       {
	  cerr<<"Error | extinction_proportional | internal"<<endl;
	  exit(EXIT_FAILURE);
       }
}
Ejemplo n.º 4
0
void population_mis::reset(MISConfig & config, graph_access & G) {
    extinction();
    init(config, G);
}
Ejemplo n.º 5
0
population_mis::~population_mis() {
    extinction();
}