Ejemplo n.º 1
0
        /// <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;
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
 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;
     }
 }
Ejemplo n.º 4
0
        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;
            }
        }