public string Debug(SuperLightGA ga, float[] genome)
        {
            int    start  = Start;
            string output = "";

            for (int i = 0; i < MainClass.NumberOfSteps; i++)
            {
                float g1     = ga.ReadGene(genome, i, 0);
                float g2     = ga.ReadGene(genome, i, 1);
                int   factor = (int)Math.Round(g1 * MaxJumpDistance);
                if (g2 < 0.5f)  // Subtract
                {
                    output += string.Format("- {0} ", factor);
                }
                else // Add
                {
                    output += string.Format("+ {0} ", factor);
                }
                start = Perform(
                    start,
                    ga.ReadGene(genome, i, 0),
                    ga.ReadGene(genome, i, 1)
                    );
                if (start == Target)
                {
                    break;
                }
            }
            return(output + string.Format("= {0} ", start));
        }
        public float Evaluate(SuperLightGA ga, float[] genome)
        {
            int start = Start;
            int numberOfSteps;
            int score = 0;

            for (numberOfSteps = 0; numberOfSteps < MainClass.NumberOfSteps; numberOfSteps++)
            {
                start = Perform(
                    start,
                    ga.ReadGene(genome, numberOfSteps, 0),
                    ga.ReadGene(genome, numberOfSteps, 1)
                    );
                if (start == Target)
                {
                    break;
                }
                // Evaluate based on # of jumps and distance from goal
                score += (numberOfSteps + 1) * Math.Max(0, Math.Abs(Target - start));
            }
            return(score);
        }