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;
 }
Beispiel #3
0
        //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;
        }
Beispiel #4
0
        public BasicGenome clone()
        {
            BasicGenome clone = new BasicGenome();

            clone.fitness = fitness;
            clone.gene    = gene;
            return(clone);
        }
Beispiel #5
0
        public static BasicGenome fromTask(BsonDocument t)
        {
            BasicGenome g = new BasicGenome();

            g.gene    = (double)t["genome"];
            g.fitness = (double)t["fitness"];
            return(g);
        }
Beispiel #6
0
        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();
            }
        }
Beispiel #7
0
        public void mutate()
        {
            Random rng = BasicGenome.getRNG();

            gene += rng.NextDouble() / 1.0;
        }
Beispiel #8
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} };
 }
Beispiel #10
0
 //simple fitness function
 public static double fitnessFunction(BasicGenome g)
 {
     return(-Math.Pow(g.gene - 10.0, 2));
 }