Ejemplo n.º 1
0
gene_t_p * Gene::get_random_node(){
  node_list.clear();
  node_list.push_back(&t_tr);
  get_node_list(t_tr);
  mt19937 mt(rd());
  uniform_int_distribution<int> rd_int(0,node_list.size()-1);
  return node_list[rd_int(mt)];
}
Ejemplo n.º 2
0
int
l_R()
{	double a,b,c,d;
	int i,ch,sign=0,da,db,dc;
	a=b=c=d=0;
	da=db=dc=0;
	if(lcount>0) return(0);
	ltype=0;
	for(GETC(ch);isblnk(ch);GETC(ch));
	if(ch==',')
	{	lcount=1;
		return(0);
	}
	if(ch=='/')
	{	lquit=1;
		return(0);
	}
	ungetc(ch,cf);
	da=rd_int(&a);
	if(da== -1) sign=da;
	if(GETC(ch)!='*')
	{	ungetc(ch,cf);
		db=1;
		b=a;
		a=1;
	}
	else
		db=rd_int(&b);
	if(GETC(ch)!='.')
	{	dc=c=0;
		ungetc(ch,cf);
	}
	else	dc=rd_int(&c);
	if(isexp(GETC(ch))) db=rd_int(&d);
	else
	{	ungetc(ch,cf);
		d=0;
	}
	lcount=a;
	if(!db && !dc)
		return(0);
	if(db && b<0)
	{	sign=1;
		b = -b;
	}
	for(i=0;i<dc;i++) c/=10;
	b=b+c;
	for(i=0;i<d;i++) b *= 10;
	for(i=0;i< -d;i++) b /= 10;
	if(sign) b = -b;
	ltype=TYLONG;
	lx=b;
	return(0);
}
Ejemplo n.º 3
0
gene_t_p Gene::get_random_tree(){
  //ランダムな木を再帰的に生成する
  gene_t_p tr = new gene_t;
  mt19937 mt(rd());
  uniform_real_distribution<double> rd_double(0.0,1.0);
  if(rd_double(mt)<RAND_FRONT){
    tr->mov = front;
  }else if(rd_double(mt) < RAND_FRONT + RAND_LR){
    tr->mov = l;
  }else if(rd_double(mt) < RAND_FRONT + RAND_LR*2.0){
    tr->mov = r;
  }else if(rd_double(mt) < RAND_FRONT + RAND_LR*2.0+RAND_IF){
    tr->mov = if_f;
    do{
    tr->lt = get_random_tree();
    tr->rt = get_random_tree();
    }while(tr->lt->mov == tr->rt->mov && tr->lt->mov != if_f && tr->lt->mov != proc);
    uniform_int_distribution<int> rd_int(0,NUM_IF-1);
    tr->n_func = rd_int(mt);
    switch(tr->n_func){
    case 0:
      tr->p = &Snake::get_l_snake;
      break;
    case 1:
      tr->p = &Snake::get_f_snake;
      break;
    case 2:
      tr->p = &Snake::get_r_snake;
      break;
    case 3:
      tr->p = &Snake::get_l_food;
      break;
    case 4:
      tr->p = &Snake::get_f_food;
      break;
    case 5:
      tr->p = &Snake::get_r_food;
      break;
    case 6:
      tr->p = &Snake::get_food_front;
      break;
    case 7:
      tr->p = &Snake::get_food_left_side;
      break;
    case 8:
      tr->p = &Snake::get_food_right_side;
      break;
     default:
       printf("Error if function\n");
       exit(1); 
    }
    
  }else{
    tr->mov = proc;
    do{
      tr->lt = get_random_tree();
      tr->rt = get_random_tree();
    }while(tr->lt->mov == tr->rt->mov && tr->lt->mov != if_f && tr->lt->mov != proc);
    
  }
  return tr;
}