基本的にはxxxな画像の方と仕組みは同じです。 1世代に一定回数以上の「試合」を行い、その勝率が高い順に生存し、二個体で交叉して子を作ります。
今回は遺伝子数が少ないため、かなりダイナミックに変化するようにしています。
まず、生存個体の選出方法は、画像の方ではエリート方式(単純に勝率が高い順にN個選ぶ)でしたが、
こっちではルーレット方式(勝率が高い順に生存しやすくなる)を採用しています。
具体的な方法は次の通りです。
①(個体の勝率)/(各個体の勝率の和) の確率で2個体を選び、次世代の生存個体に加える。ただしこの2個体は重複しない。
②選ばれた2個体で交配し、その子も次世代の生存個体に加える。
③生存個体数が規定以上になるまで①、②を繰り返す。
ただし、①において、既に一度選ばれている個体がもう一度選ばれた場合、交配はするが生存個体には加わらない。
つまり、同じ個体が次世代にそのまま2個以上引き継がれることはない。
交叉方法は画像の方と全く同じです。遺伝子ごとに両親のどちらかから確率1/2で引き継ぎます。
具体的なパラメータは次の通りです。
【一世代の個体数】40
【一個体の文字数】10
【一文字の情報】子音、母音、平仮名か片仮名か、文字か記号か、記号の場合どの記号か
【一世代の試合数】1000
【記号の種類】・ ー ☆ ♡ ! ? & ん ン っ (空白)