コード例 #1
0
        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;
        }
コード例 #2
0
ファイル: RouletteSelection.cs プロジェクト: toroerp/numl
        /// <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));
        }
コード例 #3
0
 /// <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)
 {
 }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 /// <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);
 }
コード例 #6
0
 protected Population(IFitnessMetric fitnessMetric, FitnessMode fitnessMode)
 {
     this.FitnessMetric = fitnessMetric;
     this.FitnessMode   = fitnessMode;
 }
コード例 #7
0
ファイル: GeneticAlgorithm.cs プロジェクト: lulzzz/sito
        /// <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);
        }
コード例 #8
0
 public FitnessCalculator(Airfoil.AirfoilManager airfoil, FitnessMode fitnessMode)
 {
     this.airfoil     = airfoil;
     this.fitnessMode = fitnessMode;
 }