/// <summary> /// Returns total sum of distance between cities represnted in the chromosome /// </summary> /// <param name="phenotype"></param> /// <returns></returns> public double CalculateScore(IMLMethod phenotype) { try { FourBitCustomGenome genome = (FourBitCustomGenome)phenotype; FourBitGene [] genomeData = ((FourBitCustomGenome)genome).Data; //double maxPossiblePower = PowerUnits.Sum(x => x.UnitCapacity); new PowerUnitGALogic().DisplayGeneAsString(genome, genomeData); var intervalFitnessDataRepository = new IntervalFitnessDataRepository(MaxPossiblePower); var intervalRawData = intervalFitnessDataRepository.IntervalRawData; for (int i = 0; i < NumberOfIntervals; i++) { IntervalsFitnessData interval = intervalRawData[i]; //interval.MaxReserve = maxPossiblePower; for (int j = 0; j < genomeData.Length; j++) { PowerUnit powerUnit = PowerUnits[j]; FourBitGene fourBitGene = genomeData[j]; int geneBitIndex = i; var isPowerUnitMaintained = fourBitGene.Gene[geneBitIndex] == 1; if (isPowerUnitMaintained) { interval.ReducedAmountOnMaintainance = interval.ReducedAmountOnMaintainance + (1 * powerUnit.UnitCapacity); } else { interval.ReducedAmountOnMaintainance = interval.ReducedAmountOnMaintainance + (0 * powerUnit.UnitCapacity); } } var totalPowerReductionOnMaintanceAndUsage = interval.PowerRequirement + interval.ReducedAmountOnMaintainance; interval.ReserveAfterMaintainance = interval.MaxReserve - totalPowerReductionOnMaintanceAndUsage; //if (interval.ReserveAfterMaintainance < 0.0) //{ // // the chromosome is not suitable for out requirement // chromosomeFitness = 0.0; //} } var reserveAfterMaintainanceMin = intervalRawData.Min(x => x.ReserveAfterMaintainance); // minimal rerserve after maintainance and usage provides chormosomes fitness //var chromosomeFitness = reserveAfterMaintainanceMin > 0.0 ? reserveAfterMaintainanceMin : 0.0; var chromosomeFitness = reserveAfterMaintainanceMin; Console.WriteLine("\tFitness = {0} - of {1}, {2}, {3}, {4}", chromosomeFitness, intervalRawData[0].ReserveAfterMaintainance, intervalRawData[1].ReserveAfterMaintainance, intervalRawData[2].ReserveAfterMaintainance, intervalRawData[3].ReserveAfterMaintainance); return(chromosomeFitness); } catch (Exception e) { Console.WriteLine(e); throw; } }
public void DisplayGeneAsString(FourBitCustomGenome randomGenome, FourBitGene[] chromosomeData) { for (var i = 0; i < randomGenome.Data.Length; i++) { randomGenome.Data[i] = chromosomeData[i]; // display chromosome to user var geneBitsString = GetGeneBitString(randomGenome.Data[i]); if (i == 0) { Console.Write("[ {0}", geneBitsString); } else if (i < chromosomeData.Length - 1) { Console.Write(", {0}", geneBitsString); } else { Console.Write(", {0}]", geneBitsString); } } }
public BasicPopulation CreateInitialPopulation(int populationSize, int geneCountPerChomosome) { try { var genomeFactory = new FourBitChomosomeGenomeFactory(geneCountPerChomosome); var population = new BasicPopulation(populationSize, genomeFactory); var defaultSpecies = new BasicSpecies(); for (var i = 1; i <= populationSize; i++) { Console.Write("\n {0} Chromosome - ", i); FourBitCustomGenome genome = CreateRandomGenome(geneCountPerChomosome); defaultSpecies.Members.Add(genome); } population.Species.Add(defaultSpecies); return(population); } catch (Exception e) { Console.WriteLine(e); throw; } }
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; } }