package Ġnet . colors _ wind . gen et ical gorithm Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . FileWriter Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent Linked Queue Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġp cs Ġ= Ġ 0 . 1 . range To ( 1 . 0 ). step ( 0 . 1 ). toList () ĊĠĠĠ Ġval Ġp ms Ġ= Ġ 0 . 0 1 . range To ( 0 . 1 0 ). step ( 0 . 0 1 ). toList () ĊĠĠĠ Ġval Ġqueue Ġ= ĠConcurrent Linked Queue < Population Config >() ĊĠĠĠ Ġval Ġresult Ġ= ĠVector < String >() ĊĠĠĠ Ġfor Ġ( pc Ġin Ġp cs ) Ġfor Ġ( pm Ġin Ġp ms ) Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue . add ( Population Config ( pc , Ġpm )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( Global Config . thread ) ĊĠĠĠ Ġrepeat ( Global Config . thread ) Ġ{ ĊĠĠĠĠĠĠĠ ĠThread ( Work Thread ( it , Ġqueue , Ġresult , Ġl atch )). start () ĊĠĠĠ Ġ} ĊĠĠĠ Ġl atch . await () ĊĠĠĠ Ġval Ġwriter Ġ= ĠFile Writer ( File (" result . csv "). apply Ġ{ Ġtake Unless Ġ{ Ġit . exists () Ġ} ?. createNew File () Ġ}) ĊĠĠĠ Ġwriter . append Line (" pc , pm , avg , wor st , wor st - x , wor st - y , best , best - x , best - y ") ĊĠĠĠ Ġresult . forEach Ġ{ Ġwriter . append Line ( it ) Ġ} ĊĠĠĠ Ġwriter . flush () ĊĠĠĠ Ġwriter . close () ĊĠĠĠ Ġprintln (" Write Ġcompleted !") Ċ Ċ } Ċ Ċ class ĠWork Thread ( ĊĠĠĠ Ġprivate Ġval Ġindex : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġqueue : ĠQueue < Population Config >, ĊĠĠĠ Ġval Ġresult : ĠVector < String >, ĊĠĠĠ Ġval Ġl atch : ĠCount DownLatch Ċ ) Ġ: ĊĠĠĠ ĠRunnable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Thread Ġ#$ index ĠStart ") ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġqueue . poll ()?. let Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpop ulations Ġ= Ġ( 0 .. Global Config . repeat ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopulation Ġ= ĠPop ulation ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( Global Config . G max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulation . next Generation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Chrom osome s Ġ= Ġpop ulations . map Ġ{ Ġit . get Best () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ("${ config . pc }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ config . pm }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ best Chrom osome s . sum By Double Ġ{ Ġit !!. fitness Ġ} Ġ/ Ġbest Chrom osome s . size }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ best Chrom osome s . min By OrNull Ġ{ Ġit !!. fitness Ġ} !!. fitness }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ best Chrom osome s . min By OrNull Ġ{ Ġit !!. fitness Ġ} !!. getData () }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ best Chrom osome s . max By OrNull Ġ{ Ġit !!. fitness Ġ} !!. fitness }," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ best Chrom osome s . max By OrNull Ġ{ Ġit !!. fitness Ġ} !!. getData () }," ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Rest Ġtask : Ġ${ queue . size }") ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġbreak ĊĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġprintln (" Thread Ġ#$ index ĠStop ") ĊĠĠĠ Ġ} Ċ Ċ }