public static string ProbabilityToString(Population p, FitnessFunc fitnessFunc)
        {
            StringBuilder sb = new StringBuilder();

            int i = 0;
            foreach (var individual in p.Individuals)
            {
                sb.AppendFormat("\t{0:00}: {1} Fitness: {2} Chances: {3:P}\n", i++, individual,fitnessFunc(individual),
                    fitnessFunc(individual) / p.GetPopulationFitnessSum(fitnessFunc));
            }

            return sb.ToString();
        }
        public GeneticAlgorithm(int[] jobs, int machinesCount, int stepsToPerform, int populationSize, double crossoverProbaility, double mutationProbability)
        {
            this.jobs = jobs;
            jobsSum = jobs.Sum();
            JobsCount = jobs.Length;
            MachinesCount = machinesCount;
            this.stepsToPerform = stepsToPerform;
            this.populationSize = populationSize;
            fitness = ComputeFitness;
            Harem.PARENTING_PROBABILITY = crossoverProbaility;
            Mutator.MUTATION_RATE = mutationProbability;

            #if LOG_PLOT
            file = new StreamWriter("result");
            #endif
        }
Beispiel #3
0
 public float UpdateFitness(FitnessFunc f)
 {
     Fitness = f(this);
     return Fitness;
 }
Beispiel #4
0
        public void Evolve(FitnessFunc f)
        {
            Chromosome[] newGen = new Chromosome[Chromosomes.Length];

            Fitness = 0f;
            foreach( Chromosome c in Chromosomes )
            {
                Fitness += c.UpdateFitness(f);
            }

            for( int i = 0; i < newGen.Length; )
            {
                Chromosome c0 = new Chromosome(Selection());
                Chromosome c1 = new Chromosome(Selection());
                //Console.WriteLine("New Gen - " + i);
                //Console.WriteLine(String.Format("Select chromosome {0} and {1}.", Array.IndexOf(Chromosomes, c0), Array.IndexOf(Chromosomes, c1)));

                if( (float)c_rnd.NextDouble() < CrossoverRate )
                {
                    c0.Crossover(c1);
                }

                c0.Mutate(MutationRate);
                c1.Mutate(MutationRate);

                newGen[i++] = c0;
                // If the population is odd, discard one member.
                // It could be done at random into the whole population instead of the last one.
                if( i < newGen.Length )
                {
                    newGen[i++] = c1;
                }
            }

            Chromosomes = newGen;
            ++Generation;

            Fitness = 0f;
            foreach( Chromosome c in Chromosomes )
            {
                Fitness += c.UpdateFitness(f);
            }
        }
 public Roulette(FitnessFunc fitnessFunc, Population population)
 {
     this.population = population;
     this.fitnessFunc = fitnessFunc;
 }
Beispiel #6
0
 public void SetFitnessFunc(FitnessFunc evaluator)
 {
     throw new NotImplementedException();
 }