Example #1
0
        public override IChromosome Clone()
        {
            var scheduleChromosome = new ScheduleChromosome(this.JobShop, false)
            {
                ScheduleLength = this.ScheduleLength,
                Graph          = this.Graph,
                Fitness        = this.Fitness,
            };
            var clonedGenes = GetGenes().Select(x => x.Value)
                              .Cast <MachineChromosome>().Select(x => x.Clone())
                              .Select(x => new Gene(x)).ToArray();

            scheduleChromosome.ReplaceGenes(0, clonedGenes);

            return(scheduleChromosome);
        }
 private void PerformMutate(ScheduleChromosome chromosome, float probability)
 {
     if (RandomizationProvider.Current.GetDouble() <= probability)
     {
         // perform mutation by machines
         foreach (var gene in chromosome.GetGenes())
         {
             if (RandomizationProvider.Current.GetDouble() <= machineMutationProbability)
             {
                 // perform swap (maybe more times)
                 machineMutation.Mutate((MachineChromosome)gene.Value, 1);
                 chromosome.ScheduleLength = null;
                 chromosome.Fitness        = null;
             }
         }
     }
 }
        private double Evaluate(ScheduleChromosome chromosome)
        {
            if (chromosome.Fitness != null)
            {
                return(chromosome.Fitness.Value);
            }

            // create graph
            chromosome.FixChromosome();
            var graph = chromosome.Graph;

            double scheduleLength = new GraphHandler().GetMaximumCost(graph, chromosome.TopologicalOrder);

            chromosome.ScheduleLength = scheduleLength;
            chromosome.Fitness        = 1 / (scheduleLength + 1);

            return(chromosome.Fitness.Value);
        }