📄 report.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 + -