亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? genera~1.c

?? 簡單遺傳算法經典例子!! SGPC: Simple Genetic Programming in C by Walter Alden Tackett and Aviram Carmi
?? C
字號:
/*
SGPC: Simple Genetic Programming in C
(c) 1993 by Walter Alden Tackett and Aviram Carmi
 
 This code and documentation is copyrighted and is not in the public domain.
 All rights reserved. 
 
 - This notice may not be removed or altered.
 
 - You may not try to make money by distributing the package or by using the
   process that the code creates.
 
 - You may not distribute modified versions without clearly documenting your
   changes and notifying the principal author.
 
 - The origin of this software must not be misrepresented, either by
   explicit claim or by omission.  Since few users ever read sources,
   credits must appear in the documentation.
 
 - Altered versions must be plainly marked as such, and must not be
   misrepresented as being the original software.  Since few users ever read
   sources, credits must appear in the documentation.
 
 - The authors are not responsible for the consequences of use of this 
   software, no matter how awful, even if they arise from flaws in it.
 
If you make changes to the code, or have suggestions for changes,
let us know!  (gpc@ipld01.hac.com)
*/

#ifndef lint
static char generations_c_rcsid[]="$Id: generations.c,v 2.13 1993/04/22 07:39:12 gpc-avc Exp gpc-avc $";
#endif

/*
 *
 * $Log: generations.c,v $
 * Revision 2.13  1993/04/22  07:39:12  gpc-avc
 * Removed old log messages
 *
 * Revision 2.12  1993/04/15  09:10:10  gpc-avc
 * Added bsd_qsort()
 *
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include "gpc.h"

#ifdef ANSI_FUNC

VOID generations(
  int		numpops,
  int		numgens,
  int		start_gen,
  pop_struct	*pop,
  int		demes,
  pop_struct	***grid,
  int		demerows,
  int		demecols
  )
#else

VOID generations(numpops,numgens,start_gen,pop,demes,grid,demerows,demecols)
  int		numpops;
  int		numgens;
  int		start_gen;
  pop_struct	*pop;
  int		demes;
  pop_struct	***grid;
  int		demerows;
  int		demecols;
#endif
{
  int	g, p, i, j;
  float valperf;

  for (g=start_gen; g<numgens; g++) {

    if (g) {
      for (p = 0; p<numpops; p++) {
	if (demes) {
	  for (i=0;i<demerows;i++) {
	    for (j=0;j<demecols;j++) {
	      if (pop[p].steady_state) {
		/* not strictly necessary, really, but removes what
		   i think would otherwise be a trend for the upper
		   left hand of the grid to have much lower fitness
		   than the lower right */
		breed_new_population(grid[random_int(demerows)]
				         [random_int(demecols)],
				     p,demes,demerows,demecols,
				     pop[p].steady_state);
	      } else  {
		breed_new_population(grid[i][j],p,demes,demerows,demecols,
				   pop[p].steady_state);
	      }
	    }
	  }
	} else {

	  breed_new_population(pop,p,0,0,0,pop[p].steady_state);
	}
	if (!(pop[p].steady_state)) {
	  free_population(pop,p);
	  load_new_population(pop,p);
	}
      }
    } else {
      /* generation 0 is random */
      initialize_populations(numpops,pop);
      for (p = 0; p<numpops; p++) {
	if (pop[p].steady_state) {
	  evaluate_fitness_of_populations(numpops,numgens,pop,p);
	  if (pop[p].parsimony_factor > 0.0) add_parsimony_to_fitness(pop,p);
	}
      }
    }

    /* NOTE that we breed ALL populations before we evaluate their fitness
       (except in the case of steady-state).  This is done to support
       co-evolution where there are multiple interacting populations
       who are co-evaluated at each generation */

    for (p = 0; p<numpops; p++) {

      if (!(pop[p].steady_state)) {
	zero_fitness_of_populations(numpops,pop,p);
	evaluate_fitness_of_populations(numpops,numgens,pop,p);
	if (pop[p].parsimony_factor > 0.0) add_parsimony_to_fitness(pop,p);
      }

      normalize_fitness_of_population(pop,p);

      sort_population_by_fitness(pop,p);

      pop[p].best_of_gen_fitness =
	pop[p].standardized_fitness[pop[p].fitness_sort_index[0]];

      pop[p].best_of_generation =
	copy_tree(pop[p].population[pop[p].fitness_sort_index[0]]);

#if REP_ON_GEN == 1
      report_on_generation(g,pop,p);
#endif

#if ((DEBUG == 1)||(DBSS == 1))
      dump_population(pop,p);
#endif      
#if ((DBDEMES == 1)||(DBSS == 1))
      if (demes) { /* this should alway be true, but still.... */
	for (i=0;i<demerows;i++) {
	  for (j=0;j<demecols;j++) {
	    printf("\nDUMPING DEME row=%d col=%d\n",i,j);
	    dump_population(grid[i][j],p);
	  }
	}
      }
#endif

      valperf =
	validate_fitness_of_tree(numpops, numgens, pop, p,
				 pop[p].population[pop[p].fitness_sort_index[0]]);

#if REP_ON_GEN == 1
      printf("\nValidation Fitness= %f\n", valperf);
#endif

      if (!g) {
	pop[p].best_of_run_fitness = valperf;
	pop[p].best_of_run = copy_tree(pop[p].population[pop[p].fitness_sort_index[0]]);
	pop[p].best_of_run_gen = 0;
      }
      else if (valperf < pop[p].best_of_run_fitness) {
	pop[p].best_of_run_fitness = valperf;
	free((char *)pop[p].best_of_run);
	pop[p].best_of_run = copy_tree(pop[p].best_of_generation);
	pop[p].best_of_run_gen = g;
      }
      
      free_tree(pop[p].best_of_generation);

    }

    if (CHECKPOINT_FREQUENCY) {
      if (g && !(g % CHECKPOINT_FREQUENCY)) {
	checkpoint(numpops, numgens, demes, demerows, demecols, pop, g);
      }
    }

    if (terminate_early(numpops,numgens,pop)) break;
  }

  /* checkpoint the last generation, if it was not just saved */
  if (CHECKPOINT_FREQUENCY) {
    if ((numgens-1) % CHECKPOINT_FREQUENCY) {
      checkpoint(numpops,numgens,demes,demerows,demecols,pop,numgens-1);
    }
  }
}


#ifdef ANSI_FUNC
VOID dump_population(
  pop_struct 	*pop,
  int 		p
  )
#else
VOID dump_population(pop,p)
  pop_struct	*pop;
  int		p;
#endif
{
  int	i, index;

  for (i=0; i<pop[p].population_size; i++) {
    index = (DEMES? i : pop[p].fitness_sort_index[i]);
    printf("pop= %d standardized = %f, adjusted = %f, norm = %f\n",
	   p,
	   pop[p].standardized_fitness[index],
	   pop[p].adjusted_fitness[index],
	   pop[p].normalized_fitness[index]);
    write_tree(pop,pop[p].population[index],pop[p].ckpt_format,stdout);
  }
}

#ifdef ANSI_FUNC

VOID zero_fitness_of_populations(
  int		numpops,
  pop_struct	*pop,
  int		p				 
  )
#else

VOID zero_fitness_of_populations(numpops,pop,p)
  int		numpops;
  pop_struct	*pop;
  int		p;
#endif
{
  int	i;

  for (i=0; i<pop[p].population_size; i++) {
    pop[p].standardized_fitness[i] 	= 0.0;
    pop[p].adjusted_fitness[i] 		= 0.0;
    pop[p].normalized_fitness[i] 	= 0.0;
  }
}

int	global_p;

#ifdef ANSI_FUNC
static int fitness_compare(
  int *i,
  int *j
)
#else
static int fitness_compare(i,j)
  int	*i;
  int	*j;
#endif
{
  pop_struct *pop = POP;

  if (pop[global_p].normalized_fitness[*j] > pop[global_p].normalized_fitness[*i]) {
    return 1;
  } else if (pop[global_p].normalized_fitness[*j] < pop[global_p].normalized_fitness[*i]) {
    return -1;
  } else return 0;
}
    
#ifdef ANSI_FUNC
VOID sort_population_by_fitness(
  pop_struct	*pop,
  int 	p
  )
#else
VOID sort_population_by_fitness(pop,p)
  pop_struct	*pop;
  int		p;
#endif
{
  int	i;

  global_p = p; /* kludge for fitness_compare */
  for (i=0; i<pop[p].population_size; i++) {
    pop[p].fitness_sort_index[i] = i;
  }

#ifdef STD_QSORT
  qsort(pop[p].fitness_sort_index, pop[p].population_size, sizeof(int),
	fitness_compare);
#else
  bsd_qsort(pop[p].fitness_sort_index, pop[p].population_size, sizeof(int),
	fitness_compare);
#endif
}

#ifdef ANSI_FUNC
VOID add_parsimony_to_fitness(
  pop_struct 	*pop,
  int 		p
  )
#else
VOID add_parsimony_to_fitness(pop,p)
  pop_struct 	*pop;
  int		p;
#endif
{
  int	i;

  for (i=0; i<pop[p].population_size; i++) {
    pop[p].standardized_fitness[i] += 
      ((float) count_crossover_pts(pop[p].population[i]))*pop[p].parsimony_factor;
  }
}

#ifdef ANSI_FUNC
VOID normalize_fitness_of_population(
  pop_struct	*pop,
  int 		p
)
#else
VOID normalize_fitness_of_population(pop,p)
  pop_struct	*pop;
  int	       	p;
#endif
{
  float	sum = 0.0;
  int	i;

  for (i=0; i<pop[p].population_size; i++) {
    sum += (pop[p].adjusted_fitness[i] = 1.0/(1.0 + pop[p].standardized_fitness[i]));
  }

  for (i=0; i<pop[p].population_size; i++) {
    pop[p].normalized_fitness[i] = (pop[p].adjusted_fitness[i]/sum);
  }
}

#ifdef ANSI_FUNC

VOID report_on_generation(
  int 		g,
  pop_struct	*pop,
  int 		p
  )
#else

VOID report_on_generation(g,pop,p)
  int		g;
  pop_struct	*pop;
  int		p;
#endif
{
  int	i;
  float	sum = 0.0;

  sum = 0.0;

  for (i=0; i<pop[p].population_size; i++) {
    sum += pop[p].standardized_fitness[i];
  }
  
  printf("\nGeneration %d Population %d   Avg Std Fitness: %f\n",
	 g, p, sum/(float)pop[p].population_size);
  printf("Best-of-gen fitness: %f\nBest-of-gen tree:\n",
	 pop[p].best_of_gen_fitness);
  write_tree(pop,pop[p].best_of_generation,pop[p].format,stdout);
}

#ifdef ANSI_FUNC
VOID report_on_run(
  int		numpops,
  pop_struct	*pop
  )
#else
VOID report_on_run(numpops,pop)
  int		numpops;
  pop_struct	*pop;
#endif
{
  int	p;

  for (p=0; p<numpops; p++) {
    printf("Best tree for pop#%d found on gen %d, VALIDATED fitness = %f:\n",
	   p, pop[p].best_of_run_gen, pop[p].best_of_run_fitness);
    write_tree(pop, pop[p].best_of_run, pop[p].format, stdout);
  }
}
on_run(
  int		numpops,
  pop_struct	*pop
  )
#else
VOID report_on_run(numpops,pop)
  int		numpops;
  pop_struct	*pop;
#endif
{
  int	p;

  for (p=0; p<numpops; p++) {
    printf("Best tree for pop#%d found on gen %d, VALIDATED fitness = %f:\n",
	   p, pop[p].best_of_run_gen, pop[p].best_of_run_fitness);
    write_tree(pop, pop[p].best_of_run, pop[p].format, stdout);
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人手机在线| 成人免费毛片aaaaa**| 国产精品自拍毛片| 欧美三级在线播放| 国产精品国产三级国产普通话99 | 天堂蜜桃91精品| 成人精品小蝌蚪| 欧美精品一区二区三区一线天视频| 国产美女av一区二区三区| 一本久久综合亚洲鲁鲁五月天 | 美女国产一区二区| 色噜噜狠狠成人中文综合| 久久九九影视网| 蜜臀精品久久久久久蜜臀| 欧美视频一区在线| 亚洲人妖av一区二区| 国产91精品免费| 国产亚洲一本大道中文在线| 麻豆成人综合网| 欧美一区二区三区的| 亚洲国产日韩a在线播放性色| 成人动漫精品一区二区| 国产欧美一区在线| 国产成人在线视频免费播放| 精品国产一二三| 麻豆精品久久精品色综合| 精品视频色一区| 午夜欧美一区二区三区在线播放| 成人午夜短视频| 国产精品美女视频| 欧美激情艳妇裸体舞| 国产精品成人一区二区三区夜夜夜| 日韩va亚洲va欧美va久久| 一本色道久久综合亚洲aⅴ蜜桃| 久久综合九色综合97婷婷| 久久99精品久久久久久国产越南| 在线电影一区二区三区| 丝袜美腿高跟呻吟高潮一区| 欧美三区在线观看| 三级影片在线观看欧美日韩一区二区| 欧美色涩在线第一页| 丝袜脚交一区二区| 日韩视频免费直播| 韩国欧美国产一区| 国产欧美一区二区精品性色超碰 | 亚洲精品在线观| 国产成人免费视频一区| 日韩视频在线永久播放| 三级在线观看一区二区| 日韩写真欧美这视频| 国内精品久久久久影院一蜜桃| 精品对白一区国产伦| 国产suv精品一区二区三区| 国产精品网站一区| 久久久久久9999| 国产成人在线视频网址| 亚洲男同性恋视频| 在线成人免费观看| 国产盗摄女厕一区二区三区| 中文字幕中文字幕在线一区 | 亚洲国产精品99久久久久久久久| 大胆亚洲人体视频| 亚洲一区视频在线| 精品精品国产高清a毛片牛牛| 国产91在线观看丝袜| 亚洲欧美一区二区三区孕妇| 欧美高清www午色夜在线视频| 精久久久久久久久久久| 亚洲乱码日产精品bd| 欧美日产国产精品| 成人小视频免费观看| 天天av天天翘天天综合网| 精品久久久影院| 在线观看网站黄不卡| 五月婷婷综合在线| 亚洲国产高清在线观看视频| 在线观看一区日韩| 国产福利精品导航| 日韩成人午夜电影| 中文字幕日本不卡| 精品国偷自产国产一区| 国产欧美日韩中文久久| 欧美日韩在线播放| 成人亚洲一区二区一| 日韩一区欧美二区| 成人欧美一区二区三区视频网页 | 精品国产网站在线观看| 色欧美乱欧美15图片| 国产一区二区久久| 午夜久久电影网| 亚洲图片你懂的| 久久久久国产成人精品亚洲午夜 | 精品国产精品网麻豆系列| 在线影院国内精品| 成人少妇影院yyyy| 激情小说欧美图片| 日韩电影在线一区二区三区| 亚洲欧美激情在线| 中文字幕第一区二区| 精品久久久久香蕉网| 欧美日本视频在线| 欧美色图天堂网| 色哟哟国产精品免费观看| 丁香另类激情小说| 国产乱子轮精品视频| 美腿丝袜一区二区三区| 五月婷婷色综合| 五月天激情综合| 亚洲国产日韩a在线播放| 亚洲日本乱码在线观看| 国产精品午夜久久| 国产精品系列在线| 亚洲国产精品成人综合 | 欧美日韩免费电影| 在线一区二区观看| 在线看一区二区| 欧美日韩中字一区| 在线观看免费亚洲| 欧美午夜精品免费| 欧美视频日韩视频在线观看| 色就色 综合激情| 欧美中文字幕一区二区三区亚洲| 在线观看亚洲成人| 正在播放一区二区| 欧美日韩亚洲另类| 制服丝袜亚洲播放| 337p日本欧洲亚洲大胆色噜噜| 欧美sm美女调教| 国产性色一区二区| 国产精品二区一区二区aⅴ污介绍| 国产精品久久久久精k8| 亚洲精品日韩一| 午夜精品免费在线| 久久99精品国产麻豆婷婷| 久久精品国产在热久久| 国产黄色91视频| 91网址在线看| 欧美一级片在线看| 亚洲女同一区二区| 亚洲欧美日韩人成在线播放| 国产精品久久久久久久岛一牛影视| 中文字幕一区二区三区四区| 亚洲免费av高清| 天天综合日日夜夜精品| 久久国产免费看| 成人av午夜电影| 欧美性色黄大片| 日韩午夜电影av| 国产精品久久久久久久久搜平片| 亚洲综合久久久久| 久久av资源网| 91丨九色丨蝌蚪富婆spa| 91精品国产乱码| 国产精品网站在线观看| 日韩精品久久理论片| 国产91丝袜在线18| 欧美日韩中文字幕一区| 国产日韩欧美激情| 亚洲成av人综合在线观看| 国产高清视频一区| 欧美三级日韩在线| 中文字幕成人网| 男人的天堂亚洲一区| 91丝袜呻吟高潮美腿白嫩在线观看| 91精品国产一区二区三区蜜臀| 国产精品国产三级国产aⅴ入口 | 国产精品一区二区在线观看网站| 99精品欧美一区二区三区小说| 宅男噜噜噜66一区二区66| 欧美激情中文字幕| 免费观看在线色综合| 在线一区二区三区| 国产精品久久久久久妇女6080| 裸体歌舞表演一区二区| 91豆麻精品91久久久久久| 中文子幕无线码一区tr| 麻豆成人免费电影| 欧美视频一区在线| 中文字幕欧美一区| 国产精品18久久久久久久久 | 日本在线播放一区二区三区| 成人黄页在线观看| 久久精品视频免费| 久久99精品久久久久久久久久久久| 在线一区二区三区四区| 欧美国产禁国产网站cc| 国产麻豆成人传媒免费观看| 欧美一级一级性生活免费录像| 亚洲一区影音先锋| 在线一区二区三区四区五区 | 国产成人aaa| 精品国产免费视频| 久久草av在线| 精品裸体舞一区二区三区| 日本sm残虐另类| 日韩女优av电影| 久久91精品国产91久久小草| 欧美一卡二卡三卡四卡| 美女高潮久久久| 精品99一区二区|