package Ġl gp . core . e volution . model Ċ Ċ import Ġl gp . core . environment . Core Module Type Ċ import Ġl gp . core . environment . Environment Ċ import Ġl gp . core . environment . dataset . Dataset Ċ import Ġl gp . core . e volution . Export able Result Ċ import Ġl gp . core . e volution . fitness . Evaluation Ċ import Ġl gp . core . e volution . fitness . Fitness Evaluator Ċ import Ġl gp . core . program . Output Ċ import Ġl gp . core . program . Outputs Ċ import Ġl gp . core . e volution . operators .* Ċ import Ġl gp . core . modules . Module Information Ċ import Ġl gp . core . program . Program Ċ import Ġl gp . core . program . Program Generator Ċ Ċ import Ġjava . util . Random Ċ import Ġkotlin . concurrent . thread Ċ import Ġkotlin . streams . toList Ċ Ċ /** Ċ Ġ* ĠAn Ġ[ Export able Result ] Ġimplementation Ġthat Ġrepresents Ġevolution Ġstatistics Ġfor Ġa Ġparticular Ġrun . Ċ Ġ* Ċ Ġ* ĠBecause Ġevolution Ġstatistics Ġare Ġcollected Ġon Ġa Ġper - generation Ġbasis , Ġthis Ġtype Ġof Ġexport able Ġresult Ċ Ġ* Ġcollect s Ġdata Ġon Ġeach Ġgeneration Ġfor Ġeach Ġrun . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrun ĠThe Ġrun Ġthis Ġresult Ġrel ates Ġto . Ċ Ġ* Ġ@ param Ġstatistics ĠE volution Ġstatistics Ġfor Ġa Ġparticular Ġgeneration . Ċ Ġ*/ Ċ class ĠRun Based Export able Result < T >( ĊĠĠĠ Ġval Ġrun : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġstatistics : ĠE volution Statistics Ċ ) Ġ: ĠExport able Result < T > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEx ports Ġthis Ġresult Ġas Ġa Ġmapping Ġof Ġstatistic Ġnames Ġto Ġstatistic Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġexport (): ĠList < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" run ", Ġthis . run . toString ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġout . addAll ( statistics . data . map Ġ{ Ġ( name , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( name , Ġvalue . toString ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġout ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġcollection Ġof Ġbuilt - in Ġevolution Ġmodels . Ċ Ġ*/ Ċ object ĠModels Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmodel Ġfor Ġevolution Ġusing Ġa Ġst eady - state Ġalgorithm . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation , Ġsee ĠAlgorithm Ġ 2 . 1 Ġ( L GP ĠAlgorithm ) Ġfrom ĠLinear ĠGen etic ĠProgramming ĊĠĠĠĠ Ġ* Ġ( B rame ier , ĠM ., ĠB an zh af , ĠW . Ġ 2 0 0 1 ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠSte ady State < T Program , ĠT Output Ġ: ĠOutput < T Program >>( ĊĠĠĠĠĠĠĠ Ġenvironment : ĠEnvironment < T Program , ĠT Output > ĊĠĠĠ Ġ) Ġ: ĠE volution Model < T Program , ĠT Output >( environment ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġselect : ĠSelection Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Selection Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcombine : ĠRe combin ation Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Re combin ation Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmicro Mutate : ĠMutation Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Micro Mutation Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmacro Mutate : ĠMutation Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Macro Mutation Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfitness Evaluator : ĠF itness Evaluator < T Program , ĠT Output > Ġ= ĠF itness Evaluator () ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġindividuals : ĠMutable List < Program < T Program , ĠT Output >> ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġbest Program : ĠProgram < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinitialise () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogram Generator : ĠProgram Generator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( Core Module Type . Program Generator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s Ġ= Ġprogram Generator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( this . environment . configuration . population Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtrain ( dataset : ĠDataset < T Program >): ĠE volution Result < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrg Ġ= Ġthis . environment . random State ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠR ough ly Ġfollows ĠAlgorithm Ġ 2 . 1 Ġin ĠLinear ĠGen etic ĠProgramming Ġ( B rame ier . ĠM , ĠB an zh af ĠW .) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠInitial ise Ġa Ġpopulation Ġof Ġrandom Ġprograms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . initial ise () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġthe Ġinitial Ġfitness Ġof Ġthe Ġindividuals Ġin Ġthe Ġpopulation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Evalu ations Ġ= Ġthis . individual s . map Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Evaluator . evaluate ( individual , Ġdataset , Ġthis . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbest Ġ= Ġinitial Evalu ations . sorted By ( Evaluation < T Program , ĠT Output >:: fitness ). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatistics Ġ= Ġmutable ListOf < E volution Statistics >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis . environment . configuration . gener ations ). forEach Ġ{ Ġgen Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġearly Ġwhenever Ġwe Ġcan . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( best . fitness Ġ<= Ġthis . environment . configuration . stopping Criterion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġto Ġadd Ġat Ġleast Ġone Ġset Ġof Ġstatistics . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatistics . add ( this . statistics ( gen , Ġbest )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Result ( best . individual , Ġthis . individual s , Ġstatistics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġthis . select . select ( this . individual s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . pair wise (). map Ġ{ Ġ( mother , Ġfather ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCombine Ġmother Ġand Ġfather Ġwith Ġsome Ġprob . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . cross over Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . combine . combine ( mother , Ġfather ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMut ate Ġmother Ġor Ġfather Ġ( or Ġboth ) Ġwith Ġsome Ġprob . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . micro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . micro Mutate . mutate ( mother ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . macro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . macro Mutate . mutate ( mother ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . micro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . micro Mutate . mutate ( father ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . macro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . macro Mutate . mutate ( father ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠDo Ġvalidation Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevalu ations Ġ= Ġchildren . map Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Evaluator . evaluate ( individual , Ġdataset , Ġthis . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sorted By ( Evaluation < T Program , ĠT Output >:: fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Child Ġ= Ġevalu ations . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Ġ= Ġif Ġ( best Child . fitness Ġ< Ġbest . fitness ) Ġbest Child Ġelse Ġbest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġchildren Ġare Ġcopies Ġof Ġindividuals Ġin Ġthe Ġpopulation , Ġso Ġadd Ġthe Ġcopies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġthe Ġpopulation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s . addAll ( children ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatistics . add ( this . statistics ( gen , Ġbest )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Result ( best . individual , Ġthis . individual s , Ġstatistics ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġstatistics ( generation : ĠInt , Ġbest : ĠEvaluation < T Program , ĠT Output >): ĠE volution Statistics Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Fitness Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Program Length Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Effective Program Length Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Fitness Ġ= Ġbest . fitness ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s . forEach Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Fitness Ġ+= Ġindividual . fitness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Program Length Ġ+= Ġindividual . instructions . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Effective Program Length Ġ+= Ġindividual . effective Instructions . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Fitness Ġ/= Ġthis . individual s . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Program Length Ġ/= Ġthis . individual s . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Effective Program Length Ġ/= Ġthis . individual s . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġmean Ġthat Ġwe 've Ġalready Ġcalculated . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstandard De viation Ġ= Ġthis . individual s . map ( Program < T Program , ĠT Output >:: fitness ). standard De viation ( mean Fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Statistics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" generation " Ġto Ġgeneration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" best Fitness " Ġto Ġbest Fitness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Fitness " Ġto Ġmean Fitness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" standard De viation Fitness " Ġto Ġstandard De viation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Program Length " Ġto Ġmean Program Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Effective Program Length " Ġto Ġmean Effective Program Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest ( dataset : ĠDataset < T Program >): ĠTest Result < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . find Effective Program () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutputs Ġ= Ġdataset . inputs . map Ġ{ Ġfeatures Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġregisters . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . registers . reset () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġthe Ġfeatures ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . registers . write Instance ( features ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe Ġprogram ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . execute () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... Ġand Ġgather Ġa Ġresult Ġfrom Ġthe Ġprograms Ġspecified Ġoutput Ġregisters . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . output () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTest Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpredicted Ġ= Ġoutputs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġdataset . outputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" Algorithm Ġ 2 . 1 Ġ( L GP ĠAlgorithm )") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy (): ĠSte ady State < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSte ady State ( this . environment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeep Copy (): ĠE volution Model < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSte ady State ( this . environment . copy ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmodel Ġfor Ġevolution Ġusing Ġa Ġst eady - state Ġalgorithm . ĠThe Ġevaluation Ġand Ġmutation Ġprocesses Ġare ĊĠĠĠĠ Ġ* Ġparalle li sed Ġin Ġa Ġmaster - slave Ġbased Ġtechnique . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠMaster Slave < T Program , ĠT Output Ġ: ĠOutput < T Program >>( ĊĠĠĠĠĠĠĠ Ġenvironment : ĠEnvironment < T Program , ĠT Output > ĊĠĠĠ Ġ) Ġ: ĠE volution Model < T Program , ĠT Output >( environment ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġselect : ĠSelection Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Selection Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcombine : ĠRe combin ation Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Re combin ation Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmicro Mutate : ĠMutation Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Micro Mutation Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmacro Mutate : ĠMutation Operator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Macro Mutation Operator ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfitness Evaluator : ĠF itness Evaluator < T Program , ĠT Output > Ġ= ĠF itness Evaluator () ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġindividuals : ĠMutable List < Program < T Program , ĠT Output >> ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġbest Program : ĠProgram < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinitialise () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogram Generator : ĠProgram Generator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Program Generator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s Ġ= Ġprogram Generator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( this . environment . configuration . population Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtrain ( dataset : ĠDataset < T Program >): ĠE volution Result < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrg Ġ= Ġthis . environment . random State ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠR ough ly Ġfollows ĠAlgorithm Ġ 2 . 1 Ġin ĠLinear ĠGen etic ĠProgramming Ġ( B rame ier . ĠM , ĠB an zh af ĠW .) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠInitial ise Ġa Ġpopulation Ġof Ġrandom Ġprograms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . initial ise () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġthe Ġinitial Ġfitness Ġof Ġthe Ġindividuals Ġin Ġthe Ġpopulation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Evalu ations Ġ= Ġthis . individual s . p map Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Evaluator . evaluate ( individual , Ġdataset , Ġthis . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbest Ġ= Ġinitial Evalu ations . sorted By ( Evaluation < T Program , ĠT Output >:: fitness ). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatistics Ġ= Ġmutable ListOf < E volution Statistics >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis . environment . configuration . gener ations ). forEach Ġ{ Ġgen Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġearly Ġwhenever Ġwe Ġcan . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( best . fitness Ġ<= Ġthis . environment . configuration . stopping Criterion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġto Ġadd Ġat Ġleast Ġone Ġset Ġof Ġstatistics . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatistics . add ( this . statistics ( gen , Ġbest )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Result ( best . individual , Ġthis . individual s , Ġstatistics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġthis . select . select ( this . individual s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . pair wise (). map Ġ{ Ġ( mother , Ġfather ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCombine Ġmother Ġand Ġfather Ġwith Ġsome Ġprob . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . cross over Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . combine . combine ( mother , Ġfather ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMut ate Ġmother Ġor Ġfather Ġ( or Ġboth ) Ġwith Ġsome Ġprob . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . micro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . micro Mutate . mutate ( mother ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . macro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . macro Mutate . mutate ( mother ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . micro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . micro Mutate . mutate ( father ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( rg . next Double () Ġ< Ġthis . environment . configuration . macro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . macro Mutate . mutate ( father ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠDo Ġvalidation Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevalu ations Ġ= Ġchildren . p map Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Evaluator . evaluate ( individual , Ġdataset , Ġthis . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sorted By ( Evaluation < T Program , ĠT Output >:: fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Child Ġ= Ġevalu ations . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Ġ= Ġif Ġ( best Child . fitness Ġ< Ġbest . fitness ) Ġbest Child Ġelse Ġbest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġchildren Ġare Ġcopies Ġof Ġindividuals Ġin Ġthe Ġpopulation , Ġso Ġadd Ġthe Ġcopies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġthe Ġpopulation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s . addAll ( children ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatistics . add ( this . statistics ( gen , Ġbest )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Result ( best . individual , Ġthis . individual s , Ġstatistics ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġstatistics ( generation : ĠInt , Ġbest : ĠEvaluation < T Program , ĠT Output >): ĠE volution Statistics Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Fitness Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Program Length Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Effective Program Length Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Fitness Ġ= Ġbest . fitness ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s . forEach Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Fitness Ġ+= Ġindividual . fitness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Program Length Ġ+= Ġindividual . instructions . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Effective Program Length Ġ+= Ġindividual . effective Instructions . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Fitness Ġ/= Ġthis . individual s . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Program Length Ġ/= Ġthis . individual s . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Effective Program Length Ġ/= Ġthis . individual s . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġmean Ġthat Ġwe 've Ġalready Ġcalculated . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstandard De viation Ġ= Ġthis . individual s . map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram < T Program , ĠT Output >:: fitness ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). standard De viation ( mean Fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Statistics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" generation " Ġto Ġgeneration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" best Fitness " Ġto Ġbest Fitness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Fitness " Ġto Ġmean Fitness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" standard De viation Fitness " Ġto Ġstandard De viation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Program Length " Ġto Ġmean Program Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Effective Program Length " Ġto Ġmean Effective Program Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest ( dataset : ĠDataset < T Program >): ĠTest Result < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . find Effective Program () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutputs Ġ= Ġdataset . inputs . map Ġ{ Ġfeatures Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġregisters . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . registers . reset () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoad Ġthe Ġfeatures ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . registers . write Instance ( features ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe Ġprogram ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . execute () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... Ġand Ġgather Ġa Ġresult Ġfrom Ġthe Ġprograms Ġspecified Ġoutput Ġregisters . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Program . output () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTest Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpredicted Ġ= Ġoutputs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġdataset . outputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" Algorithm Ġ 2 . 1 Ġ( L GP ĠAlgorithm )") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy (): ĠMaster Slave < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMaster Slave ( this . environment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeep Copy (): ĠE volution Model < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMaster Slave ( this . environment . copy ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmodel Ġfor Ġevolution Ġusing Ġa Ġis land - migration Ġalgorithm . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIn Ġan Ġis land - migration Ġalgorithm , Ġthe Ġpopulation Ġis Ġsplit Ġinto Ġa Ġnumber Ġof Ġis lands , ĊĠĠĠĠ Ġ* Ġand Ġa Ġfixed Ġnumber Ġof Ġsolutions Ġmigrate Ġbetween Ġthe Ġis lands Ġwith Ġsome Ġinterval . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġis Ġdone Ġin Ġan Ġattempt Ġto Ġpromote Ġdivers ity Ġin Ġthe Ġpopulation Ġto Ġprevent Ġearly ĊĠĠĠĠ Ġ* Ġconvergence Ġon Ġlocal Ġoptim a . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġenvironment ĠThe Ġenvironment Ġthat Ġevolution Ġis Ġtaking Ġplace Ġin . ĊĠĠĠĠ Ġ* Ġ@ param Ġoptions ĠDetermines Ġthe Ġconfiguration Ġfor Ġthe Ġalgorithm . ĠSee Ġ[ Is land Migration Options ] Ġfor Ġmore . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠIsland Migration < T Program , ĠT Output Ġ: ĠOutput < T Program >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment : ĠEnvironment < T Program , ĠT Output >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġoptions : ĠIsland Migration Options ĊĠĠĠ Ġ) Ġ: ĠE volution Model < T Program , ĠT Output >( environment ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfitness Evaluator : ĠF itness Evaluator < T Program , ĠT Output > Ġ= ĠF itness Evaluator () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġis lands : ĠIsland Grid < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠControls Ġthe Ġconfiguration Ġof Ġevolution Ġwhen Ġusing Ġan Ġ[ Is land Migration ] Ġmodel . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ property Ġnum Is lands ĠDetermines Ġthe Ġnumber Ġof Ġis lands Ġthe Ġpopulation Ġshould Ġbe Ġsplit Ġinto . ĠAt Ġleast Ġ 4 Ġis lands Ġshould Ġbe Ġgiven . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ property Ġmigration Interval ĠSets Ġthe Ġinterval Ġthat Ġsolutions Ġare Ġmigrated Ġwith Ġ( i . e . Ġhow Ġmany Ġgener ations ). ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ property Ġmigration Size ĠControls Ġhow Ġmany Ġsolutions Ġmigrate Ġbetween Ġis lands Ġat Ġeach Ġinterval . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġclass ĠIsland Migration Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Is lands : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmigration Interval : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmigration Size : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor ( num Is lands : ĠInt , Ġmigration Interval : ĠInt , Ġmigration Size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Is lands Ġ< Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" At Ġleast Ġ 4 Ġis lands Ġmust Ġbe Ġgiven .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . num Is lands Ġ= Ġnum Is lands ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . migration Interval Ġ= Ġmigration Interval ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . migration Size Ġ= Ġmigration Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġcollection Ġof Ġ[ Is land ] Ġinstances Ġarrange d Ġin Ġa Ġgrid . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġencaps ulation Ġfacilit ates Ġaccess Ġto Ġthe Ġindividual Ġis lands Ġwhen Ġarrange d Ġin Ġa Ġgrid ĊĠĠĠĠĠĠĠĠ Ġ* Ġwithout Ġhaving Ġto Ġworry Ġabout Ġthe Ġgrid Ġarrange ment . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ suppress ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġclass ĠIsland Grid < T Program , ĠT Output Ġ: ĠOutput < T Program >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis lands : ĠArray < Array < Is land < T Program , ĠT Output >> ?> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Is lands : ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor ( num Is lands : ĠInt , Ġenvironment : ĠEnvironment < T Program , ĠT Output >, Ġdataset : ĠDataset < T Program >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . num Is lands Ġ= Ġnum Is lands ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCompute Ġgrid Ġdimensions Ġand Ġconstruct Ġthe Ġgrid Ġof Ġis lands . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEach Ġis land Ġhas Ġa Ġreference Ġto Ġthe Ġenvironment Ġand Ġdata Ġset . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrows Ġ= ĠMath . floor ( Math . sqrt ( this . num Is lands . toDouble ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( this . num Is lands Ġ% Ġrows ). toInt () Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Ġ-= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġ( this . num Is lands Ġ/ Ġrows ). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . isl ands Ġ= ĠarrayOf Null s ( rows . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ 0 Ġuntil Ġrows . toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . isl ands [ row ] Ġ= ĠArray ( columns ) Ġ{ ĠIsland ( environment , Ġdataset ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAllows Ġa Ġrow Ġof Ġis lands Ġto Ġbe Ġretrieved Ġusing Ġthe Ġ` grid [ i ]` Ġsyntax . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġfun Ġget ( i : ĠInt ): ĠArray < Is land < T Program , ĠT Output >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . isl ands [ i ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAllows Ġa Ġparticular Ġis land Ġto Ġbe Ġretrieved Ġusing Ġthe Ġ` grid [ i ][ j ]` Ġsyntax . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Ġfun Ġget ( i : ĠInt , Ġj : ĠInt ): ĠIsland < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠNumber Ġof Ġrows Ġin Ġthe Ġgrid . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġrows () Ġ= Ġthis . isl ands . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠNumber Ġof Ġcolumns Ġin Ġthe Ġgrid . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcolumns () Ġ= Ġthis [ 0 ]. size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAn Ġindividual Ġis land . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠEach Ġis land Ġhas Ġits Ġown Ġpopulation Ġand Ġis Ġessentially Ġjust Ġan Ġimplementation Ġof Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ St eady State ] Ġalgorithm . ĠThe Ġmain Ġdifference Ġis Ġthat Ġan Ġis land Ġcan Ġbe Ġe volved Ġfor Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġset Ġnumber Ġof Ġgener ations Ġat Ġa Ġtime , Ġeach Ġtime Ġstarting Ġfrom Ġthe Ġstate Ġthat Ġthe Ġprevious ĊĠĠĠĠĠĠĠĠ Ġ* Ġcall Ġleft Ġit Ġin . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ suppress ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġclass ĠIsland < T Program , ĠT Output Ġ: ĠOutput < T Program >> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenvironment : ĠEnvironment < T Program , ĠT Output > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdataset : ĠDataset < T Program > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor ( environment : ĠEnvironment < T Program , ĠT Output >, Ġdataset : ĠDataset < T Program >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . environment Ġ= Ġenvironment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dataset Ġ= Ġdataset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . select Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Selection Operator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . combine Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Re combin ation Operator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . micro Mutate Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Micro Mutation Operator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . macro Mutate Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Macro Mutation Operator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Evaluator Ġ= ĠF itness Evaluator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . random Ġ= Ġthis . environment . random State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . initial ise () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġindividuals : ĠMutable List < Program < T Program , ĠT Output >> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġselect : ĠSelection Operator < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcombine : ĠRe combin ation Operator < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmicro Mutate : ĠMutation Operator < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmacro Mutate : ĠMutation Operator < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfitness Evaluator : ĠF itness Evaluator < T Program , ĠT Output > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbest Individual : ĠProgram < T Program , ĠT Output >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom : ĠRandom ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinitialise () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogram Generator : ĠProgram Generator < T Program , ĠT Output > Ġ= Ġthis . environment . registered Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Program Generator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s Ġ= Ġprogram Generator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( this . environment . configuration . population Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠE vol ves Ġthe Ġpopulation Ġfor Ġ[ num Gener ations ] Ġgener ations . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġev olve ( num Gener ations : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠR ough ly Ġfollows ĠAlgorithm Ġ 2 . 1 Ġin ĠLinear ĠGen etic ĠProgramming Ġ( B rame ier . ĠM , ĠB an zh af ĠW .) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠInitial ise Ġa Ġpopulation Ġof Ġrandom Ġprograms ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// this . initial ise () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġthe Ġinitial Ġfitness Ġof Ġthe Ġindividuals Ġin Ġthe Ġpopulation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Evalu ations Ġ= Ġthis . individual s . map Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Evaluator . evaluate ( individual , Ġdataset , Ġthis . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbest Ġ= Ġinitial Evalu ations . sorted By ( Evaluation < T Program , ĠT Output >:: fitness ). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Individual Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġnum Gener ations ). forEach Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġthis . select . select ( this . individual s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . pair wise (). map Ġ{ Ġ( mother , Ġfather ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCombine Ġmother Ġand Ġfather Ġwith Ġsome Ġprob . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( random . next Double () Ġ< Ġthis . environment . configuration . cross over Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . combine . combine ( mother , Ġfather ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMut ate Ġmother Ġor Ġfather Ġ( or Ġboth ) Ġwith Ġsome Ġprob . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( random . next Double () Ġ< Ġthis . environment . configuration . micro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . micro Mutate . mutate ( mother ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( random . next Double () Ġ< Ġthis . environment . configuration . macro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . macro Mutate . mutate ( mother ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( random . next Double () Ġ< Ġthis . environment . configuration . micro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . micro Mutate . mutate ( father ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( random . next Double () Ġ< Ġthis . environment . configuration . macro Mutation Rate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . macro Mutate . mutate ( father ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠDo Ġvalidation Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevalu ations Ġ= Ġchildren . map Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Evaluator . evaluate ( individual , Ġdataset , Ġthis . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sorted By ( Evaluation < T Program , ĠT Output >:: fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Child Ġ= Ġevalu ations . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Ġ= Ġif Ġ( best Child . fitness Ġ< Ġbest . fitness ) Ġbest Child Ġelse Ġbest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Individual Ġ= Ġbest . individual ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġchildren Ġare Ġcopies Ġof Ġindividuals Ġin Ġthe Ġpopulation , Ġso Ġadd Ġthe Ġcopies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġthe Ġpopulation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . individual s . addAll ( children ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . best Individual Ġ= Ġbest . individual ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġinformation : ĠModule Information ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġinitializer Ġof Ġcreated Ġproperties Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtrain ( dataset : ĠDataset < T Program >): ĠE volution Result < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= Ġthis . environment . random State ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġgrid Ġof Ġis lands . ĠThe Ġgrids Ġare Ġpopulated Ġso Ġthat Ġeach Ġis land Ġhas Ġa Ġset Ġof ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġne ighbours Ġwith Ġwhich Ġindividuals Ġcan Ġmigrate Ġto . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . isl ands Ġ= ĠIsland Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Is lands Ġ= Ġthis @ Is land Migration . options . num Is lands , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Ġ= Ġthis . environment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdataset Ġ= Ġdataset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbest Individual s Ġ= Ġmutable ListOf < Program < T Program , ĠT Output >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . rows ()). map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . columns ()). map Ġ{ Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis land Ġ= Ġthis @ Is land Migration . isl ands [ row ][ col ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Is land Individual s Ġ= Ġis land . individual s . sorted By Ġ{ Ġit . fitness Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Ġ= Ġsorted Is land Individual s . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Individual s . add ( best ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbest Ġ= Ġbest Individual s . sorted By ( Program < T Program , ĠT Output >:: fitness ). first () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindividuals Ġ= Ġmutable ListOf < Program < T Program , ĠT Output >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . rows ()). map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . columns ()). map Ġ{ Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis land Ġ= Ġthis @ Is land Migration . isl ands [ row ][ col ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindividuals . addAll ( is land . individual s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 've Ġnow Ġgot Ġa Ġgrid Ġof Ġis lands Ġready Ġto Ġstart Ġe vol ving . ĠFor Ġeach Ġis land Ġwe Ġwill Ġrun Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġevolution Ġprocess Ġfor Ġa Ġset Ġnumber Ġof Ġgener ations Ġbefore Ġstopping Ġto Ġdo Ġmigration . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgeneration Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatistics Ġ= Ġmutable ListOf < E volution Statistics >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( generation Ġ< Ġthis @ Is land Migration . environment . configuration . gener ations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStop Ġearly Ġwhenever Ġwe Ġcan . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( best . fitness Ġ<= Ġthis . environment . configuration . stopping Criterion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġto Ġadd Ġat Ġleast Ġone Ġset Ġof Ġstatistics . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatistics . add ( this . statistics ( generation , Ġthis . fitness Evaluator . evaluate ( best , Ġdataset , Ġthis . environment ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Result ( best , Ġindividuals , Ġstatistics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . rows ()). map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . columns ()). map Ġ{ Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis land Ġ= Ġthis @ Is land Migration . isl ands [ row ][ col ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis land . ev olve ( this @ Is land Migration . options . migration Interval ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ thread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġjobs Ġ-> Ġjobs . forEach Ġ{ Ġit . join () Ġ} Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 've Ġjust Ġrun Ġa Ġset Ġnumber Ġof Ġgener ations Ġso Ġwe Ġneed Ġto Ġmigrate Ġa Ġset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġamount Ġof Ġindividuals Ġbetween Ġthe Ġis lands Ġand Ġupdate Ġthe Ġgeneration Ġcount . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . options . migration Size ). forEach Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChoose Ġa Ġrandom Ġis land ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġrandom . rand Int ( 0 , Ġthis @ Is land Migration . isl ands . rows () Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġrandom . rand Int ( 0 , Ġthis @ Is land Migration . isl ands . columns () Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis land Ġ= Ġthis @ Is land Migration . isl ands [ i ][ j ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChoose Ġa Ġrandom Ġneighbour Ġof Ġthis Ġis land ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġne ighbours Ġ= ĠlistOf ( i Ġ- Ġ 1 , Ġi , Ġi Ġ+ Ġ 1 ). map Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( j Ġ- Ġ 1 , Ġj , Ġj Ġ+ Ġ 1 ). map Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatten (). filter Ġ{ Ġ( x , Ġy ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġin Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . rows ()) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġin Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . columns ()) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( x Ġ!= Ġi Ġ|| Ġy Ġ!= Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneighbour Coords Ġ= Ġrandom . choice ( ne ighbours ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneighbour Ġ= Ġthis @ Is land Migration . isl ands [ ne ighbour Coords . first ][ ne ighbour Coords . second ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġmigration : Ġin Ġour Ġcase Ġwe Ġsimply Ġreplace Ġthe Ġworst Ġ( least Ġfit ) Ġindividual Ġin Ġthe Ġpopulation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith Ġthe Ġbest Ġindividual Ġfrom Ġanother Ġpopulation . ĠWe Ġalso Ġsort Ġthe Ġindividuals Ġin Ġan Ġis land ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsuch Ġthat Ġthe Ġleast Ġfit Ġindividual Ġis Ġlast . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Ne ighbour Individual s Ġ= Ġneighbour . individual s . sorted By ( Program < T Program , ĠT Output >:: fitness ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Is land Individual s Ġ= Ġis land . individual s . sorted By ( Program < T Program , ĠT Output >:: fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Remove Ġ= Ġsorted Ne ighbour Individual s . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Copy Ġ= Ġsorted Is land Individual s . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDouble Ġcheck Ġthat Ġthe Ġindividual Ġto Ġbe Ġremoved Ġis Ġworse Ġ( or Ġat Ġleast Ġno Ġbetter ) Ġthan Ġthe Ġmigr ant . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( to Remove . fitness Ġ>= Ġto Copy . fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneighbour . individual s . remove ( to Remove ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneighbour . individual s . add ( to Copy . copy ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneration Ġ+= Ġthis @ Is land Migration . options . migration Interval ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindividuals Ġ= Ġmutable ListOf < Program < T Program , ĠT Output >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . rows ()). map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . columns ()). map Ġ{ Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis land Ġ= Ġthis @ Is land Migration . isl ands [ row ][ col ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindividuals . addAll ( is land . individual s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Individual s Ġ= Ġmutable ListOf < Program < T Program , ĠT Output >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . rows ()). map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . columns ()). map Ġ{ Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis land Ġ= Ġthis @ Is land Migration . isl ands [ row ][ col ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Is land Individual s Ġ= Ġis land . individual s . sorted By Ġ{ Ġit . fitness Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Ġ= Ġsorted Is land Individual s . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Individual s . add ( best ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbest Ġ= Ġbest Individual s . sorted By ( Program < T Program , ĠT Output >:: fitness ). first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatistics . add ( this . statistics ( generation , Ġthis . fitness Evaluator . evaluate ( best , Ġdataset , Ġthis . environment ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe 've Ġreached Ġthe Ġmaximum Ġnumber Ġof Ġgener ations , Ġso Ġchoose Ġthe Ġbest Ġindividual Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġall Ġof Ġthe Ġis lands Ġas Ġour Ġoverall Ġbest . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Result ( best , Ġindividuals , Ġstatistics ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġstatistics ( generation : ĠInt , Ġbest : ĠEvaluation < T Program , ĠT Output >): ĠE volution Statistics Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Fitness Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Program Length Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmean Effective Program Length Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbest Fitness Ġ= Ġbest . fitness ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindividuals Ġ= Ġmutable ListOf < Program < T Program , ĠT Output >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . rows ()). map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġthis @ Is land Migration . isl ands . columns ()). map Ġ{ Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis land Ġ= Ġthis @ Is land Migration . isl ands [ row ][ col ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindividuals . addAll ( is land . individual s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindividuals . forEach Ġ{ Ġindividual Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Fitness Ġ+= Ġindividual . fitness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Program Length Ġ+= Ġindividual . instructions . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Effective Program Length Ġ+= Ġindividual . effective Instructions . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Fitness Ġ/= Ġindividuals . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Program Length Ġ/= Ġindividuals . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmean Effective Program Length Ġ/= Ġindividuals . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġthe Ġmean Ġthat Ġwe 've Ġalready Ġcalculated . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstandard De viation Ġ= Ġindividuals . map ( Program < T Program , ĠT Output >:: fitness ). standard De viation ( mean Fitness ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE volution Statistics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" generation " Ġto Ġgeneration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" best Fitness " Ġto Ġbest Fitness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Fitness " Ġto Ġmean Fitness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" standard De viation Fitness " Ġto Ġstandard De viation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Program Length " Ġto Ġmean Program Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mean Effective Program Length " Ġto Ġmean Effective Program Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest ( dataset : ĠDataset < T Program >): ĠTest Result < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError (" Testing Ġthe Ġmodel Ġhas Ġnot Ġbeen Ġimplemented Ġfor ĠIsland Migration ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy (): ĠE volution Model < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIsland Migration ( this . environment , Ġthis . options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeep Copy (): ĠE volution Model < T Program , ĠT Output > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIsland Migration ( this . environment . copy (), Ġthis . options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠExtension Ġmethods Ġfor Ġvarious Ġfunctionality Ġthat Ġis Ġnice Ġto Ġhave . Ċ fun ĠList < Double >. standard De viation ( mean : ĠDouble Ġ= Ġthis . average ()): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġvariance Ġ= Ġthis . map Ġ{ Ġx Ġ-> ĠMath . pow ( x Ġ- Ġmean , Ġ 2 . 0 ) Ġ}. sum () ĊĊĠĠĠ Ġreturn ĠMath . pow (( variance Ġ/ Ġthis . size ), Ġ 0 . 5 ) Ċ } Ċ Ċ fun Ġ< T , ĠR > ĠList < T >. p map ( transform : Ġ( T ) Ġ-> ĠR ): ĠList < R > Ġ{ ĊĠĠĠ Ġreturn Ġthis . parallel Stream (). map ( transform ). toList () Ċ } Ċ Ċ fun Ġ< T > ĠList < T >. pair wise (): ĠList < Pair < T , ĠT >> Ġ{ ĊĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġthis . size Ġstep Ġ 2 ). map Ġ{ Ġidx Ġ-> ĊĠĠĠĠĠĠĠ ĠPair ( this [ idx ], Ġthis [ idx Ġ+ Ġ 1 ]) ĊĠĠĠ Ġ} Ċ } Ċ