Exemplo n.º 1
0
            public void Crossover(ref ScheduleGenome p2, ref ScheduleGenome o1)
            {
                int cutpoint = SimpleRNG.Next(0, _jobsLength);

                //Debug.Write(Environment.NewLine + "Distance between " + p1 + " - " + p2 + ": " + population[p1].Distance(population[p2]));

                for (int i = 0; i < _jobsLength; i++)
                {
                    o1.JobGenes[i] = JobGenes[i];
                }

                Debug.Assert(o1.IsValid(), "Invalid creature before crossover");

                List <int> remainder = new List <int>(p2.JobGenes);

                for (int i = 0; i < cutpoint; i++)
                {
                    remainder.Remove(JobGenes[i]);
                }
                for (int i = cutpoint; i < _jobsLength; i++)
                {
                    o1.JobGenes[i] = remainder[i - cutpoint];
                }

                Debug.Assert(o1.IsValid(), "Invalid creature after crossover");

                RealCrossover(ref p2, ref o1);
                CombinationCrossover(ref p2, ref o1);
            }
Exemplo n.º 2
0
            public void RealCrossover(ref ScheduleGenome p2, ref ScheduleGenome o1)
            {
                switch (realCrossover)
                {
                case RealCrossoverOp.MeanWithNoise:
                    // Mean-with-noise Crossover:
                    for (int i = 0; i < _modesLength; i++)
                    {
                        double mean = TimeGenes[i] + p2.TimeGenes[i];
                        mean            = mean / 2.0;
                        o1.TimeGenes[i] = SimpleRNG.GetNormal(mean, 0.5);
                        if (o1.TimeGenes[i] < 0.0)
                        {
                            o1.TimeGenes[i] = 0.0;
                        }
                    }
                    break;

                case RealCrossoverOp.Uniform:
                    // Uniform Crossover:
                    int cutpoint = SimpleRNG.Next(0, _modesLength + 1);
                    for (int i = 0; i < cutpoint; i++)
                    {
                        o1.TimeGenes[i] = TimeGenes[i];
                    }
                    for (int i = cutpoint; i < _modesLength; i++)
                    {
                        o1.TimeGenes[i] = p2.TimeGenes[i];
                    }
                    break;
                }
            }
Exemplo n.º 3
0
            public ScheduleGenome(ScheduleGenome g)
            {
                JobGenes  = new int[g._jobsLength];
                TimeGenes = new double[g._timesLength];
                ModeGenes = new int[g._modesLength];

                _delayRate = g._delayRate;
                _delayMean = g._delayMean;

                _jobsLength    = g._jobsLength;
                _timesLength   = g._timesLength;
                _modesLength   = g._modesLength;
                _numberOfModes = g._numberOfModes;
                _mutationRate  = g._mutationRate;

                realCrossover = g.realCrossover;

                for (int i = 0; i < g._jobsLength; i++)
                {
                    JobGenes[i] = g.JobGenes[i];
                }
                for (int i = 0; i < g._timesLength; i++)
                {
                    TimeGenes[i] = g.TimeGenes[i];
                }
                for (int i = 0; i < g._modesLength; i++)
                {
                    ModeGenes[i] = g.ModeGenes[i];
                }
                fitness = -1;
            }
Exemplo n.º 4
0
            public double Distance(ScheduleGenome c)
            {
                double d = 0;

                for (int i = 0; i < _modesLength; i++)
                {
                    d += Math.Pow(TimeGenes[i] - c.TimeGenes[i], 2.0);
                }
                return(Math.Sqrt(d));
            }
Exemplo n.º 5
0
            public void CombinationCrossover(ref ScheduleGenome p2, ref ScheduleGenome o1)
            {
                int cutpoint = SimpleRNG.Next(0, _modesLength);

                for (int i = 0; i < cutpoint; i++)
                {
                    o1.ModeGenes[i] = p2.ModeGenes[i];
                }
                for (int i = cutpoint; i < _modesLength; i++)
                {
                    o1.ModeGenes[i] = ModeGenes[i];
                }
            }
Exemplo n.º 6
0
 public void Copy(ScheduleGenome c)
 {
     fitness = c.fitness;
     for (int i = 0; i < JobGenes.Length; i++)
     {
         JobGenes[i] = c.JobGenes[i];
         if (i < _modesLength)
         {
             TimeGenes[i] = c.TimeGenes[i];
             ModeGenes[i] = c.ModeGenes[i];
         }
     }
 }
Exemplo n.º 7
0
 public void IntializePopulations(ScheduleGenome genomeDefinition)
 {
     elite = new ScheduleGenome(genomeDefinition);
     elite.realCrossover = realCrossover;
     elite.RandomInit();
     for (int i = 0; i < _popsize; i++)
     {
         population[i] = new ScheduleGenome(elite);
         population[i].RandomInit();
         //population[i] = new ScheduleGenome(length, tl, modes, mutationRate, delayRate, delayMean);
         //population[i].realCrossover = realCrossover;
     }
     for (int i = 0; i < _offsize; i++)
     {
         offspring[i] = new ScheduleGenome(elite);
         offspring[i].RandomInit();
         //offspring[i] = new ScheduleGenome(length, tl, modes, mutationRate, delayRate, delayMean);
         //offspring[i].realCrossover = realCrossover;
     }
 }
Exemplo n.º 8
0
 // todo: broken, fix.
 public void SeedPopulation(int[] genes, double[] times, int[] modes, int mModes, double mutationRate)
 {
     population[0] = new ScheduleGenome(genes.Length, times.Length, modes.Length, mModes, mutationRate, genes, times, modes);
 }