Exemple #1
0
        private void DoCrossoverForBestIndividuals()
        {
            int length = firstFront.Count;

            int numberOfConfigurations = allConfigurations.Count;

            while (nsgaPopulation.Count < numberOfConfigurations)
            {
                int index_parent1, index_parent2;
                int count = 10;

                do
                {
                    index_parent1 = random.Next(0, bestIndividuals.Count);
                    index_parent2 = random.Next(0, bestIndividuals.Count);
                    count--;
                } while (index_parent1 == index_parent2 && count != 0);
                if (bestIndividuals.Count > 1)
                {
                    if (count == 0)
                    {
                        index_parent1 = bestIndividuals.Count - 1;
                        index_parent2 = bestIndividuals.Count - 2;
                    }

                    Configuration parent1 = bestIndividuals[index_parent1];
                    Configuration parent2 = bestIndividuals[index_parent2];

                    List <Configuration> resultedConfigurations = Crossover(parent1, parent2);
                    allConfigurations.AddRange(resultedConfigurations);


                    var newSimulatedConfigurations = sim.Run(resultedConfigurations, selectedTraces);

                    foreach (var cfg in resultedConfigurations)
                    {
                        if (nsgaPopulation.Count < numberOfConfigurations)
                        {
                            double ipc_average = 0, power_average = 0, energy_average = 0;
                            int    ct = 0;
                            foreach (var item in newSimulatedConfigurations)
                            {
                                if (item.cfg == cfg)
                                {
                                    ipc_average    += item.ipc;
                                    power_average  += item.power;
                                    energy_average += item.energy;
                                    ct++;
                                }
                            }
                            ipc_average    /= ct;
                            power_average  /= ct;
                            energy_average /= ct;
                            GeneticIndividual tempIndividual = new GeneticIndividual(cfg, ipc_average, power_average, energy_average);
                            nsgaPopulation.Add(tempIndividual);
                        }
                    }
                }
            }
        }
Exemple #2
0
        public bool InitRandomPopulation(List <string> selectedTraces)
        {
            ConfigurationGenerator cg = new ConfigurationGenerator();

            for (int i = 0; i < populationSize; i++)
            {
                population.Add(cg.RandomConfig(individualID.ToString()));
            }
            allConfigurations.AddRange(population);

            var results = sim.Run(population, selectedTraces);

            for (int i = 0; i < population.Count; i++)
            {
                population[i] = new GeneticIndividual(population[i], 0.0, 0.0, 0.0);

                for (int j = 0; j < selectedTraces.Count; j++)
                {
                    ((GeneticIndividual)population[i]).Ipc    += 1.0 / results[i + population.Count * j].ipc;
                    ((GeneticIndividual)population[i]).Power  += results[i + population.Count * j].power;
                    ((GeneticIndividual)population[i]).Energy += results[i + population.Count * j].energy;
                }
                if (selectedTraces.Count > 1)
                {
                    ((GeneticIndividual)population[i]).Ipc    /= selectedTraces.Count;
                    ((GeneticIndividual)population[i]).Power  /= selectedTraces.Count;
                    ((GeneticIndividual)population[i]).Energy /= selectedTraces.Count;
                }
                nsgaPopulation.Add(new GeneticIndividual(population[i], ((GeneticIndividual)population[i]).Ipc, ((GeneticIndividual)population[i]).Power, ((GeneticIndividual)population[i]).Energy));
            }
            return(true);
        }
Exemple #3
0
        public double Calculatedensity(GeneticIndividual individual, List <Configuration> pop)
        {
            foreach (var other in pop)
            {
                ((GeneticIndividual)other).distance = EuclideanDistance(((GeneticIndividual)individual), (GeneticIndividual)other);
            }
            var sorted = pop.OrderBy(c => (((GeneticIndividual)c).distance)).ToArray();
            int k      = (int)Math.Sqrt(pop.Count);

            return(1.0 / (((GeneticIndividual)sorted[k]).distance + 2.0));
        }
Exemple #4
0
 public int Dominates(GeneticIndividual ind1, GeneticIndividual ind2)
 {
     if (ind1.Energy < ind2.Energy && ind1.Ipc < ind2.Ipc)
     {
         return(1);
     }
     if (ind1.Energy >= ind2.Energy && ind1.Ipc >= ind2.Ipc)
     {
         return(-1);
     }
     return(0);
 }
Exemple #5
0
        private void DoMutationAndSimulation()
        {
            foreach (var bestIndividual in bestIndividuals)
            {  //preiau ultimul individ de pe primul front ( 0 )
                Configuration configuration = new Configuration();
                if (bestIndividual.FrontNumber == 0)
                {
                    try
                    {
                        foreach (var individual in population)
                        {
                            if ((bestIndividual.Name.Substring(bestIndividual.Name.LastIndexOf('_') + 1)).Equals(individual.Name))
                            {
                                configuration = individual;
                                break;
                            }
                        }

                        Configuration mutatedConfiguration = Mutate((Configuration)configuration.Clone());

                        mutatedConfiguration.Name = id.ToString();
                        id++;
                        allConfigurations.Add(mutatedConfiguration);

                        //rulare simulator doar pt mutatedConfiguration

                        var newSimulatedConfigurations = sim.Run(new List <Configuration> {
                            mutatedConfiguration
                        }, selectedTraces);
                        double ipc_average = 0, power_average = 0, energy_average = 0;
                        foreach (var item in newSimulatedConfigurations)
                        {
                            ipc_average    += item.ipc;
                            power_average  += item.power;
                            energy_average += item.energy;
                        }
                        ipc_average    /= newSimulatedConfigurations.Count;
                        power_average  /= newSimulatedConfigurations.Count;
                        energy_average /= newSimulatedConfigurations.Count;

                        GeneticIndividual tempIndividual = new GeneticIndividual(mutatedConfiguration, ipc_average, power_average, energy_average);
                        nsgaPopulation.Add(tempIndividual);

                        // Thread.Sleep(20);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }
        }
Exemple #6
0
        public void CalculateObjectives()
        {
            results = sim.Run(population, selectedTraces);
            for (int i = 0; i < population.Count; i++)
            {
                population[i] = new GeneticIndividual(population[i], 0.0, 0.0, 0.0);

                for (int j = 0; j < selectedTraces.Count; j++)
                {
                    ((GeneticIndividual)population[i]).Ipc    += 1.0 / results[i + population.Count * j].ipc;
                    ((GeneticIndividual)population[i]).Power  += results[i + population.Count * j].power;
                    ((GeneticIndividual)population[i]).Energy += results[i + population.Count * j].energy;
                }
                if (selectedTraces.Count > 1)
                {
                    ((GeneticIndividual)population[i]).Ipc    /= selectedTraces.Count;
                    ((GeneticIndividual)population[i]).Power  /= selectedTraces.Count;
                    ((GeneticIndividual)population[i]).Energy /= selectedTraces.Count;
                }
            }
        }
Exemple #7
0
 private double EuclideanDistance(GeneticIndividual individual, GeneticIndividual other)
 {
     return(Math.Sqrt(Math.Pow(individual.Ipc - other.Ipc, 2) + Math.Pow(individual.Energy - other.Energy, 2)));
 }