public RandomElementFactory(ICharacterGenerator characterGenerator, int geneCount, int chromsomeCount, FitnessCalculator fitnessCalculator) { this.characterGenerator = characterGenerator; this.fitnessCalculator = fitnessCalculator; GeneCount = geneCount; ChromosomeCount = chromsomeCount; }
static bool HandleCommandLineArgs(IEnumerable<string> args) { string fitnessType = "", crossoverType = ""; bool status = true; options = new OptionSet { {"m|mutation=", "The mutation rate (0-1)", (double v) => mutationRate = v}, {"s|crossover=", "The crossover rate (0-1)", (double v) => crossoverRate = v}, {"e|elitism=", "The elitism rate (0-1)", (double v) => elitismRate = v}, {"c|crcount=", "The number of chromosomes per population (>1)", (int v) => chromosomeCount = v}, {"fitness=", "The fitness calculator [sum | levenshtein | hamming]", v => fitnessType = v}, {"ctype=", "The crossover type [one | two ]", v => crossoverType = v}, {"t|truncate=", "The rate of the chromosomes to keep from a population before advancing (0 < t <= 1)", (double v) => truncationRate = v}, {"?|h|help", "Show help", v => { status = false; }}, {"<>", v => target = v} }; try { options.Parse(args); } catch (OptionException ex) { status = false; } fitness = (FitnessCalculator)Activator.CreateInstance(GetOperationType(fitnessTypes, fitnessType), new object[] { target }); crossover = (ICrossover)Activator.CreateInstance(GetOperationType(crossoverTypes, crossoverType), new object[] { fitness }); characterGenerator = new ASCIICharacterGenerator(); mutation = new SinglePointMutation(characterGenerator, fitness); selection = new RouletteWheelSelection(); if (String.IsNullOrEmpty(target) || mutationRate > 1 || crossoverRate > 1 || elitismRate > 1 || chromosomeCount <= 1 || truncationRate <= 0 || truncationRate > 1) { status = false; } return status; }
public OnePointCrossover(FitnessCalculator fitnessCalculator) { this.fitnessCalculator = fitnessCalculator; random = new Random(); }
public SinglePointMutation(ICharacterGenerator characterGenerator, FitnessCalculator fitnessCalculator) { this.fitnessCalculator = fitnessCalculator; random = new Random(); generator = characterGenerator; }