public BasicGenome clone() { BasicGenome clone = new BasicGenome(); clone.fitness=fitness; clone.gene=gene; return clone; }
public static BasicGenome fromTask(BsonDocument t) { BasicGenome g= new BasicGenome(); g.gene=(double)t["genome"]; g.fitness=(double)t["fitness"]; return g; }
//simple reproduction loop (no crossover) public void reproducePopulation() { Console.WriteLine("Generation " + generation + " avg fitness: " + avgFitness()); List <BasicGenome> newPop = new List <BasicGenome>(); for (int i = 0; i < populationSize; i++) { BasicGenome baby; BasicGenome p1 = RandomChoice(population); BasicGenome p2 = RandomChoice(population); if (p1.fitness > p2.fitness) { baby = p1.clone(); } else { baby = p2.clone(); } baby.mutate(); newPop.Add(baby); } population = newPop; }
public BasicGenome clone() { BasicGenome clone = new BasicGenome(); clone.fitness = fitness; clone.gene = gene; return(clone); }
public static BasicGenome fromTask(BsonDocument t) { BasicGenome g = new BasicGenome(); g.gene = (double)t["genome"]; g.fitness = (double)t["fitness"]; return(g); }
public void doEvolution() { while (generation < generationCount) { //for each genome we need to serialize the genome into something //the database can understand (BsonDocument) which is like a hash table foreach (BasicGenome g in population) { //serialize genome BsonDocument task = BasicGenome.toTask(g); //send to db db.addTask(task, generation); } int tasksRemaining; //now wait for workers to complete all the tasks do { Thread.Sleep(2000); //2 sec wait tasksRemaining = db.incompleteTasks(generation); Console.WriteLine("Left to do: " + tasksRemaining); } while(tasksRemaining > 0); //get result tasks from db MongoCursor results = db.getResults(generation, true); //clear population, then refill with unserialized result genomes population.Clear(); foreach (BsonDocument result in results) { population.Add(BasicGenome.fromTask(result)); } generation++; reproducePopulation(); } }
public void mutate() { Random rng = BasicGenome.getRNG(); gene += rng.NextDouble() / 1.0; }
public static BsonDocument toTask(BasicGenome g) { return(new BsonDocument { { "genome", g.gene }, { "fitness", g.fitness } }); }
public static BsonDocument toTask(BasicGenome g) { return new BsonDocument { {"genome",g.gene},{"fitness",g.fitness} }; }
//simple fitness function public static double fitnessFunction(BasicGenome g) { return(-Math.Pow(g.gene - 10.0, 2)); }