パックマンはパワーエサの夢を見るか?
Lin's Dynamic World - 人工知能に関する断創録
ここで触れられている実験を、俺もやってみたいと思った。
環境
マップはランダムで作製した。29*29の広さを持つ壁のカタマリを、(見様見真似で)「穴掘り法」を使って掘りぬいた後、ランダムに50個の壁を破壊して擬似的に広場を作った。(参考:自動生成迷路)
その中に、一つ距離を置いて格子状にエサを置いていく。14*14のエサを配置したが、そのうち14個をランダムにパワーエサにした。
パックマン
頭脳は三層パーセプトロンで、101の入力層と4の出力層を持つ。
自分を中心とした5*5の視界を持ち、壁レイヤーに25、エサレイヤーに25、仲間レイヤーに25、敵レイヤーに25のニューロンを当てている。残りの一つはパワー状態を示す。
壁レイヤーでは壁のあるところは1、ないところは0が当てられる。
エサレイヤーではないところは0、普通のエサは0.5、パワーエサは1が当てられる。
仲間レイヤーではいないところが0、普通の仲間は0.5、パワー状態の仲間は1が当てられる。
敵レイヤーではいないところが0、いるところが1になる。
パワー状態は0で始まり、パワーエサを食べると1になる。その後、単位時間あたり0.01ずつ減少していき、0になると通常に戻る。
自分を中心とした5*5の状況を取得して入力層にぶちこみ、その結果を移動方向として認識する。
- 0番目
- 上に向かおうとする力
- 1番目
- 右に向かおうとする力
- 2番目
- 下に向かおうとする力
- 3番目
- 左に向かおうとする力
もっとも高い値を示した方向に移動を試みる。
行った先にエサがあれば食べる。敵がいればパワー状態によりどちらかが死亡する。
パックマンの学習ルール
移動前のルール。
- 向かおうとした方向に壁がある。
- 移動に失敗。いかないように学習。
- 向かおうおとした方向に味方がいる。
- 移動に失敗。いかないように学習。
- 向かおうとした方向にエサがある。
- 移動に成功。行くように学習。
- 向かおうとした方向に敵がいる。
- 移動に成功。パワー状態によって学習内容を変更する。
移動後のルール
- 行った先の周辺にエサがある。
- 行くように学習。
- 行った先の周辺に敵がいる。
- パワー状態によって学習内容を変更する。
- 行く前に敵がいて、それがいなくなった。
- パワー状態によって学習内容を変更する。
モンスター
パックマンと類似。100の入力層を持つ。(パワー状態を持たない)
同様の移動ルールを持つ。
モンスターにもエサレイヤーの情報は与える。もしかしたら、エサの位置とパックマンの位置について相関を見出すかも知れないからだ。(本当に見出したかどうかは我々にはさっぱりわからんが)
モンスターの学習ルール
移動前のルール。
- 向かおうとした方向に壁がある。
- 移動に失敗。いかないように学習。
- 向かおうとした方向にパックマンがいる。
- 移動に成功。相手のパワー状態によって学習内容を変更する。
- 向かおうとした方向にモンスターがいる。
- 移動に失敗。行かないように学習。
移動後のルール。
試行
パックマン一匹とモンスター三匹を配置することを考えている。
プログラム構造的にはパックマンとモンスターを何匹配置しても構わない訳だが。食物連鎖を考えると、パックマンが多い方が妥当かも知れない。
少々模式化するが、パックマン1〜nが順番に、判断と移動と判定と学習を行い、その後モンスター1〜mが順番に、判断と移動と判定と学習を行う。
そのワンセットを1ターンとする。
なお、パックマンはパックマン全体で一つの頭脳を共有し、モンスターはモンスターでモンスター脳を共有するとする。学習速度の上昇を期待……していいのかな?
この1ターンを下記の終了条件を満たすまで繰り返す。
実験項目
パックマンとモンスターの数を固定して、白紙の状態のAIを用意してから試行する。二回目以降の試行は学習したAIを用いる。
実験結果
試行中だっ! ……つーかプログラム面倒。