private void AppendHistory(List <Cromozom> cromozomList, int generation)
        {
            cromozomList = cromozomList.OrderByDescending(s => s.Fitness).ToList();
            Cromozom bestCromozom = cromozomList [0];

            IOFunctions.CreateHistoryFile(bestCromozom, generation);
        }
        public List <Cromozom> Start(GeneticAlgorithmOptions geneticAlgorithmOptions)
        {
            this.geneticAlgorithmOptions = geneticAlgorithmOptions;
            newCromozomsPopulation       = new List <Cromozom> ();
            elitistPercent    = geneticAlgorithmOptions.ElitesPercentage;
            currentGeneration = 0;
            Initialize algorithm = new Initialize();

            cromozomsPopulation = algorithm.GeneratePopulation(geneticAlgorithmOptions);
            int benchmarkCounter = 1;

            while (currentGeneration < geneticAlgorithmOptions.NumberOfGenerations)
            {
                IOFunctions.ClearFiles("./", "ta.log*");
                ClearPastFitness();
                benchmarkCounter = 1;
                foreach (var benchmark in geneticAlgorithmOptions.Benchmarks)
                {
                    for (int i = 0; i < cromozomsPopulation.Count; i++)
                    {
                        ExecutaComandaSimulator(i, benchmark, cromozomsPopulation[i].Configuration.Memory, cromozomsPopulation[i].Configuration.OptimizationLevel);
                        proc.WaitForExit();
                        CalculateFitness(i, benchmarkCounter);
                    }
                    benchmarkCounter++;
                }

                Cromozom[] cromozomPopulationCopy = new Cromozom [cromozomsPopulation.Count];
                cromozomsPopulation.CopyTo(cromozomPopulationCopy);
                AppendHistory(cromozomPopulationCopy.ToList(), currentGeneration);

                if (IsNotLastIteration(geneticAlgorithmOptions.NumberOfGenerations))
                {
                    if (geneticAlgorithmOptions.SelectionMode == AlgorithmSelectionMode.Elitist)
                    {
                        CreateNewGenerationWithElitistSelection();
                    }
                    if (geneticAlgorithmOptions.SelectionMode == AlgorithmSelectionMode.Tournament)
                    {
                        CreateNewGenerationWithTournamentSelection();
                    }

                    cromozomsPopulation = newCromozomsPopulation;
                    IOFunctions.ClearFiles("vex/configurations/", "*cfg");
                    for (int i = 0; i < cromozomsPopulation.Count; i++)
                    {
                        IOFunctions.CreateConfigFile(cromozomsPopulation [i], i.ToString());
                    }
                }

                currentGeneration++;
            }
            return(cromozomsPopulation);
        }
Exemple #3
0
        public List <Cromozom> GeneratePopulation(GeneticAlgorithmOptions options)
        {
            List <Cromozom> PopulationList = new List <Cromozom> ();
            int             ct             = 0;

            while (ct < options.NumberOfCromozoms)
            {
                Cromozom cromozom = GenerateCromozom(options);
                cromozom.Index = ct;
                IOFunctions.CreateConfigFile(cromozom, ct.ToString());
                PopulationList.Add(cromozom);
                ct++;
            }
            return(PopulationList);
        }
        private void CalculateFitness(int i, int benchmarkCounter)
        {
            string logNumber = (i + (benchmarkCounter - 1) * cromozomsPopulation.Count).ToString();

            string[] itemeDeCautat = new string[] { "Avg. IPC (with stalls):" };
            if (logNumber.Length == 2)
            {
                logNumber = ("0" + logNumber);
            }
            if (logNumber.Length == 1)
            {
                logNumber = ("00" + logNumber);
            }
            Dictionary <string, double> results = SearchInFile.GetSimulatorValuesByText(IOFunctions.GetLinesFromFile(@"ta.log." + logNumber), itemeDeCautat);

            foreach (String item in itemeDeCautat)
            {
                double adunare   = (cromozomsPopulation [i].Fitness + results [item]);
                double inmultire = benchmarkCounter * 1.0;
                double impartire = adunare / inmultire;
                cromozomsPopulation [i].Fitness = impartire;                 // Media Aritmetica
            }
        }