1日9時間寝たい

本当は10時間寝たいです

テトリスのAIを作った

パソコンを使ったのでたぶんAIです。

youtu.be

github.com

AI

ver.1 ランダム

ピースをランダムに回転させてランダムな位置に落とします。すぐにゲームオーバーになります。

ver.2 評価関数

各ターンでピースの回転・落とす位置を全部試して一番よさげな手を選びます。

よさを決める要素はたとえば次のようなものが挙げられます:

  • このターンで消した段の数
  • いまの盤面で積み上がっているブロックの最大の高さ

これらに適当に係数をかけたものを評価関数として手のよさを評価します。

有効な手すべてについて評価して、一番良い手を選びます。

ver.3 GA

評価関数の各変数にかかる係数を少しずつ変えながら強いAIを探すのは精神に悪いです。

そこで次のようにします。

  1. 評価関数の係数が異なる個体 (AI) を複数用意する
  2. それらにゲームをプレイさせてみてスコアの高かった個体の一部を エリート とする
  3. エリート から1つ、全体から1つ個体をえらんでそれらから新しい個体をつくる
    • たとえば係数が1種類だとして、係数$a$を持つ個体と係数$b (>a)$を持つ個体から新しい個体をつくるときその係数は$[a, b]$からランダムに選ぶようにします
  4. 一定数新しい個体ができたら古い個体たちは消して2に戻って繰り返す
  5. 適当な回数繰り返したら終わる

このような方法はGA (Genetic Algorithm) と呼ばれています。

思い出

もっと強いのを作りたかった。

GA...のつもりだけど、第5世代くらいで収束してしまっているのでダメです。