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

📄 getpar~1.c

📁 压缩包内内容有:《遗传算法——理论、应用与软件实现》中所附源程序C或C++代码文件及其可执行文件以及遗传算法相关自由软件及代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  )
#else

VOID readparams(pop,i,f)
  pop_struct 	*pop;
  int		i;
  FILE		*f;
#endif
{
  char	buf[132], name[132], val[132];
  unsigned long seed;
  FILE *tmp;

  while (fgets(buf,132,f) != (char *)NULL) {
    if (buf[0] == '#') continue;
    sscanf(buf,"%s = %s", name, val);
    if (!strcasecmp("seed",name)) {
      sscanf(val,"%ld",&seed);
      set_seed(seed);
    } else if (!strcasecmp("steady_state",name)) {
      sscanf(val,"%d",&(pop[i].steady_state));
    } else if (!strcasecmp("population_size",name)) {
      sscanf(val,"%d",&(pop[i].population_size));
    } else if (!strcasecmp("load_from_file",name)) {
      sscanf(val,"%s",  pop[i].load_from_file);
      if ((tmp=fopen(pop[i].load_from_file,"r")) == (FILE *)NULL) {
	fprintf(stderr,"Error: load_from_file not found: %s\n",
		pop[i].load_from_file);
	exit(1);
      }
      else {
	fclose(tmp);
      }
    } else if (!strcasecmp("checkpoint_frequency",name)) {
      sscanf(val,"%d",&(CHECKPOINT_FREQUENCY));
    } else if (!strcasecmp("max_depth_for_new_trees",name)) {
      sscanf(val,"%d",&(pop[i].max_depth_for_new_trees));
    } else if (!strcasecmp("max_depth_after_crossover",name)) {
      sscanf(val,"%d",&(pop[i].max_depth_after_crossover));
    } else if (!strcasecmp("max_mutant_depth",name)) {
      sscanf(val,"%d",&(pop[i].max_mutant_depth));
    } else if (!strcasecmp("grow_method",name)) {
      if (!strcasecmp(val,"FULL")) {
	pop[i].grow_method = FULL;
      } else if (!strcasecmp(val,"GROW")) {
	pop[i].grow_method = GROW;
      } else if (!strcasecmp(val,"RAMPED")) {
	pop[i].grow_method = RAMPED;
      } else {
	fprintf(stderr,"readparams(): bad grow_method val name %s\n",val);
      }
    } else if (!strcasecmp("selection_method",name)) {
      if (!strcasecmp(val,"TOURNAMENT")) {
	pop[i].selection_method = TOURNAMENT;
      } else if (!strcasecmp(val,"OVERSELECT")) {
	pop[i].selection_method = OVERSELECT;
      } else if (!strcasecmp(val,"FITNESSPROP")) {
	pop[i].selection_method = FITNESSPROP;
      } else {
	fprintf(stderr,"readparams(): bad selection_method val name %s\n",val);
      }
    } else if (!strcasecmp("tournament_K",name)) {
      sscanf(val,"%d",&(pop[i].tournament_K));
    } else if (!strcasecmp("deme_search_radius_sigma",name)) {
      sscanf(val,"%f",&(pop[i].deme_search_radius_sigma));
    } else if (!strcasecmp("crossover_func_pt_fraction",name)) {
      sscanf(val,"%f",&(pop[i].crossover_func_pt_fraction));
    } else if (!strcasecmp("crossover_any_pt_fraction",name)) {
      sscanf(val,"%f",&(pop[i].crossover_any_pt_fraction));
    } else if (!strcasecmp("fitness_prop_repro_fraction",name)) {
      sscanf(val,"%f",&(pop[i].fitness_prop_repro_fraction));
    } else if (!strcasecmp("parsimony_factor",name)) {
      sscanf(val,"%f",&(pop[i].parsimony_factor));
    } else if (!strcmp("_END_OF_PARAMETERS_POPULATION",name)) {
      int popnum;
      sscanf(val,"%d",&popnum);
      if (popnum != i) {
	fprintf(stderr,"Warning: readparams() possible population mismatch\n");
      }
      break;
    } else {
      fprintf(stderr,"readparams(): bad param name %s\n",name);
    }
  }
}

#ifdef ANSI_FUNC

VOID writeparams(
  pop_struct 	*pop,
  int		p,
  FILE 		*f
  )
#else

VOID writeparams(pop,p,f)
  pop_struct 	*pop;
  int		p;
  FILE		*f;
#endif
{
  fprintf(f, "seed = %ld\n",                    get_seed());
  fprintf(f,"checkpoint_frequency = %d\n",	CHECKPOINT_FREQUENCY);
  fprintf(f,"population_size = %d\n",		pop[p].population_size);
  fprintf(f,"steady_state = %d\n",		pop[p].steady_state);
  if (pop[p].load_from_file[0] != '\0') {
    fprintf(f,"load_from_file = %s\n", 		pop[p].load_from_file);
  }
  fprintf(f,"max_depth_for_new_trees = %d\n",	pop[p].max_depth_for_new_trees);
  fprintf(f,"max_depth_after_crossover = %d\n",	pop[p].max_depth_after_crossover);
  fprintf(f,"max_mutant_depth = %d\n",		pop[p].max_mutant_depth);
  fprintf(f,"grow_method = ");
  switch(pop[p].grow_method) {
  case FULL:
    fprintf(f,"FULL\n");
    break;
  case GROW:
    fprintf(f,"GROW\n");
    break;
  case RAMPED:
    fprintf(f,"RAMPED\n");
    break;
  }
  fprintf(f,"selection_method = ");
  switch(pop[p].selection_method) {
  case TOURNAMENT:
    fprintf(f,"TOURNAMENT\n");
    break;
  case OVERSELECT:
    fprintf(f,"OVERSELECT\n");
    break;
  case FITNESSPROP:
    fprintf(f,"FITNESSPROP\n");
  }
  fprintf(f,"tournament_K = %d\n",
	  pop[p].tournament_K);
  fprintf(f,"deme_search_radius_sigma = %f\n",
	  pop[p].deme_search_radius_sigma);
  fprintf(f,"crossover_func_pt_fraction = %f\n",
	  pop[p].crossover_func_pt_fraction);
  fprintf(f,"crossover_any_pt_fraction = %f\n",
	  pop[p].crossover_any_pt_fraction);
  fprintf(f,"fitness_prop_repro_fraction = %f\n",
	  pop[p].fitness_prop_repro_fraction);
  fprintf(f,"parsimony_factor = %f\n",
	  pop[p].parsimony_factor);
}


#ifdef ANSI_FUNC
void checkpoint (
  int           numpops,
  int           numgens,
  int           demes,
  int           demerows,
  int           demecols,
  pop_struct 	*pop,
  int		g
  )
#else
VOID checkpoint(numpops,numgens,demes,demerows,demecols,pop,g)
  int           numpops;
  int           numgens;
  int           demes;
  int           demerows;
  int           demecols;
  pop_struct	*pop;
  int		g;
#endif
{
  int	i, p;
  char  ckptfile[256], cmd_buf[256];
  FILE	*cf;

  sprintf(ckptfile,"gpc_%ld_%d.ckpt",gethostid(),getpid());
  
  cf = fopen(ckptfile,"w");

  fprintf(cf, "checkpoint_for_generation =  %d\n", g);
  fprintf(cf, "random_seed = %ld\n",get_seed());
  fprintf(cf, "number_of_populations = %d\n",numpops);
  fprintf(cf, "number_of_generations = %d\n",numgens);
  fprintf(cf, "demes = %d\n",demes);
  fprintf(cf, "number_of_deme_rows = %d\n",demerows);
  fprintf(cf, "number_of_deme_columns = %d\n",demecols);
  fprintf(cf, "gaussian_noise_uniform1 = %22.20f\n",gaussian_noise_uniform1);
  fprintf(cf, "gaussian_noise_uniform2 = %22.20f\n",gaussian_noise_uniform2);
  fprintf(cf, "gaussian_noise_temp = %22.20f\n",gaussian_noise_temp);
  fprintf(cf, "gaussian_noise_toggle = %d\n",gaussian_noise_toggle);

  fprintf(cf,"\n");

  for (p=0; p<numpops; p++) {
    writeparams(pop, p, cf);
    fprintf(cf,"_END_OF_PARAMETERS_POPULATION = %d\n",p);
  }

  for (p=0; p<numpops; p++) {
    fprintf(cf,"_START_OF_POPULATION_ = %d\n",p);
    for (i=0; i<pop[p].population_size; i++) {
      write_tree(pop, pop[p].population[i], pop[p].ckpt_format, cf);
    }
  }

  for (p=0; p<numpops; p++) {
    fprintf(cf, "best_of_run_fitness = %22.20f\n",pop[p].best_of_run_fitness);
    fprintf(cf, "best_of_run_gen = %d\n",pop[p].best_of_run_gen);
    write_tree(pop, pop[p].best_of_run, pop[p].ckpt_format, cf);
  }

  fclose(cf);
  sprintf(cmd_buf,"%s %s &",COMPRESS,ckptfile);
  system(cmd_buf);
}


#ifdef ANSI_FUNC
void recover_params (
  FILE		*cf,
  int           *numpops,
  int           *numgens,
  int           *demes,
  int           *demerows,
  int           *demecols,
  pop_struct	**pop,
  pop_struct    ****grid,
  int		*g
  )
#else
VOID recover_params (cf,numpops,numgens,demes,demerows,demecols,pop,grid,g)
  FILE		*cf;
  int           *numpops;
  int           *numgens;
  int           *demes;
  int           *demerows;
  int           *demecols;
  pop_struct	**pop;
  pop_struct    ****grid;
  int		*g;
#endif
{
  int 	p;
  int	i, j;
  unsigned long 	seed;
  char	buf[132], name[132], val[132];

  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("checkpoint_for_generation",name)) { 
    sscanf(val, "%d", g);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("random_seed",name)) { 
    sscanf(val, "%ld",&seed);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("number_of_populations",name)) { 
    sscanf(val, "%d",numpops);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("number_of_generations",name)) { 
    sscanf(val, "%d",numgens);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("demes",name)) { 
    sscanf(val, "%d",demes);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("number_of_deme_rows",name)) { 
    sscanf(val, "%d",demerows);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("number_of_deme_columns",name)) { 
    sscanf(val, "%d",demecols);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("gaussian_noise_uniform1",name)) { 
    sscanf(val, "%f",&gaussian_noise_uniform1);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("gaussian_noise_uniform2",name)) { 
    sscanf(val, "%f",&gaussian_noise_uniform2);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("gaussian_noise_temp",name)) { 
    sscanf(val, "%f",&gaussian_noise_temp);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }
  fscanf(cf,"%s = %s", name, val);
  if (!strcmp("gaussian_noise_toggle",name)) { 
    sscanf(val, "%d",&gaussian_noise_toggle);
  }
  else {
    fprintf(stderr,"Error reading checkpoint file.\n");
  }

  fscanf(cf,"\n");
  
  *pop = (pop_struct *) malloc(*numpops*sizeof(pop_struct));
  if (*demes) {
    *grid = (pop_struct ***) malloc2(*demerows,*demecols*sizeof(pop_struct *));
    for (i=0;i<*demerows;i++) {
      for (j=0;j<*demecols;j++) {
	(*grid)[i][j] = (pop_struct *) malloc(*numpops*sizeof(pop_struct));
      }
    }
  }

  for (p = 0; p < *numpops; p++) {
    (*pop)[p].load_from_file = (char *) malloc(132*sizeof(char));
    readparams(*pop, p, cf);
    (*pop)[p].load_from_file[0] = '\0'; /* don't load from file upon recovery */
  }

  set_seed(seed);

}

⌨️ 快捷键说明

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