public override float CalculateFitness(BaseGenome genome)
    {
        BaseGenomeBinary g = genome as BaseGenomeBinary;
        int nrOnes         = 0;

        for (int i = 0; i < g.Length; i++)
        {
            nrOnes += g.IsSet(i) ? 1 : 0;
        }
        return(nrOnes);
    }
 public float CalculateFitness(BaseGenomeBinary genome)
 {
     int leftPile = 0;
     int rightPile = 1;
     for (int i = 0; i < genome.Length; i++) {
         if (genome.IsSet(i)) {
             leftPile += (i+1);
         } else {
             rightPile *= (i+1);
         }
     }
     int leftError = Mathf.Abs(36-leftPile);
     int rightError = Mathf.Abs(360-rightPile);
     // The max value of the right pile is: 3628800.
     // Hence the maximum error is: 36 + 3628800/10 = 362916
     return 1-(leftError + rightError/10.0f)/362916.0f;
 }
Exemple #3
0
    public float CalculateFitness(BaseGenomeBinary genome)
    {
        int leftPile  = 0;
        int rightPile = 1;

        for (int i = 0; i < genome.Length; i++)
        {
            if (genome.IsSet(i))
            {
                leftPile += (i + 1);
            }
            else
            {
                rightPile *= (i + 1);
            }
        }
        int leftError  = Mathf.Abs(36 - leftPile);
        int rightError = Mathf.Abs(360 - rightPile);

        // The max value of the right pile is: 3628800.
        // Hence the maximum error is: 36 + 3628800/10 = 362916
        return(1 - (leftError + rightError / 10.0f) / 362916.0f);
    }