PopulationSPtr operator()(PopulationSPtr parent_pop) { std::vector<IndividualSPtr> a1, a2; for (int i = 0; i < parent_pop->populationSize(); ++i) { a1.push_back((*parent_pop)[i]); a2.push_back((*parent_pop)[i]); } std::shuffle(a2.begin(), a2.end(), random_number_gen); //Possible for a1[i] and a2[i] to be same indiviudal. PopulationSPtr child_pop(new Population); for (int i = 0; i < parent_pop->populationSize(); ++i) { child_pop->push_back(IndividualSPtr( new Individual(*(tournament(a1[i], a2[i]))))); } return (child_pop); }
int dgea_alg::run() { timer elapsed_t; // retrieve algorithm parameters size_t pop_size=m_ppara->get_pop_size(); size_t num_dims=m_ppara->get_dim(); double vtr=m_ppara->get_vtr(); double d_h=m_ppara->get_dh(); double d_l=m_ppara->get_dh(); int m_cur_run; int max_run=m_ppara->get_max_run(); // run/trial number //shared_ptr<progress_display> pprog_dis; //// algorithm progress indicator from boost //alloc_prog_indicator(pprog_dis); // allocate pop population pop(pop_size); allocate_pop(pop,num_dims); population child_pop(pop_size); allocate_pop(child_pop,num_dims); // generate algorithm statistics output file name ofstream stat_file(m_com_out_path.stat_path.c_str()); // alloc stop condition alloc_stop_cond(); for(m_cur_run=0; m_cur_run<max_run; ++m_cur_run) { reset_run_stat(); set_orig_pop(pop); update_diversity(pop); print_run_times(stat_file,m_cur_run+1); print_run_title(stat_file); // output original population statistics print_gen_stat(stat_file,1,m_alg_stat); record_gen_vals(m_alg_stat,m_cur_run); m_cur_gen=1; int mode=exploit; while ( false==(*m_pstop_cond) ) // for every iteration { update_mode(mode,d_l,d_h); gen_child(mode,pop,child_pop); eval_pop(child_pop, *m_pfunc, m_alg_stat); select(pop,child_pop); stat_pop(pop, m_alg_stat); update_search_radius(); update_diversity(pop); print_gen_stat(stat_file,m_cur_gen+1,m_alg_stat); record_gen_vals(m_alg_stat,m_cur_run); update_conv_stat(vtr); m_cur_gen++; }// while single run termination criterion is not met // single run end stat_run(pop,m_cur_run);// stat single run for algorithm analysis if ( is_final_run(m_cur_run,max_run) ) print_run_stat(stat_file,m_alg_stat,max_run); /*if ( !run_once ) ++(*pprog_dis); */ } print_avg_gen(stat_file,m_alg_stat.run_avg_gen); // stat and output average time per run by second m_alg_stat.run_avg_time=elapsed_t.elapsed(); m_alg_stat.run_avg_time /= (max_run*1.0); print_avg_time(stat_file,m_alg_stat.run_avg_time); print_best_x(stat_file,m_alg_stat.bst_ind); write_stat_vals(); cout<<endl;// flush cout output return 0; }// end function Run