private void performAddPolygon(Gene gene)
        {
            if (gene.Polygons.Count >= this.NrOfPolygons)
            {
                return;
            }
            double oldNegativeFitness           = gene.NegativeFitness;
            AddPolygonMutationChanges bigChange = null;

            for (int i = 0; i < NrOfMutationsTries; i++)
            {
                AddPolygonMutationChanges changes = gene.AddPolygon();
                if (changes != null && gene.NegativeFitness > oldNegativeFitness)
                {
                    gene.RestoreMutation(changes, oldNegativeFitness);
                }
                else if (changes != null)
                {
                    oldNegativeFitness = gene.NegativeFitness;
                    bigChange          = changes;
                    gene.RestoreMutation(changes, changes.OldNegativeFitness);
                }
            }
            gene.ApplyMutation(bigChange);
        }