static void Main(string[] args) { var powerUnitRepository = new PowerUnitRepository(); var powerUnitGALogic = new PowerUnitGALogic(); var populationSize = 500; var crossOverProbabality = 0.9; var mutationProbabaity = 0.001; const int MaxNumIterationsSameSolution = 25; // maximum number of iterations which GA could run on a same error rate Display("------------ Load Power Unit Details"); var powerUnits = powerUnitRepository.PowerUnits; DisplayPowerUnitData(powerUnits); // 1 create initial population Display("------------ Create Initial Population"); var population = powerUnitGALogic.CreateInitialPopulation(populationSize, powerUnits.Count); // 2 create fitness function Display("\n------------ Create Fitness function - sum of total diatance of cities within the chromosome - distance low --> better chromosome"); double maxPossiblePower = powerUnits.Sum(x => x.UnitCapacity); var numberOfIntervals = new IntervalFitnessDataRepository(maxPossiblePower).GetNumberOfIntervals(); var powerUnitMaintainanceFitness = new PowerUnitMaintainanceFitnessFunction(powerUnitRepository.GetAllPowerUnits(), numberOfIntervals, maxPossiblePower); // 3 create GA trainer Display("\n------------ Create GA Trainer for iterations"); TrainEA geneticAlgorithm = powerUnitGALogic.CreateGA(powerUnits.Count, population, powerUnitMaintainanceFitness, crossOverProbabality, mutationProbabaity); // 4 iterate and create off spring of new solutions Display("\n------------ Run GA for iterations until good solutions found"); geneticAlgorithm = powerUnitGALogic.RunGA(geneticAlgorithm, MaxNumIterationsSameSolution); // 5 display GA results Display("\n------------ Display Final solution after iterations"); powerUnitGALogic.DisplaySolution(geneticAlgorithm, powerUnitRepository.GetAllPowerUnits(), maxPossiblePower); Display("\n------------ Done"); Console.ReadKey(); }
public FourBitCustomGenome CreateRandomGenome(int geneCountPerChromosome) { try { var randomGenome = new FourBitCustomGenome(geneCountPerChromosome); var powerUnits = new PowerUnitRepository().GetAllPowerUnits(); var chromosomeData = new FourBitGene[geneCountPerChromosome]; for (var powerUnitIndex = 0; powerUnitIndex < chromosomeData.Length; powerUnitIndex++) { var powerUnitInfo = powerUnits.SingleOrDefault(x => x.UnitNumber == powerUnitIndex + 1); chromosomeData[powerUnitIndex] = GetRandomGeneForPowerUnit(powerUnitInfo); } DisplayGeneAsString(randomGenome, chromosomeData); return(randomGenome); } catch (Exception e) { Console.WriteLine(e); throw; } }