Esempio n. 1
0
        private static Chromosome SingleMutation(Chromosome chromosome)
        {
            Chromosome newChromosome = chromosome.GetClone();

            newChromosome[GrammaticalEvolution.random.Next(chromosome.Count)] = (byte)GrammaticalEvolution.random.Next(0, 256);
            return(newChromosome);
        }
Esempio n. 2
0
        public Tuple <List <double>, List <double> > ExecuteTest(int testnumber, int testSize, int mutatedIndividuals, int initialChromosomeSize, double failureFitnessValue, bool useGE1ForBase, bool includeFailedCorrections)
        {
            List <double> localityResults1 = new List <double>();
            List <double> localityResults2 = new List <double>();

            for (int i = 0; i < testSize; i++)
            {
                Chromosome baseChromosome = null;
                double     baseFitness    = failureFitnessValue;
                while (baseFitness == failureFitnessValue)//Check that it is a correct individual
                {
                    baseChromosome = new Chromosome(initialChromosomeSize, 64);
                    GrammaticalEvolution baseGE = (useGE1ForBase ? GE1 : GE2).GetClone();
                    baseFitness = Evaluate(baseChromosome, true, baseGE).Item1;
                }
                for (int j = 0; j < mutatedIndividuals; j++)//TODO: Perché le differenze del 2 è di 1?.
                {
                    Chromosome mutatedChromosome1 = SingleMutation(baseChromosome);
                    mutatedChromosome1.BackupCodons = baseChromosome.ToList();
                    Chromosome mutatedChromosome2 = mutatedChromosome1.GetClone();

                    Tuple <double, bool> result1 = Evaluate(mutatedChromosome1, false, GE1);
                    Tuple <double, bool> result2 = Evaluate(mutatedChromosome2, false, GE2);
                    double minDistance           = (double)1 / 64;

                    localityResults1.Add(Math.Abs(result1.Item1 - baseFitness - minDistance));

                    double secondResult = result2.Item2 ? baseFitness : result2.Item1;
                    localityResults2.Add(Math.Abs(secondResult - baseFitness - minDistance));
                }
                Console.WriteLine(i + " out of " + testSize);
            }
            Console.WriteLine("Media 1:" + localityResults1.Average());
            Console.WriteLine("Media 2:" + localityResults2.Average());
            Console.WriteLine("Miglioramento:" + ((localityResults1.Average() - localityResults2.Average()) / localityResults1.Average()));
            return(new Tuple <List <double>, List <double> >(localityResults1, localityResults2));

            /*string percorso = @"C:\Users\Samuele\Documents\BetterPECLE\v3\Studio località\";
             * //string avviso = "ATTENZIONE: QUESTI RISULTATI SONO STATI DEFINITI PREVENTIVAMENTE COME TEST.\n" +
             * //    "AL FINE DI RISPETTARE L'ETICA SCIENTIFICA, NON USARE QUESTI DATI IN NESSUNA PUBBLICAZIONE.\n\n";
             *
             * double miglioramento = ((localityResults1.Average() - localityResults2.Average()) / localityResults1.Average());
             *
             * string spiegazione = "I seguenti dati indicano la differenza di fitness medio per mutazione. Più la differenza\n" +
             *  "è bassa, più la rappresentazione è locale.\n\n";
             * File.WriteAllText(percorso + "Studio" + testnumber + ".txt",
             *  spiegazione + "Media default: " + localityResults1.Average() +
             *  "\nDeviazione Standard: " + StdDev(localityResults1) +
             *  "\nMedia PECLE: " + localityResults2.Average() +
             *  "\nDeviazione Standard: " + StdDev(localityResults2) +
             *  "\nMiglioramento: " + miglioramento);*/
        }
Esempio n. 3
0
        public GenerationStats GetClone()
        {
            GenerationStats stats = new GenerationStats();

            stats.bestChromosome             = bestChromosome.GetClone();
            stats.compilationErrors          = compilationErrors;
            stats.executedEvaluations        = executedEvaluations;
            stats.executionExceptions        = executionExceptions;
            stats.failedErrorChecks          = failedErrorChecks;
            stats.failedErrorCorrections     = failedErrorCorrections;
            stats.fitnessValues              = fitnessValues.ToList();
            stats.generationErrors           = generationErrors;
            stats.passedErrorChecks          = passedErrorChecks;
            stats.successfulErrorCorrections = successfulErrorCorrections;

            return(stats);
        }
Esempio n. 4
0
        public override Tuple <Chromosome, Chromosome> Cross(Chromosome parent1, Chromosome parent2, double crossoverProbability)
        {
            if (GrammaticalEvolution.random.NextDouble() < crossoverProbability)
            {
                int crossoverPoint = GrammaticalEvolution.random.Next(0, Math.Min(parent1.Count, parent2.Count));

                Chromosome child1 = new Chromosome(0, parent1.MaximumSize);
                Chromosome child2 = new Chromosome(0, parent2.MaximumSize);

                for (int i = 0; i < crossoverPoint; i++)
                {
                    child1.Add(parent1[i]);
                    child2.Add(parent2[i]);
                }

                for (int j = crossoverPoint; j < parent2.Count; j++)
                {
                    child1.Add(parent2[j]);
                }

                for (int k = crossoverPoint; k < parent1.Count; k++)
                {
                    child2.Add(parent1[k]);
                }

                if (GrammaticalEvolution.random.NextDouble() > 0.5)
                {
                    child1.BackupCodons = parent1.BackupCodons == null ? null : parent1.BackupCodons.ToList();
                    child2.BackupCodons = parent2.BackupCodons == null ? null : parent2.BackupCodons.ToList();
                }
                else
                {
                    child1.BackupCodons = parent2.BackupCodons == null ? null : parent2.BackupCodons.ToList();
                    child2.BackupCodons = parent1.BackupCodons == null ? null : parent1.BackupCodons.ToList();
                }

                return(new Tuple <Chromosome, Chromosome>(child1, child2));
            }
            else
            {
                return(new Tuple <Chromosome, Chromosome>(parent1.GetClone(), parent2.GetClone()));
            }
        }