package Ġnz . co . j ed sim son . lg p . examples . kotlin Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġnz . co . j ed sim son . lg p . core . environment .* Ċ import Ġnz . co . j ed sim son . lg p . core . environment . config . Configuration Ċ import Ġnz . co . j ed sim son . lg p . core . environment . config . Configuration Loader Ċ import Ġnz . co . j ed sim son . lg p . core . environment . constants . Generic Constant Loader Ċ import Ġnz . co . j ed sim son . lg p . core . environment . dataset .* Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . Event Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . EventDispatcher Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . EventListener Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . Event Registry Ċ import Ġnz . co . j ed sim son . lg p . core . environment . operations . Default Operation Loader Ċ import Ġnz . co . j ed sim son . lg p . core . e volution .* Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . fitness .* Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . model . St eady State Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . operators . mutation . macro . Macro Mutation Operator Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . operators . mutation . micro . Constant Mutation Functions Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . operators . mutation . micro . Micro Mutation Operator Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . operators . re combin ation . linear Cross over . Linear Cross over Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . operators . selection . Binary Tournament Selection Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . operators . selection . Tournament Selection Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . training . Sequential Trainer Ċ import Ġnz . co . j ed sim son . lg p . core . e volution . training . Training Result Ċ import Ġnz . co . j ed sim son . lg p . core . modules . Core Module Type Ċ import Ġnz . co . j ed sim son . lg p . core . modules . Module Container Ċ import Ġnz . co . j ed sim son . lg p . core . modules . Module Information Ċ import Ġnz . co . j ed sim son . lg p . core . program . Outputs Ċ import Ġnz . co . j ed sim son . lg p . core . program . Program Ċ import Ġnz . co . j ed sim son . lg p . core . program . Program Generator Ċ import Ġnz . co . j ed sim son . lg p . core . program . instructions . Ar ity Ċ import Ġnz . co . j ed sim son . lg p . core . program . instructions . Function Ċ import Ġnz . co . j ed sim son . lg p . core . program . instructions . Instruction Ċ import Ġnz . co . j ed sim son . lg p . core . program . instructions . Operation Ċ import Ġnz . co . j ed sim son . lg p . core . program . registers . Register Index Ċ import Ġnz . co . j ed sim son . lg p . core . program . registers . Register Set Ċ import Ġnz . co . j ed sim son . lg p . lib . generators . Random Instruction Generator Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . InputStream Reader Ċ import Ġkotlin . streams . toList Ċ Ċ enum Ġclass ĠAnt Trail Problem Ar ity ( override Ġval Ġnumber : ĠInt ) Ġ: ĠAr ity Ġ{ ĊĠĠĠ ĠNone ( 0 ) Ċ } Ċ Ċ class ĠIf Food A head () Ġ: ĠOperation < Unit >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġar ity : ĠAr ity Ġ= ĠAnt Trail Problem Ar ity . None ĊĠĠĠ Ġoverride Ġval Ġfunction : ĠFunction < Unit > Ġ= Ġ{ Ġ} ĊĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" In structs Ġthe Ġant Ġsimulator Ġto Ġcheck Ġif Ġthere Ġis Ġfood Ġin Ġthe Ġnext Ġposition .") ĊĠĠĠ Ġoverride Ġval Ġrepresentation Ġ= Ġ" If Food A head " ĊĊĠĠĠ Ġoverride Ġfun ĠtoString ( operands : ĠList < Register Index >, Ġdestination : ĠRegister Index ) Ġ= Ġthis . representation Ċ } Ċ Ċ class ĠMove Forward Ġ: ĠOperation < Unit >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġar ity : ĠAr ity Ġ= ĠAnt Trail Problem Ar ity . None ĊĠĠĠ Ġoverride Ġval Ġfunction : ĠFunction < Unit > Ġ= Ġ{ Ġ} ĊĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" In structs Ġthe Ġant Ġsimulator Ġto Ġmove Ġforward Ġinto Ġthe Ġnext Ġposition .") ĊĠĠĠ Ġoverride Ġval Ġrepresentation Ġ= Ġ" Move Forward " ĊĊĠĠĠ Ġoverride Ġfun ĠtoString ( operands : ĠList < Register Index >, Ġdestination : ĠRegister Index ) Ġ= Ġthis . representation Ċ } Ċ Ċ class ĠTurn Left Ġ: ĠOperation < Unit >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġar ity : ĠAr ity Ġ= ĠAnt Trail Problem Ar ity . None ĊĠĠĠ Ġoverride Ġval Ġfunction : ĠFunction < Unit > Ġ= Ġ{ Ġ} ĊĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" In structs Ġthe Ġant Ġsimulator Ġto Ġturn Ġleft .") ĊĠĠĠ Ġoverride Ġval Ġrepresentation Ġ= Ġ" Turn Left " ĊĊĠĠĠ Ġoverride Ġfun ĠtoString ( operands : ĠList < Register Index >, Ġdestination : ĠRegister Index ) Ġ= Ġthis . representation Ċ } Ċ Ċ class ĠTurn Right Ġ: ĠOperation < Unit >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġar ity : ĠAr ity Ġ= ĠAnt Trail Problem Ar ity . None ĊĠĠĠ Ġoverride Ġval Ġfunction : ĠFunction < Unit > Ġ= Ġ{ Ġ} ĊĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" In structs Ġthe Ġant Ġsimulator Ġto Ġturn Ġright .") ĊĠĠĠ Ġoverride Ġval Ġrepresentation Ġ= Ġ" Turn Right " ĊĊĠĠĠ Ġoverride Ġfun ĠtoString ( operands : ĠList < Register Index >, Ġdestination : ĠRegister Index ) Ġ= Ġthis . representation Ċ } Ċ Ċ /** Ċ Ġ* ĠResp ons ible Ġfor Ġmanip ulating Ġan Ġ[ Ant ] Ġby Ġexecuting Ġa Ġsequence Ġof Ġinstructions . Ċ Ġ*/ Ċ class ĠAnt Trail Program ( ĊĠĠĠ Ġoverride Ġvar Ġinstructions : ĠMutable List < Instruction < Unit >>, ĊĠĠĠ Ġoverride Ġvar Ġregisters : ĠRegister Set < Unit >, ĊĠĠĠ Ġval Ġant : ĠAnt Ċ ) Ġ: ĠProgram < Unit , ĠOutputs . Single < Unit >>() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" Sim ulates Ġthe Ġmovement Ġof Ġan Ġant Ġby Ġexecuting Ġa Ġset Ġof Ġinstructions .") ĊĠĠĠ Ġoverride Ġval Ġoutput Register Indices Ġ= ĠlistOf < Register Index >() ĊĊĠĠĠ Ġoverride Ġfun Ġcopy (): ĠProgram < Unit , ĠOutputs . Single < Unit >> Ġ= ĠAnt Trail Program ( ĊĠĠĠĠĠĠĠ Ġinstructions Ġ= Ġthis . instructions . map ( Instruction < Unit >:: copy ). to Mutable List (), ĊĠĠĠĠĠĠĠ Ġregisters Ġ= Ġthis . registers . copy (), ĊĠĠĠĠĠĠĠ Ġant Ġ= Ġthis . ant . copy () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlinear Branch ing = false ĊĠĠĠĠĠĠĠ Ġvar Ġskip Next Instruction Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġlast Moves Made Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ// run Ġuntil Ġmax Ġmoves Ġor Ġideal Ġfitness ĊĠĠĠĠĠĠĠ Ġwhile Ġ( this . ant . grid . food Remaining () Ġ!= Ġ 0 Ġ&& Ġthis . ant . state . moves Made Ġ< Ġthis . ant . maximum Moves Ġ&& Ġthis . ant . state . moves Made Ġ> Ġlast Moves Made ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Moves Made = this . ant . state . moves Made ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinstruction Iterator = 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinstructions To Skip = Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( instruction Ġin Ġthis . instructions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( linear Branch ing ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( skip Next Instruction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip Next Instruction Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instruction Iterator Ġin Ġinstructions To Skip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġbranch Ġwas Ġnot Ġtaken Ġso Ġskip Ġthe Ġcurrent Ġinstruction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstruction Iterator ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġinstruction . operation ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDetermine Ġhow Ġto Ġmanipulate Ġthe Ġant . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( operation . java Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIf Food A head :: class . java Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlook Ġahead Ġwhich Ġnodes Ġin Ġthe Ġbranch Ġneed Ġto Ġbe Ġskipped ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( linear Branch ing ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . ant . is Food A head ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip Next Instruction = true ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtree = build Tree Structure ( instructions , instruction Iterator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . ant . is Food A head ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Skip = list All Children ( tree . children [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstructions To Skip . addAll ( to Skip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Skip = list All Children ( tree . children [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstructions To Skip . addAll ( to Skip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMove Forward :: class . java Ġ-> Ġthis . ant . move Forward () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTurn Left :: class . java Ġ-> Ġthis . ant . turn Left () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTurn Right :: class . java Ġ-> Ġthis . ant . turn Right () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstruction Iterator ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTreeNode < T >( value : T ){ ĊĠĠĠĠĠĠĠ Ġvar Ġvalue : T Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġvar Ġparent : TreeNode < T >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġchildren : Mutable List < TreeNode < T >> Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Child ( node : TreeNode < T > ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs Ġ= Ġ"${ value }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! children . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs Ġ+= Ġ" Ġ{" Ġ+ Ġchildren . map Ġ{ Ġit . toString () Ġ} Ġ+ Ġ" Ġ}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġbuild Tree Structure ( instructions : List < Instruction < Unit >>, instruction Iterator : Int ): ĠTreeNode < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġroot Node = TreeNode < Int >( instruction Iterator ) ĊĠĠĠĠĠĠĠ Ġeval Node ( instructions , root Node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġroot Node ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġeval Node ( instructions : List < Instruction < Unit >>, node : TreeNode < Int >): ĠTreeNode < Int >{ ĊĠĠĠĠĠĠĠ Ġ// val Ġchildren Ġ= Ġmutable ListOf < IntArray >() ĊĠĠĠĠĠĠĠ Ġif ( node . value Ġ< Ġinstructions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġinstructions [ node . value ]. operation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation . java Class Ġ== ĠIf Food A head :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchild Node 1 Ġ= ĠTreeNode < Int >( node . value Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Node 1 Ġ= Ġeval Node ( instructions , Ġchild Node 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . addChild ( child Node 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// next Ġnode Ġis Ġlast Ġterminal Ġnode Ġof Ġfirst Ġbranch Ġ+ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchild Node 2 Ġ= ĠTreeNode < Int >( last Child ( child Node 1 ). value Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Node 2 Ġ= Ġeval Node ( instructions , Ġchild Node 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . addChild ( child Node 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlast Child ( node : TreeNode < Int >): TreeNode < Int >{ ĊĠĠĠĠĠĠĠ Ġif ( node . children . size > 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlast Child ( node . children . last ()) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist All Children ( node : TreeNode < Int >): List < Int >{ ĊĠĠĠĠĠĠĠ Ġvar Ġchildren Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġchildren . add ( node . value ) ĊĊĠĠĠĠĠĠĠ Ġif ( node . children . size > 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġnode . children ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . addAll ( list All Children ( child )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġchildren ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Effective Program () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġoutput (): ĠOutputs . Single < Unit > Ġ= ĠOutputs . Single ( Unit ) Ċ } Ċ Ċ class ĠGrid Provider Ġprivate Ġconstructor ( private Ġval Ġgrid Data : ĠArray < Array < Grid . Cell >>) Ġ{ ĊĠĠĠ Ġfun Ġnew Grid (): ĠGrid Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGrid ( this . grid Data . clone ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( grid Data : ĠArray < Array < Grid . Cell >> ): ĠGrid Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGrid Provider ( grid Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( inputStream : ĠInputStream ): ĠGrid Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered Reader Ġ= ĠBufferedReader ( InputStream Reader ( inputStream )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġbuffered Reader . readLine () // header Ġcontaining Ġgrid Ġdimensions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġheader . split (" Ġ" )[ 0 ]. toString (). trim (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġheader . split (" Ġ" )[ 1 ]. toString (). trim (). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Data Read Ġ= Ġbuffered Reader . lines (). map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcells = line . map Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' Ġ-> ĠGrid . Cell . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' Ġ' Ġ-> ĠGrid . Cell . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'#' Ġ-> ĠGrid . Cell . Food ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Unexpected Ġgrid Ġdata Ġcharacter : Ġ$ c ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( x Ġin Ġcells . size Ġuntil Ġcolumns ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells . add ( Grid . Cell . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Data Ġ= Ġgrid Data Read . to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( y Ġin Ġgrid Data . size Ġuntil Ġrows ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcells = Ġmutable ListOf < Grid . Cell >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( x Ġin Ġ 0 Ġuntil Ġcolumns ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells . add ( Grid . Cell . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Data . add ( cells . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGrid Provider ( grid Data . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAnt Trail Program Generator ( ĊĠĠĠ Ġenvironment : ĠEnvironment Facade < Unit , ĠOutputs . Single < Unit >, ĠTarget s . Single < Unit >>, ĊĠĠĠ Ġprivate Ġval Ġmaximum Moves : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġgrid Provider : ĠGrid Provider Ċ ) Ġ: ĠProgram Generator < Unit , ĠOutputs . Single < Unit >, ĠTarget s . Single < Unit >>( ĊĠĠĠ Ġenvironment , ĊĠĠĠ Ġinstruction Generator Ġ= Ġenvironment . module Factory . instance ( Core Module Type . Instruction Generator ) Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrandom Ġ= Ġthis . environment . random State ĊĊĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" Respons ible Ġfor Ġgenerating Ġant Ġsimulator Ġprograms .") ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Program (): ĠProgram < Unit , ĠOutputs . Single < Unit >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġthis . random . rand Int ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . environment . configuration . initial Minimum Program Length , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . environment . configuration . initial Maximum Program Length ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinstructions Ġ= Ġmutable ListOf < Instruction < Unit >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġbranch Initial isation Rate Ġ= Ġthis . environment . configuration . branch Initial isation Rate ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstruction Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom . next Double () Ġ< Ġbranch Initial isation Rate Ġ-> Ġthis . instruction Generator . next (). first Ġ{ Ġinstruction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstruction . operation Ġis ĠIf Food A head ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis . instruction Generator . generate Instruction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstructions . add ( instruction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠAnt Trail Program ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstructions Ġ= Ġinstructions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregisters Ġ= Ġthis . environment . register Set . copy (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġant Ġ= ĠAnt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Ġ= Ġthis . grid Provider . new Grid (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Moves Ġ= Ġthis . maximum Moves ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAnt Trail Fitness Evaluation Event ( val Ġkey : ĠString , Ġval Ġdetails : ĠMap < String , ĠAny >) Ġ: ĠEvent () Ċ Ċ class ĠAnt Trail Fitness Context ( ĊĠ Ġenvironment : ĠEnvironment Facade < Unit , ĠOutputs . Single < Unit >, ĠTarget s . Single < Unit >> Ċ ) Ġ: ĠF itness Context < Unit , ĠOutputs . Single < Unit >, ĠTarget s . Single < Unit >>( environment ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" Evalu ates Ġthe Ġfitness Ġof Ġan Ġant Ġsimulation Ġbased Ġon Ġhow Ġit Ġhas Ġmoved Ġthrough Ġthe Ġgrid .") ĊĊĠĠĠ Ġoverride Ġfun Ġfitness ( ĊĠĠĠĠĠĠĠ Ġprogram : ĠProgram < Unit , ĠOutputs . Single < Unit >>, ĊĠĠĠĠĠĠĠ Ġfitness Cases : ĠList < Fitness Case < Unit , ĠTarget s . Single < Unit >>> ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġant Ġ= Ġ( program Ġas ĠAnt Trail Program ). ant ĊĊĠĠĠĠĠĠĠ Ġant . reset () ĊĊĠĠĠĠĠĠĠ Ġ/* EventDispatcher . dispatch ( Ant Trail Fitness Evaluation Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" ant - fitness - evaluation - start ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" position " Ġto Ġant . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ant " Ġto Ġant . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) */ ĊĊĠĠĠĠĠĠĠ Ġprogram . execute () ĊĊĠĠĠĠĠĠĠ Ġ/* EventDispatcher . dispatch ( Ant Trail Fitness Evaluation Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġ" ant - fitness - evaluation - end ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" position " Ġto Ġant . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ant " Ġto Ġant . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) */ ĊĊĠĠĠĠĠĠĠ Ġ// ĠAnt Ġperformance Ġis Ġmeasured Ġin Ġterms Ġof Ġhow Ġmuch Ġfood Ġis Ġremaining ĊĠĠĠĠĠĠĠ Ġprogram . fitness Ġ= Ġant . grid . food Remaining (). toDouble () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprogram . fitness ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠAnt Trail Fitness Function Ġ: ĠSingle Output Fitness Function < Unit >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġfitness ( ĊĠĠĠĠĠĠĠ Ġoutputs : ĠList < Outputs . Single < Unit >>, ĊĠĠĠĠĠĠĠ Ġcases : ĠList < Fitness Case < Unit , ĠTarget s . Single < Unit >>> ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAnt Trail Solution ( val Ġtraining Result : ĠTraining Result < Unit , ĠOutputs . Single < Unit >, ĠTarget s . Single < Unit >>) Ġ: ĠSolution < Unit > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġproblem Ġ= Ġ" Ant Ġtrail " Ċ } Ċ Ċ class ĠAnt Trail Problem ( ĊĠĠĠ Ġval Ġmaximum Moves : ĠInt , ĊĠĠĠ Ġval Ġgrid Provider : ĠGrid Provider Ċ ) Ġ: ĠProblem < Unit , ĠOutputs . Single < Unit >, ĠTarget s . Single < Unit >>() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" Ant Ġtrail ." ĊĊĠĠĠ Ġoverride Ġval Ġdescription Ġ= ĠDescription (" Ant Ġtrail Ġproblem ") ĊĊĠĠĠ Ġoverride Ġval Ġconfig Loader Ġ= Ġobject Ġ: ĠConfiguration Loader Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information (" Overrides Ġdefault Ġconfiguration Ġfor Ġthis Ġproblem .") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload (): ĠConfiguration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠConfiguration () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . initial Minimum Program Length Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . initial Maximum Program Length Ġ= Ġ 4 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . minimum Program Length Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . maximum Program Length Ġ= Ġ 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . operations Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" nz . co . j ed sim son . lg p . examples . kotlin . If Food A head ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" nz . co . j ed sim son . lg p . examples . kotlin . Move Forward ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" nz . co . j ed sim son . lg p . examples . kotlin . Turn Left ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" nz . co . j ed sim son . lg p . examples . kotlin . Turn Right " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġinput Ġor Ġcalculation Ġregisters Ġaren 't Ġactually Ġused Ġbut Ġwe Ġneed Ġat Ġleast Ġ 1 Ġof Ġeach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġensure Ġinstructions Ġcan Ġbe Ġgenerated Ġusing Ġthe Ġbuilt - in Ġinstruction Ġgenerator . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . num Features Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . num Calculation Registers Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . constants Rate Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . constants Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . population Size Ġ= Ġ 6 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . gener ations Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . micro Mutation Rate Ġ= Ġ 0 . 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . macro Mutation Rate Ġ= Ġ 0 . 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconfig ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconfig Ġ= Ġthis . config Loader . load () ĊĊĠĠĠ Ġoverride Ġval Ġconstant Loader Ġ= ĠGeneric Constant Loader ( ĊĠĠĠĠĠĠĠ Ġconstants Ġ= Ġconfig . constants , ĊĠĠĠĠĠĠĠ Ġparse Function Ġ= Ġ{ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġdataset Loader Ġ= Ġobject Ġ: ĠDataset Loader < Unit , ĠTarget s . Single < Unit >> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġinformation Ġ= ĠModule Information ("") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload (): ĠDataset < Unit , ĠTarget s . Single < Unit >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDataset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġoperation Loader Ġ= ĠDefault Operation Loader < Unit >( ĊĠĠĠĠĠĠĠ Ġoperation Names Ġ= Ġconfig . operations ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġval ĠdefaultValue Provider Ġ= ĠDefault Value Providers . constant Value Provider ( Unit ) ĊĊĠĠĠ Ġoverride Ġval Ġfitness Function Provider Ġ= Ġ{ ĠAnt Trail Fitness Function () Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġregistered Modules Ġ= ĠModule Container < Unit , ĠOutputs . Single < Unit >, ĠTarget s . Single < Unit >>( ĊĠĠĠĠĠĠĠ Ġmodules Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Instruction Generator Ġto Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Instruction Generator ( environment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Program Generator Ġto Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnt Trail Program Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Moves , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Selection Operator Ġto Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Binary Tournament Selection ( environment , Ġtournament Size Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo urnament Selection ( environment , Ġtournament Size Ġ= Ġ 8 , ĠnumberOf Off spring Ġ= Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Re combin ation Operator Ġto Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Cross over ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Segment Length Ġ= Ġ 1 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Cross over Distance Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Segment Length Difference Ġ= Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Macro Mutation Operator Ġto Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMacro Mutation Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsertion Rate Ġ= Ġ 0 . 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeletion Rate Ġ= Ġ 0 . 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Micro Mutation Operator Ġto Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro Mutation Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Mutation Rate Ġ= Ġ 0 . 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Mutation Rate Ġ= Ġ 0 . 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstant Mutation Func Ġ= ĠConstant Mutation Functions . identity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Module Type . Fitness Context Ġto Ġ{ Ġenvironment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnt Trail Fitness Context ( environment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġinitialise Environment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspecification Ġ= ĠEnvironment Specification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . config Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . constant Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . operation Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . defaultValue Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fitness Function Provider ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġthis . environment Ġ= ĠEnvironment ( specification ) ĊĊĠĠĠĠĠĠĠ Ġthis . environment . register Modules ( this . registered Modules ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitialise Model () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . model Ġ= ĠSte ady State ( this . environment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsolve (): ĠAnt Trail Solution Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrunner Ġ= ĠSequential Trainer ( environment , Ġmodel , Ġruns Ġ= Ġ 1 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġrunner . train Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Ant Trail Problem . dataset Loader . load () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob . subscribe To Updates Ġ{ Ġprintln (" training Ġprogress Ġ= Ġ${ it . progress }% ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjob . result () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnt Trail Solution ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠUn initialized Property AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġinitial isation Ġroutines Ġhaven 't Ġbeen Ġrun . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠProblem Not Initial ised Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġinitial isation Ġroutines Ġfor Ġthis Ġproblem Ġmust Ġbe Ġrun Ġbefore Ġit Ġcan Ġbe Ġsolved ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAnt Trail Ġ{ ĊĠĠĠ Ġcompanion Ġobject ĠMain Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Provider Ġ= ĠGrid Provider . from ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: class . java . class Loader . getResource AsStream (" datasets / s ant afe . trl ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproblem Ġ= ĠAnt Trail Problem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Moves Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Provider Ġ= Ġgrid Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproblem . initial ise Environment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproblem . initial ise Model () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( object Ġ: ĠEvent Listener < Ant Trail Fitness Evaluation Event > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle ( event : ĠAnt Trail Fitness Evaluation Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( event . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( event . details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsolution Ġ= Ġproblem . solve () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsolution . training Result . evalu ations . forEach Indexed Ġ{ Ġevaluation , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Best Ġprogram Ġ( evaluation Ġ${ evaluation Ġ+ Ġ 1 }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" fitness Ġ= Ġ${ result . best . fitness . toInt () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" instructions Ġ= Ġ${ result . best . instructions }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }