package Ġmodels Ċ Ċ import Ġmath . Vector 2 Ċ import Ġmath . random Vector Ċ import Ġkotlin . random . Random Ċ Ċ class ĠDNA ( length : ĠInt , Ġgenes : ĠList < Vector 2 >? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠ Ġval Ġgenes Ġ= Ġgenes Ġ?: Ġcreate Random ( length ) ĊĊĠĠĠ Ġfun Ġcross over ( partner : ĠDNA ): ĠDNA Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Gen es Ġ= Ġmutable ListOf < Vector 2 >() ĊĠĠĠĠĠĠĠ Ġval Ġmid Ġ= ĠRandom . nextInt ( genes . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġgenes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgene Ġ= Ġif Ġ( i Ġ> Ġmid ) Ġgenes [ i ] Ġelse Ġpartner . genes [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Gen es . add ( gene . mutate ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDNA ( genes . size , Ġnew Gen es ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠVector 2 . mutate () Ġ= Ġif Ġ( Random . next Float () Ġ< Ġ 0 . 0 1 ) Ġ Ġcreate Pre defined Vector 2 () Ġelse Ġthis ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Random ( length : ĠInt ): ĠList < Vector 2 > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenes Ġ= Ġmutable ListOf < Vector 2 >() ĊĠĠĠĠĠĠĠ Ġrepeat ( length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenes . add ( create Pre defined Vector 2 ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġgenes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Pre defined Vector 2 () Ġ= Ġrandom Vector ( VECTOR _ MIN _ VALUE , ĠV ECT OR _ MAX _ VALUE ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Magnitude ( VECTOR _ MAG N IT UDE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠV ECT OR _ MAX _ VALUE Ġ= Ġ 3 . 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠV ECT OR _ MIN _ VALUE Ġ= Ġ- VECTOR _ MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠV ECT OR _ MAG N IT UDE Ġ= Ġ 0 . 5 f ĊĠĠĠ Ġ} Ċ } Ċ