Exemple #1
0
        public void Reproduce(List <StringTrait> mothers, List <StringTrait> fathers, List <char> characters)
        {
            Traits = new List <StringTrait>();
            var paternal = false;

            foreach (var character in characters)
            {
                var mWeighting = mothers.First(g => g.Character == character).Weighting;
                var fWeighting = fathers.First(g => g.Character == character).Weighting;
                //var weighting = (mWeighting + fWeighting + Random.Next(-Variance, Variance) / 2);
                var weighting = (mWeighting + Random.Next(-Variance, Variance) / 2);
                if (paternal)
                {
                    weighting = (fWeighting + Random.Next(-Variance, Variance) / 2);
                }
                weighting = weighting > 100 ? 100 : weighting;
                weighting = weighting < 0 ? 0 : weighting;

                var gene = new StringTrait()
                {
                    Random    = new Random(Random.Next()),
                    Character = character,
                    Weighting = weighting
                };
                Traits.Add(gene);

                paternal = !paternal;
            }
        }
Exemple #2
0
 public void ResetGenes(List <char> characters)
 {
     Traits = new List <StringTrait>();
     foreach (var character in characters)
     {
         var gene = new StringTrait()
         {
             Random    = new Random(Random.Next()),
             Character = character,
             Weighting = Random.Next(1, 100)
         };
         Traits.Add(gene);
     }
 }
Exemple #3
0
        public StringTrait GetWeightedRandomGene()
        {
            var total    = Traits.Sum(g => g.Weighting);
            var selected = Random.Next(0, total);

            StringTrait output = null;

            foreach (var gene in Traits)
            {
                if (selected < gene.Weighting)
                {
                    output = gene;
                    break;
                }

                selected = selected - gene.Weighting;
            }

            return(output);
        }