public void initDNA(int mutationMod, Actor... parents) {
    //
    //  First, if required, we sample the genetic material of the parents-
    final boolean free = parents == null || parents.length == 0 ;
    final char material[][] ;
    if (free) material = null ;
    else {
      material = new char[parents.length][] ;
      for (int n = parents.length ; n-- > 0 ;) {
        material[n] = parents[n].traits.DNA.toCharArray() ;
      }
    }
    //
    //  Then, we merge the source material along with a certain mutation rate.
    final StringBuffer s = new StringBuffer() ;
    for (int i = 0 ; i < DNA_SIZE ; i++) {
      if (free || Rand.index(100) < (MUTATION_PERCENT + mutationMod)) {
        s.append((char) ('a' + Rand.index(DNA_LETTERS))) ;
      }
      else {
        s.append(material[Rand.index(parents.length)][i]) ;
      }
    }
    DNA = s.toString() ;
    geneHash = DNA.hashCode() ;
  }