package Ġneural Ċ Ċ import Ġrandom Ċ Ċ class ĠNe uron Ġ{ ĊĠĠĠ Ġvar Ġweights : ĠDouble Array ĊĠĠĠ Ġprivate Ġvar Ġbias : ĠDouble ĊĊĠĠĠ Ġconstructor ( num Weights : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . weights Ġ= ĠDouble Array ( num Weights ) Ġ{ Ġrandom (- 1 . 0 , Ġ 1 . 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġthis . bias Ġ= Ġrandom (- 1 . 0 , Ġ 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconstructor ( weights : ĠDouble Array , Ġbias : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . weights Ġ= Ġweights ĊĠĠĠĠĠĠĠ Ġthis . bias Ġ= Ġbias ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy (): ĠNe uron Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNe uron ( weights . copyOf (), Ġbias ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke ( inputs : ĠDouble Array , Ġlast Layer : ĠBoolean ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġ( 0 Ġuntil Ġinputs . size ). sum By Double Ġ{ Ġweights [ it ] Ġ* Ġinputs [ it ] Ġ} Ġ+ Ġbias ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( last Layer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMath . tanh ( sum ) Ġ// Ġt anh ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// return ĠMath . max ( sum , Ġ 0 . 0 ) Ġ// ĠRel u ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// return Ġ 1 . 0 Ġ/ Ġ( 1 . 0 Ġ+ ĠMath . exp (- sum )) Ġ// ĠSig moid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmutate ( mutate Power : ĠDouble , Ġmutate Freq : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġweights . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( random () Ġ< Ġmutate Freq ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweights [ i ] Ġ+= Ġrandom (- mutate Power , Ġmutate Power ) ĊĠĠĠĠĠĠĠ Ġif Ġ( random () Ġ< Ġmutate Freq ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbias Ġ+= Ġrandom (- mutate Power , Ġmutate Power ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcross over ( mate : ĠNet , Ġlayer Idx : ĠInt , Ġne uron Idx : ĠInt , Ġcross over Rate : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm ate Neuron : ĠNe uron Ġ= Ġm ate . layers [ layer Idx ]. ne urons [ ne uron Idx ] ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġweights . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweights [ i ] Ġ= ĠNet . lerp ( weights [ i ], Ġm ate Neuron . weights [ i ], Ġrandom ( 0 . 0 , Ġcross over Rate )) ĊĠĠĠĠĠĠĠ Ġbias Ġ= ĠNet . lerp ( bias , Ġm ate Neuron . bias , Ġrandom ( 0 . 0 , Ġcross over Rate )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġsb . append ("[ ") ĊĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġw ) Ġin Ġweights . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( w . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġweights . size Ġ- Ġ 1 ) Ġsb . append (", Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsb . append (" ]") ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} Ċ }