private ClassifierIndividual[] createKidsFromEncoding(
     GAParameterSet params, BitString c1, BitString c2) {
   ClassifierIndividual[] kids = new ClassifierIndividual[getRequiredNumberOfParents()];
   kids[0] =
       (ClassifierIndividual) params.getIndividualsFactory().createSpecificIndividual(c1, params);
   kids[1] =
       (ClassifierIndividual) params.getIndividualsFactory().createSpecificIndividual(c2, params);
   return kids;
 }
 protected Individual[] makeCopyOfParents(Individual[] parents, GAParameterSet params) {
   Individual[] kids = new Individual[parents.length];
   for (int i = 0; i < kids.length; i++) {
     kids[i] =
         params
             .getIndividualsFactory()
             .createSpecificIndividual(
                 ((BinaryEncodedIndividual) parents[i]).getBitStringRepresentation(), params);
     // kids[i] = (BinaryEncodedIndividual) ((BinaryEncodedIndividual) parents[i]).clone();
     kids[i].setFitness(parents[i].getFitness());
   }
   return kids;
 }
 private boolean kidsSatisfyConstraints(ClassifierIndividual[] kids, GAParameterSet params) {
   ClassifierIndividualFactory fact = (ClassifierIndividualFactory) params.getIndividualsFactory();
   for (int i = 0; i < kids.length; i++) if (!fact.valid(kids[i])) return false;
   return true;
 }