コード例 #1
0
int main(void){

	struct parameters *params = NULL;
	struct chromosome *chromoA = NULL;
	struct chromosome *chromoB = NULL;
	struct chromosome *chromoC = NULL;
	struct dataSet *trainingData = NULL;

	double testInputs[NUMINPUTS];

	params = initialiseParameters(NUMINPUTS, NUMNODES, NUMOUTPUTS, ARITY);
	addNodeFunction(params, "add,sub,mul,sq,cube,sin");

	trainingData = initialiseDataSetFromFile("./dataSets/symbolic.data");

	chromoA = initialiseChromosome(params);
	chromoB = initialiseChromosome(params);

	setChromosomeFitness(params, chromoA, trainingData);

	mutateChromosome(params,chromoA);

	copyChromosome(chromoB, chromoA);

	removeInactiveNodes(chromoB);

	printf("chromoA with inactive nodes.\n");
	printChromosome(chromoA, 0);

	printf("chromoB without inactive nodes.\n");
	printChromosome(chromoB, 1);

	saveChromosome(chromoB, "chromoB.chromo");

	chromoC = initialiseChromosomeFromFile("chromoB.chromo");

	testInputs[0] = 3;

	executeChromosome(chromoC, testInputs);

	printf("Applied input: %f\n", testInputs[0]);
	printf("Generated output: %f\n", getChromosomeOutput(chromoC, 0));

	freeChromosome(chromoA);
	freeChromosome(chromoB);
	freeChromosome(chromoC);
	freeDataSet(trainingData);
	freeParameters(params);

	return 0;
}
コード例 #2
0
int main(void){

	struct parameters *params = NULL;
	struct chromosome *chromo = NULL;

	int numInputs = 1;
	int numNodes = 20;
	int numOutputs = 1;
	int nodeArity = 5;

	int numGens = 25000;
	double targetFitness = 0.5;
	int updateFrequency = 500;

	double weightRange = 5;

	params = initialiseParameters(numInputs, numNodes, numOutputs, nodeArity);

	setTargetFitness(params, targetFitness);

	setUpdateFrequency(params, updateFrequency);

	setConnectionWeightRange(params, weightRange);

	setCustomFitnessFunction(params, sinWave, "sinWave");

	addNodeFunction(params, "tanh,softsign");

	chromo = runCGP(params, NULL, numGens);

	printChromosome(chromo, 1);

	freeChromosome(chromo);
	freeParameters(params);

	return 0;
}
コード例 #3
0
ファイル: Experiment.cpp プロジェクト: bedder/cgp-pocman
// Runs a full round of experiments
void performExperiments(struct parameters* params,
                        unsigned int nGenerations,
                        unsigned int nRepeats,
                        const std::string& nodeFunctions) {
  setCustomFitnessFunction(params, fitness, "PocMan Level 1");

  struct chromosome* bestChromosome = nullptr;
  double bestFitness = DBL_MAX;
  std::vector<double> fitnesses;
  std::vector<double> durations;
  fitnesses.reserve(nRepeats);
  durations.reserve(nRepeats);

  for (unsigned int i = 0; i < nRepeats; i++) {
    // Run CGP, record the results
    auto start = std::chrono::steady_clock::now();
    struct chromosome* chromo = runCGP(params, nullptr, nGenerations);
    auto end = std::chrono::steady_clock::now();

    double fitness = getChromosomeFitness(chromo);
    fitnesses.push_back(fitness);

    std::chrono::duration<double> diff = end - start;
    double duration = diff.count();
    durations.push_back(duration);

    // Should we keep this chromosome?
    if (fitness < bestFitness) {
      if (bestChromosome != nullptr)
        freeChromosome(bestChromosome);
      bestChromosome = chromo;
      bestFitness = fitness;
    } else {
      freeChromosome(chromo);
    }
  }

  // Stats!
  double meanFitness, stdevFitness, minFitness, maxFitness;
  std::tie(meanFitness, stdevFitness, minFitness, maxFitness) = calculateStats(fitnesses);

  double meanDuration, stdevDuration, minDuration, maxDuration;
  std::tie(meanDuration, stdevDuration, minDuration, maxDuration) = calculateStats(durations);

  // Logging!
  log("### PARAMETERS\n");
  log(parametersToString(params));
  log("generations: " + std::to_string(nGenerations) + "\n");
  log("\n--------------------\n\n");
  log("### FITNESS VALUES\n");
  for (unsigned int i = 0; i < nRepeats; i++)
    log("(" + std::to_string(i + 1) + "):\t" + std::to_string(fitnesses[i]) + "\n");
  log("\n--------------------\n\n");
  log("### STATISTICS (FITNESS)\n");
  log("mean : " + std::to_string(meanFitness) + "\n");
  log("std  : " + std::to_string(stdevFitness) + "\n");
  log("rng  : " + std::to_string(minFitness) +":" + std::to_string(maxFitness) + "\n");
  log("\n--------------------\n\n");
  log("### DURATION VALUES\n");
  for (unsigned int i = 0; i < nRepeats; i++)
    log("(" + std::to_string(i + 1) + "):\t" + std::to_string(durations[i]) + "\n");
  log("\n--------------------\n\n");
  log("### STATISTICS (DURATIONS)\n");
  log("mean : " + std::to_string(meanDuration) + "\n");
  log("std  : " + std::to_string(stdevDuration) + "\n");
  log("rng  : " + std::to_string(minDuration) + ":" + std::to_string(maxDuration) + "\n");
  log("\n--------------------\n\n");
  log("### BEST CHROMOSOME\n");
  log(chromosomeToString(bestChromosome, 0));
  log("\n--------------------\n\n");
  log("### GAMEPLAY TRACE\n");
  log(controller.generateGameTrace(bestChromosome));
}
コード例 #4
0
ファイル: customES.c プロジェクト: flaminggoat/CGP-Library
int main(void){
	
	int i, gen;
	
	struct parameters *params = NULL;
	struct chromosome *population[POPULATIONSIZE];
	struct chromosome *fittestChromosome = NULL;
	struct dataSet *trainingData = NULL;
		
	double targetFitness = 0;
	int maxGens = 10000;
				
	params = initialiseParameters(NUMINPUTS, NUMNODES, NUMOUTPUTS, ARITY);
	
	addNodeFunction(params, "or,nor,and,nand");
	/*setTargetFitness(params, targetFitness);*/
	setMutationType(params, "probabilistic");
	setMutationRate(params, 0.08);
	
	trainingData = initialiseDataSetFromFile("./examples/parity3bit.data");
	
	for(i=0; i<POPULATIONSIZE; i++){
		population[i] = initialiseChromosome(params);
	}
	
	fittestChromosome = initialiseChromosome(params);
	
	/* for the number of allowed generations*/
	for(gen=0; gen<maxGens; gen++){
		
		/* set the fitnesses of the population of chromosomes*/
		for(i=0; i<POPULATIONSIZE; i++){
			setChromosomeFitness(params, population[i], trainingData);
		}
		
		/* copy over the last chromosome to fittestChromosome*/
		copyChromosome(fittestChromosome, population[POPULATIONSIZE - 1]);
		
		/* for all chromosomes except the last*/
		for(i=0; i<POPULATIONSIZE-1; i++){
			
			/* copy ith chromosome to fittestChromosome if fitter*/
			if(getChromosomeFitness(population[i]) < getChromosomeFitness(fittestChromosome)){
				copyChromosome(fittestChromosome, population[i]);
			}
		}
				
		/* termination condition*/
		if(getChromosomeFitness(fittestChromosome) <= targetFitness){
			break;
		}
				
		/* set the first member of the population to be the fittest chromosome*/
		copyChromosome(population[0], fittestChromosome);
		
		/* set remaining member of the population to be mutations of the
		 fittest chromosome*/
		for(i=1; i<POPULATIONSIZE; i++){
			
			copyChromosome(population[i], fittestChromosome);
			mutateChromosome(params, population[i]);
		}
	}
	
	printf("gen\tfitness\n");
	printf("%d\t%f\n", gen, getChromosomeFitness(fittestChromosome));
	
	
	
	for(i=0; i<POPULATIONSIZE; i++){
		freeChromosome(population[i]);
	}
	
	freeChromosome(fittestChromosome);
	freeDataSet(trainingData);
	freeParameters(params);
	
	return 0;
}