public FitnessFunctions() { this.mode = FitnessMode.MRE; // ToDo à modifier depuis l'interface utilisateur this.ParamValueDictio = new Dictionary <string, Dictionary <string, double> >(); paramValueDictioSize = 0; this.ParamSubModel = new Dictionary <string, string>(); this.ObservationsValue = new Dictionary <RunInfo, List <KeyValuePair <OptiObservation, Tuple <DateTime, double> > > >(); optimizeManagementParameter = false; optimizeSoilParameter = false; optimizeVarietalParameter = false; optimizeNonVarietalParameter = false; // Soil Parameters this.ParamSubModel.Add("Kq", "Soil"); this.ParamSubModel.Add("Ko", "Soil"); this.ParamSubModel.Add("No", "Soil"); this.ParamSubModel.Add("MinNir", "Soil"); this.ParamSubModel.Add("Ndp", "Soil"); // Management Parameters this.ParamSubModel.Add("SowingDate", "Management"); this.ParamSubModel.Add("TotalNi", "Management"); this.ParamSubModel.Add("CO2", "Management"); this.ParamSubModel.Add("SowingDensity", "Management"); this.ParamSubModel.Add("TopNi", "Management"); this.ParamSubModel.Add("MidNi", "Management"); this.ParamSubModel.Add("SoilWaterDeficit", "Management"); this.ParamSubModel.Add("TargetFertileShootNumber", "Management"); run = new Run(); this.RunInfos = new List <RunInfo>(); this.Managements = new HashSet <ManagementItem>(); this.RunOptions = new HashSet <RunOptionItem>(); this.Sites = new HashSet <SiteItem>(); this.Soils = new HashSet <SoilItem>(); this.Varieties = new HashSet <CropParameterItem>(); this.NonVarieties = new HashSet <CropParameterItem>(); multiMultiYear = false; multiFirstYear = 0; multiLastYear = 0; }
/// <summary> /// Applies Roulette Wheel sampling to the chromosomes. /// </summary> /// <param name="pool">Pool of chromosomes to select from.</param> /// <returns></returns> public IEnumerable <IChromosome> Select(IEnumerable <IChromosome> pool, FitnessMode fitnessMode) { Vector weights = pool.Select(s => s.Weight).ToVector(); return(this._Filter.Filter(pool, weights)); }
/// <summary> /// Initializes the genetic pool using the specified seed and mutation functions. /// </summary> /// <param name="poolSize">Size of the pool to create.</param> /// <param name="seed">Starting seed value.</param> /// <param name="seedMutator">Mutator used during initialization of the pool.</param> /// <param name="fitnessMetric">Fitness function for evaluating chromosomes.</param> /// <param name="fitnessMode">Fitness mode.</param> public Population(int poolSize, IChromosome seed, IMutationFunction seedMutator, IFitnessMetric fitnessMetric, FitnessMode fitnessMode) : this(poolSize, () => seedMutator.Mutate(seed), fitnessMetric, fitnessMode) { }
/// <summary> /// Initializes a new Population using a factory and the specified fitness. /// </summary> /// <param name="pool"></param> /// <param name="poolSize">Size of the pool to create.</param> /// <param name="fnInitializer">Initialization function to be called for each new chromosome.</param> /// <param name="fitnessMetric">Fitness function for evaluating chromosomes.</param> /// <param name="fitnessMode">Fitness mode.</param> public Population(int poolSize, Func <IChromosome> fnInitializer, IFitnessMetric fitnessMetric, FitnessMode fitnessMode) : this(fitnessMetric, fitnessMode) { var chromosomes = new IChromosome[poolSize]; // init pool for (int i = 0; i < poolSize; i++) { var clone = fnInitializer(); clone.Fitness = this.FitnessMetric.Fitness(clone); clone.Generation = 0; chromosomes[i] = clone; } this.Apply(chromosomes); }
/// <summary> /// Initializes a new Population using existing chromosomes. /// </summary> /// <param name="chromosomes">Chromosomes to use in the population.</param> /// <param name="fitnessMetric">Fitness function for evaluating chromosomes.</param> /// <param name="fitnessMode">Fitness mode.</param> public Population(IEnumerable <IChromosome> chromosomes, IFitnessMetric fitnessMetric, FitnessMode fitnessMode) : this(fitnessMetric, fitnessMode) { this.Apply(chromosomes); }
protected Population(IFitnessMetric fitnessMetric, FitnessMode fitnessMode) { this.FitnessMetric = fitnessMetric; this.FitnessMode = fitnessMode; }
/// <summary> /// Evolves using a standard genetic algorithm. /// </summary> /// <param name="chromosomes">Chromosomes to undergo evolution.</param> /// <param name="fitnessMetric">Fitness metric to use for evaluation.</param> /// <param name="fitnessMode">Fitness mode for evaluating performance.</param> public virtual IEnumerable <IChromosome> Evolve(IEnumerable <IChromosome> chromosomes, IFitnessMetric fitnessMetric, FitnessMode fitnessMode) { int count = chromosomes.Count(); var candidates = new List <IChromosome>(); int elites = (int)System.Math.Ceiling(chromosomes.Count() * this.ElitistRate); var topCandidates = (chromosomes.OrderByDescending(o => o.Weight).Take(elites)); foreach (var pair in this.Pairing.Pair(chromosomes)) { (IChromosome c1, IChromosome c2) = pair; IChromosome candidate = null; double rand = Sampling.GetUniform(); if (rand < this.CrossoverRate) { candidate = this.Crossover.Crossover(c1, c2); } double selector = Sampling.GetUniform(); candidate = candidate ?? (selector <= 0.5 ? c1 : c2); if (rand < this.MutationRate) { candidate = this.Mutation.Mutate(candidate.Clone()); } candidates.Add(candidate); } foreach (var elite in topCandidates) { candidates.Add(elite); } var result = this.Selection.Select(candidates, fitnessMode).Take(count); return(result); }
public FitnessCalculator(Airfoil.AirfoilManager airfoil, FitnessMode fitnessMode) { this.airfoil = airfoil; this.fitnessMode = fitnessMode; }