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

📄 report.c

📁 比较完整的遗传算法的源代码
💻 C
字号:
#include <stdio.h>#include "petrol.h"#include "utils.h"static FILE *outfile;static void ReportPopulation(Population *p);static void ReportIndividual(Individual *i);void ReportSetup(Settings *s) {  if (s->outputFile) {    if (!(outfile = fopen(s->outputFile, "a"))) {      syserror("ReportSetup");    }  } else {    outfile = stdout;  }}void ReportInitial(Settings *s, Population *p) {  fprintf(outfile, "0\t%f\t%f\t%f\n", (p->pop + p->maxFitness)->fitness,	  p->avgFitness, (p->pop + p->minFitness)->fitness);}void ReportGeneration(Settings *s, Population *p, int g) {  fprintf(outfile, "%d\t%f\t%f\t%f\n", g, (p->pop + p->maxFitness)->fitness,	  p->avgFitness, (p->pop + p->minFitness)->fitness);}void ReportDone(Settings *s, Population *p) {}void ReportPopulation(Population *p) {  int n;  fprintf(outfile, "Sum fitness: %g, Avg fitness: %g\n", p->sumFitness,	  p->avgFitness);  fprintf(outfile, "NumCrossovers: %d, NumMutations: %d\n", p->numCrossovers,	  p->numMutations);  fprintf(outfile, "Max\n%4d: ", p->maxFitness);  ReportIndividual(p->pop + p->maxFitness);  fprintf(outfile, "\n");  fprintf(outfile, "Min\n%4d: ", p->minFitness);  ReportIndividual(p->pop + p->minFitness);  fprintf(outfile, "\n\n");  for (n = 0; n < p->popSize; n++) {    fprintf(outfile, "%4d: ", n);    ReportIndividual(p->pop + n);    fprintf(outfile, "\n");  }    }void ReportIndividual(Individual *i) {  int n;  fprintf(outfile, "%5g ", i->fitness);  for (n = i->chromLen - 1; n >= 0; n--) {    fprintf(outfile, "%d", i->chrom[n]);  }}void ReportCrossover(Population *p, Individual *p1, Individual *p2,		     Individual *c1, Individual *c2, int point) {  int n;  fprintf(outfile, "Crossover at point %d\n", point);  fprintf(outfile, "p1: ");  for (n = p1->chromLen - 1; n >= 0; n--) {    if (n == point)      fprintf(outfile, "x");    fprintf(outfile, "%d", p1->chrom[n]);  }  fprintf(outfile, "\n");  fprintf(outfile, "p2: ");  for (n = p2->chromLen - 1; n >= 0; n--) {    if (n == point)      fprintf(outfile, "x");    fprintf(outfile, "%d", p2->chrom[n]);  }  fprintf(outfile, "\n");  fprintf(outfile, "c1: ");  for (n = c1->chromLen - 1; n >= 0; n--) {    if (n == point)      fprintf(outfile, "x");    fprintf(outfile, "%d", c1->chrom[n]);  }  fprintf(outfile, "\n");  fprintf(outfile, "c2: ");  for (n = c2->chromLen - 1; n >= 0; n--) {    if (n == point)      fprintf(outfile, "x");    fprintf(outfile, "%d", c2->chrom[n]);  }  fprintf(outfile, "\n");}

⌨️ 快捷键说明

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