break;
if (converged == true) { break; }
   public int[] search (int[] startSet, ASEvaluation ASEval, Instances data)    throws Exception {     m_best = null;     m_generationReports = new StringBuffer();     if (!(ASEval instanceof SubsetEvaluator)) {       throw  new Exception(ASEval.getClass().getName() 			    + " is not a " 			    + "Subset evaluator!");     }         if (startSet != null) {      m_starting = startSet;    }    if (ASEval instanceof UnsupervisedSubsetEvaluator) {      m_hasClass = false;    }    else {      m_hasClass = true;      m_classIndex = data.classIndex();    }    SubsetEvaluator ASEvaluator = (SubsetEvaluator)ASEval;    m_numAttribs = data.numAttributes();    // initial random population    m_lookupTable = new Hashtable(m_lookupTableSize);    m_random = new Random(m_seed);    m_population = new GABitSet [m_popSize];    // set up random initial population    initPopulation();    evaluatePopulation(ASEvaluator);    populationStatistics();    scalePopulation();    checkBest();    m_generationReports.append(populationReport(0));    boolean converged;    for (int i=1;i<=m_maxGenerations;i++) {      generation();      evaluatePopulation(ASEvaluator);      populationStatistics();      scalePopulation();      // find the best pop member and check for convergence      converged = checkBest();      if ((i == m_maxGenerations) || 	  ((i % m_reportFrequency) == 0) ||	  (converged == true)) {	m_generationReports.append(populationReport(i));	break;      }    }    return attributeList(m_best.getChromosome());   }