Example #1
0
    public Individual(Individual M, Individual F, Species s)
    {
        if (M.Generation > F.Generation)
        {
            Generation = M.Generation + 1;
        }
        else
        {
            Generation = F.Generation + 1;
        }
        s.Baseline.ForEach(g =>
        {
            Genes.Add(g.Clone());
        });
        int index = 0;

        foreach (var x in Genes)
        {
            switch (x.carrier)
            {
            case Sex.Female:
                x.Clone(F.Genes[index]);
                break;

            case Sex.Male:
                x.Clone(M.Genes[index]);
                break;

            case Sex.Either:
                if (rng.NextBool())
                {
                    x.Clone(F.Genes[index]);
                }
                else
                {
                    x.Clone(M.Genes[index]);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            if (rng.NextFloat(0, s.MutationPropensity) < 1)
            {
                byte n = (byte)rng.Next(0, 256);
                //	Debug.LogWarning( x.val + " is now " + n);
                x.SetVal(n);
            }
            index++;
        }

        species = s;
        s.Members.Remove(M);
        s.Members.Remove(F);
        s.Members.Add(this);

        Divergence = CalculateDivergence(this);
        sex.RandomSex();
        string GenesString = "";

        foreach (var g in Genes)
        {
            GenesString += " " + g.val;
        }
        Debug.LogWarning("Gen: " + Generation + " | Div: " + Divergence + "% Genes: " + GenesString);
    }