public double[] GetFinalScores(Schedule sch, SchedulingFitness fitness) { ctx.FillDetails = true; sch.Details = Enumerable.Range(0, 100).Select(i => new FinalExamDetail()).ToArray(); var results = fitness.CostFunctions.Select(cf => cf(sch)).ToList(); //List<double> results = new List<double> //{ // fitness.GetStudentDuplicatedScore(sch), // fitness.GetPresidentNotAvailableScore(sch), // fitness.GetSecretaryNotAvailableScore(sch), // fitness.GetExaminerNotAvailableScore(sch), // fitness.GetMemberNotAvailableScore(sch), // fitness.GetSupervisorNotAvailableScore(sch), // fitness.GetPresidentChangeScore(sch), // fitness.GetSecretaryChangeScore(sch), // fitness.GetPresidentWorkloadWorstScore(sch), // fitness.GetPresidentWorkloadWorseScore(sch), // fitness.GetPresidentWorkloadBadScore(sch), // fitness.GetSecretaryWorkloadWorstScore(sch), // fitness.GetSecretaryWorkloadWorseScore(sch), // fitness.GetSecretaryWorkloadBadScore(sch), // fitness.GetMemberWorkloadWorstScore(sch), // fitness.GetMemberWorkloadWorseScore(sch), // fitness.GetMemberWorkloadBadScore(sch), // fitness.GetPresidentSelfStudentScore(sch), // fitness.GetSecretarySelfStudentScore(sch), // fitness.GetExaminerNotPresidentScore(sch) //}; /*foreach (FieldInfo info in typeof(Scores).GetFields().Where(x => x.IsStatic && x.IsLiteral)) * { * results.Add((double)info.GetValue(info)); * //ws_info.Cells[row, 4].Value = info.Name; * //ws_info.Cells[row, 5].Value = info.GetValue(info); * //row++; * results.Add() * * }*/ return(results.ToArray()); }
public Task <Schedule> RunAsync() { var selection = new EliteSelection(); var crossover = new UniformCrossover(0.5f); //var mutation = new TworsMutation(); var mutation = new SchedulingMutation(ctx); //var mutation = new UniformMutation(); var chromosome = new SchedulingChromosome(ctx); Fitness = new SchedulingFitness(ctx); var population = new Population(Parameters.MinPopulationSize, Parameters.MaxPopulationSize, chromosome); termination = new SchedulingTermination(); geneticAlgorithm = new GeneticAlgorithm(population, Fitness, selection, crossover, mutation); geneticAlgorithm.Termination = termination; geneticAlgorithm.GenerationRan += GenerationRan; geneticAlgorithm.MutationProbability = 0.05f; return(Task.Run <Schedule>( () => { Console.WriteLine("GA running..."); geneticAlgorithm.Start(); Console.WriteLine("Best solution found has {0} fitness.", geneticAlgorithm.BestChromosome.Fitness); var bestChromosome = geneticAlgorithm.BestChromosome as SchedulingChromosome; var best = bestChromosome.Schedule; return best; })); }