【ゲーム制作】敵AIを数学的理論を基に作成する① ~UCB1方策~

導入

スマブラなどの格闘ゲームからオセロなどの戦略ゲームに至るまで、敵のAIが必要になります。今回は、数学的に性能が保証された戦略AIを作成する方法を紹介します。

今回は、「UCB1方策」というものを紹介します。

UCB1方策の概要

UCB1方策というのは、多腕バンディット問題に対する戦略の一つです。

多腕バンディット問題とは、複数の「報酬の期待値が分かっていない」選択肢があるときに、報酬を最大化する選択肢の選び方を考える問題です。

多腕バンディット問題の例は、「勝率が不明な複数のスロットがあって、金貨をどういう風に入れたら報酬を最大化できるか」という問題です。

UCB1方策の具体的な手順

①まず、全ての選択肢を1回ずつ試します。

②その後、UCBスコアが最大になる選択肢を試します。(UCBスコア=μ+c√(ln(N)/n))

(μ:その選択肢の現時点の勝率。c:定数。理論上は√2だが問題によって調整する必要がある。小さくするほど現時点の勝率を重要視し、大きくするほど探索を重要視する。N:全ての選択師の探索回数の合計、n:その選択肢の探索回数。)

(※lnは自然対数で、logの底がネイピア数eであるものです。)

③手順②を繰り返します。

UCB1方策が戦略ゲームのAIに使える理由

戦略ゲームはモンテカルロ法を使うことにより「多腕バンディット問題」とみなすことができるからです。

モンテカルロ法とは、乱数を使って特定の値を推定する方法です。ランダムに点を打って、円の面積を推定するのもモンテカルロ法です。

ある選択肢を選んだとき、「それ以降の選択肢はどちらかが勝つまで完全にランダムに選び、勝敗を決める」とします。

1つの選択を選ぶと、ある特定の確率で「勝利」という報酬を得られるので、これは多腕バンディット問題になっています。

「選択肢を試す=1$失う」、「勝利=10$貰う」などと考えると分かりやすいです。

UCB1方策の実現例

RPGゲームの戦闘で、ドラゴンAIに最適な行動を選ばせる場合を考えます。

選択肢は、「A:殴る」「B:火を吐く」「C:力を溜める」です。

まずは手順①。Aを選ぶと結果は「敗北」。B、Cは「勝利」でした。

現在のUCBスコアは、Aは0、B、Cは1。

続いて手順②。定数c=√2とします。Bを選ぶと結果は「敗北」でした。

現在のUCBスコアは、Aは√(2ln2)≒1.18、Bは1/2+√(ln2)≒1.33、Cは1+√(2ln2)≒2.18

再度②。Cを選ぶと結果は「勝利」でした。

現在のUCBスコアは、Aは√(2ln3)≒1.48、Bは1/2+√(ln3)≒1.55、Cは1+√(ln3)≒2.05.

再度②。Cを選ぶと結果は「敗北」でした。

現在のUCBスコアは、Aは√(2ln4)≒1.67、Bは1/2+√(ln4)≒1.68、Cは2/3+√(2ln4/3)≒1.63

再度②。Bを選ぶと結果は「敗北」でした。

(本来は何十回、何百回とする必要がありますが、今回はここで終了します。)

現在、最も勝率が高い選択肢はCなので、ドラゴンはCを選択する。

問題点

UCB1方策は、原始モンテカルロ法を少し改良した程度の戦略です。なので、まだまだ全然弱いです。

※今回は、このUCB1方策に探索木を組み合わせたUCTという強力な方策を紹介する準備として紹介しました。

数学的理解

UCB1方策の手順②の式を導出したい人向け。

↓ 研究者の方が書かれている記事です

多腕バンディット問題におけるUCB方策を理解する · THINKING MEGANE (monochromegane.com)

↓ 多腕バンディットに使われる統計学の定理の紹介

参考文献

https://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1894-14.pdf

https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%AB%E3%83%AB%E3%83%AD%E6%9C%A8%E6%8E%A2%E7%B4%A2

https://ja.wikipedia.org/wiki/%E5%A4%9A%E8%85%95%E3%83%90%E3%83%B3%E3%83%87%E3%82%A3%E3%83%83%E3%83%88%E5%95%8F%E9%A1%8C

【群論】有限体の乗法群が巡回群になることの証明

問題

有限体Kの乗法群K*が巡回群になることを示せ。

証明の流れ

NをK*の元が取る最大の位数としたとき、K*の任意の元のN乗が1であることを示す。

N<#K*なら矛盾するので、N=#K*が示される。

証明

Kを有限体とし、K*をKの乗法群とする。

K*の元の内、最大の位数を取る元をx、その位数をNとおく。y∈K*に対して、xyの位数がmであるとする。mがNの約数なら、(xy)N=1であり、yN=1。mがNの約数でないなら、x-mの位数はNになるので、yの位数はNになる。yで生成される巡回群は、yで生成される巡回群の部分群なので、yの位数はNとなる。つまり、yN=1。

Kは体なので、方程式XN=1のK上の解の数はN以下であるが、K*の任意の元がXN=1の解となるので、#K*≦Nとなる。#K*≧Nは自明なので、N=#K*

以上より、K*はxで生成される巡回群となる。

補足

なぜN=#K*を示すのか?:N=#Kなら、xの巡回群の位数が#K*となり、(xの巡回群)=#Kとなるから。

mがNの約数でないなら、x-mの位数はNになる:x-mの位数がk(≠N)なら、x-mk=1となるが、-mkがNの倍数でないのでおかしい。

yで生成される巡回群は、yで生成される巡回群の部分群なので、yの位数はNとなる:ラグランジュの定理(「部分群の位数は、それを含む群の位数の約数になる」)より、yの位数はNの倍数となるが、K*の元が取る最大の位数はNなので、yの位数はNとなる。

#K*≧Nは自明:位数が、その集合の要素数を超えることはない。もし、N>#K*となるなら、xの巡回群の要素数は#K*を上回るので、おかしい。

【証明付き】素数に関する定理まとめ

導入

素数に関するまとめサイトが無かったので作りました。

証明されているものに限り記載しています。

目次

  • 弱いゴールドバッハ予想
  • ベルトラン・チェビシェフの定理
  • 素数定理
  • オイラー積
  • 素数の間隔に関する事実
  • 立方数に関する事実
  • ウィルソンの定理
  • グリーン・タオの定理
  • 算術級数定理

弱いゴールドバッハ予想

7 より大きい奇数は 3 個の素数の和で表せる。3 個の素数は同じ数であってもよい。

ハラルド・ヘルフゴットによる証明

ベルトラン・チェビシェフの定理

任意の自然数 n に対して、n < p ≤ 2n を満たす素数 p が存在する。

エルデシュによる初等的な証明

素数定理

π(x) ~ Li x

素数定理 – Wikipedia

ポール・エルデシュによる証明

ニューマンによる短い証明

ゴールドフェルドによる初等的な証明

アヴィガドと他3人による証明

素数定理の証明と歴史

オイラー積

ディリクレ級数を素数に関する総乗の形で表した無限積。

オイラー積 – Wikipedia

素数の間隔に関する事実

間隔が246以下の2つの素数の組は無限に存在する。

D.H.J. Polymath による証明

立方数に関する事実

n が十分大きければ n3 と (n + 1)3 の間には必ず素数が存在する。

アルバート・イングハムによる証明

ウィルソンの定理

p が素数ならば (p − 1)! ≡ −1 (mod p) が成り立つ。
逆に、整数 p > 1 に対し、(p − 1)! ≡ −1 (mod p) ならば、p は素数である。

ウィルソンの定理 – Wikipedia (証明付き)

グリーン・タオの定理

素数の列は、任意の長さの等差数列を含んでいる。

テレンス・タオと他2人による証明

算術級数定理

初項と公差が互いに素である等差数列には無限に素数が存在する。

算術級数定理 – Wikipedia (証明付き)