パックマンはパワーエサの夢を見るか?

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ターンを下記の終了条件を満たすまで繰り返す。

パックマンの全滅
モンスター側の勝利
モンスターの全滅
パックマン側の勝利
エサの全滅
パックマン側の勝利
時間制限
1000ターン経過。モンスター側の勝利

実験項目

パックマンとモンスターの数を固定して、白紙の状態のAIを用意してから試行する。二回目以降の試行は学習したAIを用いる。

  • パックマン側とモンスター側の勝敗が試行の度にどのように変化するか。
  • 動きのログを見て、戦術的に成長しているかどうかを確認する。
  • パックマンとモンスターの数を変更した時、どのように変化するか。
  • 複数のパックマン・モンスターの時に、連携的な動きを見せるか。

実験結果

試行中だっ! ……つーかプログラム面倒。