Пример #1
0
		int mode_alg::run()
		{
			if ( !m_ppara )
				return -1;

			timer elapsed_t;
			// retrieve algorithm parameters
			int pop_size=m_ppara->get_pop_size();
			int max_pop_size=2*pop_size;
			int num_dims=m_ppara->get_dim();
			int num_obj=m_ppara->get_obj_num();
			int min_gen=m_ppara->get_max_gen();
			double pr_val,f_val;
			pr_val=m_ppara->get_pr();
			f_val=m_ppara->get_f();
			// my_sDE SPECIFIC
			// jDE SPECIFIC
			double f_low_bnd,f_up_bnd;
			f_low_bnd=m_ppara->get_f_low_bnd();
			f_up_bnd=m_ppara->get_f_up_bnd();
			double tau_1,tau_2;
			tau_1=m_ppara->get_tau_1();
			tau_2=m_ppara->get_tau_2();
			int out_interval=m_ppara->get_out_interval();
			int trunc_type=m_ppara->get_trunc_type();
			bool plot=m_ppara->get_plot_flag();
			string plot_script=m_ppara->get_plot_script();

			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 original pop and trial pop
			population pop(pop_size);
			allocate_pop(pop,num_dims,stra_num,num_obj);
			population trial_pop;

			// generate algorithm statistics output file name
			ofstream stat_file(m_com_out_path.stat_path.c_str());
			// allocate stop condition object dynamically
			alloc_stop_cond();

			idx_array pop_idx(pop_size-1);

			// random U(0,1) generator
			uniform_01<> dist_01;
			variate_generator<mt19937&, uniform_01<> > rnd_01(gen, dist_01);

			// generator for random DIMENSION index
			uniform_int<> dist_dim(0,num_dims-1);
			variate_generator<mt19937&, uniform_int<> > rnd_dim_idx(gen, dist_dim);

			individual trial_ind;
			allocate_ind(trial_ind,num_dims,stra_num,num_obj);
			// iteration start
			for ( m_cur_run=0;m_cur_run<max_run;m_cur_run++ )
			{
				bool has_stag;
				int stag_gen;
				reset_run_stat();
				m_de_stat.reset();
				/*m_succ_f.clear();
				m_succ_cr.clear();*/
				int z;
				// f,pr initialial value
				for ( z=0;z<pop_size;z++ )
				{
					pop[z].stra[f].assign(1,f_val);
					pop[z].stra[pr].assign(1,pr_val);
				}
				set_orig_pop(pop);
				update_diversity(pop);

				calc_de_para_stat(pop);
				record_de_para_stat(m_cur_run);

				print_run_times(stat_file,m_cur_run+1);
				print_run_title(stat_file);
				// output original population statistics

				m_cur_gen=1;
				stag_gen=0;
				shared_ptr<ofstream> ppop_file;
				shared_ptr<mutex> ppop_mut;
				
				while ( false==(*m_pstop_cond) ) // for every iteration
				{
					m_de_stat.reset();
					has_stag=true;
					int rnd_dim;
					double dim_mut_chance;
					int i,j,k;
					/*double f_i;
					double pr_i;*/
					if ( is_output_gen(m_cur_gen,out_interval) )
					{
						ppop_file=shared_ptr<ofstream>(new ofstream("Output//all_pop.out"));
						ppop_mut=shared_ptr<mutex>((new mutex));
					}
					trial_pop.clear();
					trial_pop.reserve(max_pop_size);// operator =
					////  recalculate succ_f_mean and succ_f_sigma periodically
     //               if ( is_learn_gen(m_cur_gen,learn_p) )
					//{
					//	int f_size=m_succ_f.size();
					//	int pr_size=m_succ_cr.size();
					//	if ( f_size && pr_size ) 
					//		calc_bi_norm_var(m_succ_f,m_succ_cr,m_bi_norm_var);
					//	else
					//	{

					//	}
					//	m_succ_f.clear();
					//	m_succ_cr.clear();
					//}// if ( is_learn_gen(m_cur_gen,learn_p) )

					for ( i=0;i<pop_size;i++ )
					{
						// generating three mutually different individual index using random shuffle
						// initialize index vector

						for ( k=0;k<pop_size-1;k++ )
						{
							if ( k<i )
								pop_idx[k]=k;
							else
								pop_idx[k]=(k+1)%pop_size;// EXCLUDE i
						}
						random_shuffle(pop_idx.begin(),pop_idx.end());
						int i1,i2,i3;
						// int i4,i5;// i!=i1!=i2!=i3!=i4!=i5
						i1=pop_idx[0];
						i2=pop_idx[1];
						i3=pop_idx[2];
						/*i4=arc_idx[3];
						i5=arc_idx[4];*/

						//double pr_chance=rnd_01();
						//if ( pr_chance<=tau_2 )
						//{
						//	pr_i=rnd_01();
						//	trial_ind.stra[pr][0]=pr_i;
						//}
						//else
						//	pr_i=trial_ind.stra[pr][0];

						//// scaling factor F self-adaptive update equation
						//double f_chance=rnd_01();
						//if ( f_chance<=tau_1 )
						//{
						//	f_i=f_low_bnd+rnd_01()*f_up_bnd;
						//	trial_ind.stra[f][0]=f_i;
						//}
						//else
						//	f_i=trial_ind.stra[f][0];// keep unchanged at thsi iteration

						rnd_dim=rnd_dim_idx();// choose a random dimension as the mutation target

						for ( j=0;j<num_dims;j++ )
						{
							dim_mut_chance=rnd_01();
							
							if ( rnd_dim==j || dim_mut_chance<=pr_val )
							{
								// insufficent elitist size,generate perturbation from current population rather than external elitist archive
								trial_ind.x[j]=pop[i1].x[j]+f_val*(pop[i2].x[j]-pop[i3].x[j]);
								//+f_i*(trial_pop[i4].x[j]-trial_pop[i5].x[j]);
								// boundaries check
								bound_check(trial_ind.x[j],pop[i].x[j],j);
							}
							else
								trial_ind.x[j]=pop[i].x[j];
						}// for every dimension

						eval_ind(trial_ind,*m_pfunc,m_alg_stat);
						int comp_res=check_dominance(trial_ind,pop[i]);
						if ( worse!=comp_res )
						{
							if ( better==comp_res )
								trial_pop.push_back(trial_ind);
							else
							{
								trial_pop.push_back(trial_ind);
								trial_pop.push_back(pop[i]);
							}
						}
						else
							trial_pop.push_back(pop[i]);
					}// for every point
					// evaluate pop
					
					fill_nondominated_sort(trial_pop,pop,pop_size,trunc_type);

					if ( is_output_gen(m_cur_gen,out_interval) )
					{
						update_search_radius();
						update_diversity(pop);

						calc_de_para_stat(pop);
						record_gen_vals(m_alg_stat,m_cur_run);
						record_de_para_stat(m_cur_run);

						/*if ( run_once )
						++(*pprog_dis);*/

						// plot current population and external archive
						output_collection(*ppop_file,pop.begin(),pop.end());
						*ppop_file<<"\n"<<"\n";// output seperator
						output_if(*ppop_file,pop.begin(),pop.end(),front_pred());
						ppop_file->flush();
						if ( plot )
							thread(fwd_plot_fun,ppop_mut,m_cur_gen,
							0,
							0,is_final_out_gen(m_cur_gen,out_interval,min_gen),
							plot_script);
						// system("gnuplot plot_all_point_2d.p");
					}

					m_cur_gen++;
				}// while single run termination criterion is not met
				perf_indice p_ind,nsga2_p_ind;
				d_mat best_pop;
				copy_obj_if(pop.begin(),pop.end(),best_pop,front_pred());

				d_mat nsga2_best_pop;
				load_pop("nsga2_zdt3_best_pop.out",2,nsga2_best_pop);
				zdt3_assess(nsga2_best_pop,1000,point(11,11),nsga2_p_ind);
				cout<<"\n"
					<<"nsga2 results:"
					<<"\n"
					<<"convergence metric gamma="<<nsga2_p_ind.gamma
					<<"\n"
					<<"frontier diversity metric delta="<<nsga2_p_ind.delta
					<<"\n"
					<<"dominance metric hyper-volume="<<nsga2_p_ind.hv
					<<"\n";
				zdt3_assess(best_pop,1000,point(11,11),p_ind);
				cout<<"\n"
					<<"outbound count="<<m_alg_stat.all_ob_num
					<<"\n"
					<<"population diversity="<<m_alg_stat.pos_diver
					<<"\n"
					<<"mean search radius="<<m_alg_stat.avg_radius
					<<"\n"
					<<"stagnation indicator stag_gen="<<stag_gen
					<<"\n"
					<<"convergence metric gamma="<<p_ind.gamma
					<<"\n"
					<<"frontier diversity metric delta="<<p_ind.delta
					<<"\n"
					<<"dominance metric hyper-volume="<<p_ind.hv
					<<"\n";
				// single run end
				
				/*if ( !run_once )
				++(*pprog_dis);*/
			}// for every run

			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);
			write_stat_vals();
			cout<<endl;// flush cout output
			return 0;
		}// end function Run
Пример #2
0
int
main(int argc,char **argv)
{
      int rv = 0,i = 0,j=0;
      int datalen = sizeof(time_t) + 2*sizeof(uint32_t);
      int c = 0;

      char *ca[] = {"key.pub","key.prv","key.par"};
      uint8_t *pmsg = NULL,*smsg = NULL;
      uint8_t **msga = NULL,*pmsga = NULL;
     
      //timing vars
      clock_t cstart =0,cend=0;      
      struct timeval start,end;
      int subtime = 0;
      double totsubtime=0.0;

      setup_params_t *setup = NULL;
      ibe_keypair_t *ibk[MAXASPATHLEN]; //one key per as
      ibe_signature_t *signature[MAXPFIXNUM]; //one aggregated signature per prefix
      time_t tstamps[(MAXASPATHLEN+1)*MAXPFIXNUM];
      time_t rsatstamps[(MAXASPATHLEN+1)*MAXPFIXNUM];
      size_t vlen[MAXASPATHLEN +1];

      //RSA
      struct rsa_public_key **rsa_pub = NULL;
      struct rsa_private_key **rsa_priv = NULL;
      mpz_t *vsign = NULL;
      long int nonces[MAXPFIXNUM*MAXPFIXLEN];
      int rsadatalen =sizeof(time_t) + 2*sizeof(uint32_t)+ sizeof(long int) + sizeof(uint8_t) + sizeof(in_addr_t); 

      while ((c=getopt (argc,argv,"a:p:")) != -1) {
            switch(c) {
                  case 'a':
                        aspathlen = strtol(optarg, NULL, 10);
                        if(aspathlen > MAXASPATHLEN) {
                              die("The specified aspathlen execeed MAXASPATHLEN(%d)\n",MAXASPATHLEN);
                        }
                        break;
                  case 'p':
                        pfixnum = strtol(optarg, NULL, 10);
                        if(pfixnum > MAXPFIXNUM) {
                              die("The specified pfixnum execeed MAXPFIXNUM(%d)\n",MAXPFIXNUM);
                        }

                        break;
                  default:
                        die("Invalid input option\n Aborting.\n");
            }

      }
      rv = setup_load (ca[0],ca[1],ca[2],&setup);
      if(rv < 0)
            die("Cannot initialize setup\n Aborting. \n");

      //initialize IBE structures
      bzero(ibk,MAXASPATHLEN*sizeof(ibe_keypair_t *));
      bzero(signature,MAXPFIXNUM*sizeof(ibe_signature_t *));
      bzero(&tstamps,MAXASPATHLEN*MAXPFIXNUM * sizeof(time_t));
      bzero(&rsatstamps,MAXASPATHLEN*MAXPFIXNUM * sizeof(time_t));

      rv = create_aslist(&ibk[0],setup); 
      if(rv < 0)
    	  die("create_aslist");

      msga = (uint8_t **) malloc((MSG_NUM)* sizeof(uint8_t*));
      if(!msga) {
    	  die("malloc msga :: %s",strerror(errno));
      }

      for(i=0; i < MSG_NUM; i++) {
    	  pmsga = (uint8_t * ) malloc(MAX_VRFY_LEN);
    	  if(!pmsga) {
        	  die("malloc msga[%d] :: %s",i,strerror(errno));

    	  }
        bzero(pmsga,MAX_VRFY_LEN);
    	  msga[i] = pmsga;
      }

      vlen[0] = 9;
      for(i = 1; i < (MSG_NUM);i++){ 
    	  vlen[i] = datalen;
      }

      //initialize RSA structures 
      bzero(&nonces,MAXASPATHLEN*MAXPFIXNUM * sizeof(long int));

      rsa_pub = (struct rsa_public_key **) malloc((MSG_NUM)* sizeof(struct rsa_public_key *));
      rsa_priv = (struct rsa_private_key **)malloc((MSG_NUM) * sizeof(struct rsa_private_key *)) ;

      if(!rsa_pub || ! rsa_priv)
            die("init_rsa_array :: %s\n",strerror(errno));
      
      init_rsa_array(rsa_pub,rsa_priv);
      vsign = (mpz_t *) malloc(sizeof(mpz_t) * MSG_NUM * pfixnum);
      if(!vsign)
            die("init_rsa_sign() :: %s\n",strerror(errno));
      
      //----------------- Timing goes here -----------------
      //create the verification message
      //aggregate the signature to assigned prefixes (by AS1)

      //for AS2 to ASn-1
      pmsg = smsg = &upvrfy[0];

      //printf("#TEST SUMMARY\n");
      //printf("#AS path length:%6d\n",aspathlen);
      //printf("#Number of prefixes:%2d\n",pfixnum);
      printf("%d %d ",aspathlen,pfixnum);
      
      //printf("=======================================\n");
      //printf("====== IBE SIGNATURE TIMING TEST ======\n");
      //printf("=======================================\n");
      //for each as
      gettimeofday(&start,NULL);
      //cstart = clock();
      for(j = 0 ; j < (aspathlen-1); j++ ){
        //for each prefix
    	  for(i = 0; i < pfixlist->size; i++) {
              //generate the current timestamp (for prefix + as couple)
    		  tstamps[j*pfixnum + i] = time(NULL);
		  //update the verification message
        	  memcpy(pmsg,&tstamps[j*pfixnum + i],sizeof(time_t));
        	  pmsg+=sizeof(time_t);

        	  memcpy(pmsg,&ibk[j]->id->asnum,sizeof(uint32_t));
        	  //pmsg+=sizeof(ibk[j]->id->asnum);
        	  pmsg+=sizeof(uint32_t);

        	  memcpy(pmsg,&ibk[j+1]->id->asnum,sizeof(uint32_t));
        	  //pmsg+=sizeof(ibk[j+1]->id->asnum);
        	  pmsg+=sizeof(uint32_t);

		  //aggregate signature to prefixes
        	  ibe_sign(pfixlist->pf_sign[i],ibk[j],(const uint8_t * )smsg,pmsg-smsg);
              
              //printf(">> %d %d %d\n",tstamps[j*pfixnum + i],ibk[j]->id->asnum,ibk[j+1]->id->asnum);
              //print_msg(smsg);
        	  smsg = pmsg;
    	  }
      }
      //cend = clock();
      gettimeofday(&end,NULL);
      print_avg_time(start,end,(aspathlen-1));
      //print_time_clock(cstart,cend);
      //printf("=======================================\n");
      //printf("====== RSA SIGNATURE TIMING TEST ======\n");
      //printf("=======================================\n");
      //for each as
      pmsg = smsg = &rsaupvrfy[0];
      gettimeofday(&start,NULL);
      //cstart = clock();
      for(j = 0 ; j < (aspathlen-1); j++ ){
        //for each prefix
    	  for(i = 0; i < pfixlist->size; i++) {
              //add some randomness
              nonces[j*pfixnum +i] = random(); 
              memcpy(pmsg,&nonces[j*pfixnum + i],sizeof(long int));
        	  pmsg+=sizeof(long int);

              //generate the current timestamp (for prefix + as couple)
    		  rsatstamps[j*pfixnum + i] = time(NULL);
		  //update the verification message
        	  memcpy(pmsg,&rsatstamps[j*pfixnum + i],sizeof(time_t));
        	  pmsg+=sizeof(time_t);

        	  memcpy(pmsg,&ibk[j]->id->asnum,sizeof(uint32_t));
        	  pmsg+=sizeof(uint32_t);

        	  memcpy(pmsg,&ibk[j+1]->id->asnum,sizeof(uint32_t));
        	  pmsg+=sizeof(uint32_t);
        	  
              memcpy(pmsg,&pfixlist->ina[i].s_addr,sizeof(in_addr_t));
        	  pmsg+=sizeof(struct in_addr);
              
              memcpy(pmsg,&pfixlist->netmask[i],sizeof(uint8_t));
        	  pmsg+=sizeof(uint8_t);

              //sign prefix
        	  rsa_sign_msg(rsa_priv[j],vsign[j*pfixnum +i],(uint8_t * )smsg,pmsg-smsg);

              smsg = pmsg;
    	  }
      }
      //cend = clock(); 
      gettimeofday(&end,NULL);
      print_avg_time(start,end,(aspathlen-1));
      //print_time(start,end);
      //print_time_clock(cstart,cend);
      
      //printf("==========================================\n");
      //printf("====== IBE VERIFICATION TIMING TEST ======\n");
      //printf("==========================================\n");
      pmsg =  smsg = &upvrfy[0];
      gettimeofday(&start,NULL);
      //cstart = clock();
      //----------------- Timing goes here -----------------
      for(i=0; i < pfixlist->size; i++) {
           //build array of messages
            build_msg_array(msga,smsg,tstamps,i,setup);
            //verfy aggregated message
            rv = ibe_vrfy(pfixlist->pf_sign[i],setup,(const uint8_t **)msga,vlen,&subtime);
            if(rv != SIGN_VALID) printf("Invalid signature :( \n");;
            
            //aggregate signature (by ASn)
            smsg+=datalen;
            totsubtime +=subtime;
      }
      //cend = clock(); 
      gettimeofday(&end,NULL);
      print_time_sub(start,end,totsubtime);
      //print_time_clock(cstart,cend);

      //printf("==========================================\n");
      //printf("====== RSA VERIFICATION TIMING TEST ======\n");
      //printf("==========================================\n");
      //start = clock();
      gettimeofday(&start,NULL);
      //cstart = clock();
      
      int z = 0;
      while(z < 2) {
            pmsg =  smsg = &rsaupvrfy[0];
            //----------------- Timing goes here -----------------
            for(j = 0 ; j < (aspathlen-1); j++ ){
                  for(i=0; i < pfixlist->size; i++) {
                        //vrfy rsa signature
                        rv = rsa_vrfy_msg(rsa_pub[j],vsign[j*pfixnum +i],smsg,rsadatalen);
                        if(rv != SIGN_VALID) printf("Invalid signature :( \n");;

                        //go to next message
                        smsg+=rsadatalen;
                  }
            }
            z++;
      }
      //cend = clock(); 
      gettimeofday(&end,NULL);
      print_time(start,end); 
      //print_time_clock(cstart,cend);
      printf("\n");
      //cleanup
      for(i = 0; i < MAXASPATHLEN ; i++) {
    	  ibe_keypair_clear(ibk[i]);
      }

      for(i=0; i < MAXASPATHLEN; i++) {

    	  if(msga[i])
    		  free(msga[i]);
      }
      free(msga);

      return 0;
}
Пример #3
0
		int jde_alg::run()
		{
			if ( !m_ppara )
				return -1;

			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 f_low_bnd,f_up_bnd;
			f_low_bnd=m_ppara->get_f_low_bnd();
			f_up_bnd=m_ppara->get_f_up_bnd();
			double tau_1,tau_2;
			tau_1=m_ppara->get_tau_1();
			tau_2=m_ppara->get_tau_2();
			
			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 original pop and trial pop
			population pop(pop_size);
			allocate_pop(pop,num_dims,stra_num);
			population trial_pop(pop_size);
			allocate_pop(trial_pop,num_dims,stra_num);

			// generate algorithm statistics output file name
			ofstream stat_file(m_com_out_path.stat_path.c_str());
			// allocate stop condition object dynamically
			alloc_stop_cond();

			size_t shuffle_size=pop_size-1;
			vector<int> vec_idx1(shuffle_size);

			// random U(0,1) generator
			uniform_01<> dist_01;
			variate_generator<mt19937&, uniform_01<> > rnd_01(gen, dist_01);

			// generator for random DIMENSION index
			uniform_int<> dist_dim(0,num_dims-1);
			variate_generator<mt19937&, uniform_int<> > rnd_dim_idx(gen, dist_dim);

			// iteration start
			for ( m_cur_run=0;m_cur_run<max_run;m_cur_run++ )
			{
				reset_run_stat();
				m_de_stat.reset();
				// jde SPECIFIC,initialize F value vector EVERY single run
				size_t i;
				for ( i=0;i<pop_size;i++ )
				{
					pop[i].stra[pr].assign(1,0.0);
					pop[i].stra[f].assign(1,0.0);
				}
				set_orig_pop(pop);
				update_diversity(pop);

				calc_de_para_stat(pop);
				record_de_para_stat(m_cur_run);
				record_gen_vals(m_alg_stat,m_cur_run);

				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);

				m_cur_gen=1;
				while ( false==(*m_pstop_cond) ) // for every iteration
				{
					m_de_stat.reset();
					int rnd_dim;
					double f_i;
					double pr_i;
					double dim_mut_chance;
					size_t i,j,k;

					trial_pop=pop;// operator =
					for ( i=0;i<pop_size;i++ )
					{
						// generating three mutually different individual index other than i using random shuffle
						// initialize index vector
						for ( k=0;k<shuffle_size;k++ )
						{
							if ( k<i )
								vec_idx1[k]=k;
							else
								// EXCLUDE i
								vec_idx1[k]=(k+1)%pop_size;
						}
						// random shuffle
						for ( k=0;k<shuffle_size;k++ )
						{
							// generator for random SHUFFLE VECTOR index
							uniform_int<> dist_uni_shuf(k,shuffle_size-1);
							variate_generator<mt19937&, uniform_int<> > rnd_shuf_idx(gen, dist_uni_shuf);
							int idx_tmp=rnd_shuf_idx();
							swap(vec_idx1[k],vec_idx1[idx_tmp]);
						}

						int i1,i2,i3;// i!=i1!=i2!=i3
						i1=vec_idx1[0];
						i2=vec_idx1[1];
						i3=vec_idx1[2];

						rnd_dim=rnd_dim_idx();

						double pr_chance=rnd_01();
						if ( pr_chance<=tau_2 )
						{
							pr_i=rnd_01();
							trial_pop[i].stra[pr][0]=pr_i;
						}
						else
							pr_i=trial_pop[i].stra[pr][0];
						
						// scaling factor F self-adaptive update equation
						double f_chance=rnd_01();
						if ( f_chance<=tau_1 )
						{
							f_i=f_low_bnd+rnd_01()*f_up_bnd;
							trial_pop[i].stra[f][0]=f_i;
						}
						else
							f_i=trial_pop[i].stra[f][0];// keep unchanged at thsi iteration

						for ( j=0;j<num_dims;j++ )
						{
							dim_mut_chance=rnd_01();
							if ( rnd_dim==j || dim_mut_chance<=pr_i )
							{
								trial_pop[i].x[j]=trial_pop[i1].x[j]+f_i*(trial_pop[i2].x[j]-trial_pop[i3].x[j]);
								// boundaries check
								bound_check(trial_pop[i].x[j],j);
							}
						}// for every dimension
					}// for every particle
					// evaluate pop
					eval_pop(trial_pop,*m_pfunc,m_alg_stat);
					update_pop(pop,trial_pop);
					stat_pop(pop,m_alg_stat);
					update_search_radius();
					update_diversity(pop);

					calc_de_para_stat(pop);
					record_de_para_stat(m_cur_run);
					record_gen_vals(m_alg_stat,m_cur_run);

					print_gen_stat(stat_file,m_cur_gen+1,m_alg_stat);
					update_conv_stat(vtr);

					/*if ( run_once )
					++(*pprog_dis);*/

					m_cur_gen++;
				}// while single run stop_condition is false

				// 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);*/
			}// for every run

			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
Пример #4
0
		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