package Ġde . long uy en . shapes pe are monkey Ċ Ċ import Ġjava . lang . IllegalArgumentException Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Int Stream Ċ Ċ class ĠPop ulation ( private Ġval Ġtarget : ĠString , Ġsize : ĠInt Ġ= Ġ 1 0 0 , Ġprivate Ġval Ġmutation Rate : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠ Ġvar Ġchromosome s : ĠArray < Chrom osome > Ġ= ĠArray ( size ) Ġ{ ĠCh rom osome ( target . length ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġrandom Ġ= ĠRandom () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtarget . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ALPH AB ET . to HashSet (). contains ( target [ i ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" The Ġcharacter Ġ${ target [ i ]} Ġis Ġnot Ġin Ġthe Ġalphabet Ġand Ġtherefore Ġcan Ġnot Ġbe Ġreconstruct ed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfit And Sort () Ġ{ ĊĠĠĠĠĠĠĠ ĠInt Stream . range ( 0 , Ġchromosome s . size ). parallel (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchromosome s [ it ]. fit ( target ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchromosome s . sortBy Descending ( Chrom osome :: fitness ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġev olve () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Population Ġ= Ġmutable ListOf < Chrom osome >() ĊĠĠĠĠĠĠĠ Ġnew Population . add ( chrom osome s . first ()) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( new Population . size Ġ< Ġchromosome s . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmother Ġ= Ġselect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfather Ġ= Ġselect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Population . add ( mother . mutate ( mutation Rate ). cross over ( father . mutate ( mutation Rate ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchromosome s Ġ= Ġnew Population . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect (): ĠCh rom osome Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġchromosome s . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchromosome Ġ= Ġchromosome s [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( random . next Double () Ġ<= Ġ( chrom osome s . size Ġ- Ġi ) Ġ/ Ġ( chrom osome s . size . toDouble () Ġ+ Ġchromosome s . size Ġ* Ġ 0 . 6 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchromosome ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġchromosome s . first () ĊĠĠĠ Ġ} Ċ }