読者です 読者をやめる 読者になる 読者になる

AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

遺伝的アルゴリズムでLifeGameの初期配置を求めてみた

Scalaで遺伝的アルゴリズム入門 - AccessViolation Exception

ScalaでLifeGameをささっと実装 - AccessViolation Exception


かなり改善チューンするところがあるのと評価に時間がかかるので改善実行しながら現状出来たところのまとめ

評価方法


  • 20 * 20の世界で15世代目の生存数が多いほど良いとする*1
  • 一点交叉、世界の一部分から前後を交換する
  • 生存数0の世界は致死遺伝子として取り除かれる
    • よって初期個体は致死遺伝子でないものを用意した*2
  • 0.01の確率で突然変異する

実装


  • ところどころにprintを設けてデバッグする自体に
  • 以前までのLifegame.scalaに機能追加
    • ファイル読み込み機能
    • 世界変動が起きなくなった世代と配置を取得する機能

よって遺伝的アルゴリズムで得られた結果で何世代目まで行けてどういうパターンに収束するのか確認できるようになった。メイン周りが汚い実装でちょっと綺麗にしたいところ。変数が少ないってほんとうに素敵

この段階では0世代の高評価世界が120世代目で絶命したのに対して、遺伝的アルゴリズムで30世代まで進めた個体では207世代まで生存している。ひとまずは結果があったがかなり難しい。

ひとまず成果ということでメモ。

LifeGameの初期配置を遺伝的アルゴリズムで求める

*1:デバッグの時間の関係上

*2:これでわかったが初期個体の選別が結果に大きく作用しているとかんがえられる