/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="config"></param> public GenAlgSolver(OptimizationInput input, GenAlgConfig config) { if (!config.IsValid()) { throw new ArgumentException("must not be invalid", "config"); } this.input = input; this.config = config; }
/// <summary> /// Can be called concurrent. /// </summary> /// <param name="parameters"></param> /// <returns></returns> static double RunGeneticAlgorithm(double[] parameters) { // settings var timeLimitMilliseconds = 500; var numberOfRuns = 10; var maxNumberOfGenerations = long.MaxValue; // create solver var(input, _) = DatasetFactory.DatasetGATuning(); var config = new GenAlgConfig(input.NumberOfSantas(), maxNumberOfGenerations, (int)parameters[6], parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], parameters[5]); var solver = new GenAlgSolver(input, config); // run numberOfRuns times and return average return(Enumerable.Range(0, numberOfRuns) .Select(v => solver.Solve(timeLimitMilliseconds, null, null).Cost()) .Average()); }
public EvolutionOperation(GenAlgConfig config) { this.config = config; this.recombinationOperation = new RecombinationOperation(RandomFactory.Instance, config.OrderBasedCrossoverProbability); this.mutationOperation = new MutationOperation(RandomFactory.Instance, config.PositionMutationProbability); }