Day2 淺談電腦對局
===
## 電腦對局
電腦對局是AI領域中非常重要的一個分支,自電腦被發明以來,就有非常多人熱衷於研究如何讓電腦學會下棋,希望讓電腦能夠在各種遊戲中展現出「智慧」,電腦對局的研究也為AI在其他領域的應用奠定了基礎。
對局遊戲除了大家比較常見的棋牌類遊戲之外,還包含各式解謎遊戲,根據不同類型的對局會有不同的做法,每種類型的對局都有自己的特性,以下做一些簡單的分類跟名詞介紹。
### 依照人數分類:
* 單人對局
數獨、魔術方塊、nonogram、15-puzzle等
* 雙人對局
圍棋、象棋、將棋、西洋棋、愛因斯坦棋、暗棋、五子棋、六子棋、黑白棋、蜜月橋牌等
* 多人對局
麻將、橋牌、鬥地主、德州撲克等
### 零和對局 (Zero-Sum Game)
雙方的利益和為0的對局,一方的利益會等於另一方的損失,雙方不存在合作關係的對局。
### 合作對局 (Cooperative Game)
所有玩家通過合作來共同達成某一目標,而非互相競爭。
大部分的棋牌類遊戲都還是互相競爭為主,就算是橋牌、鬥地主等中雖然有跟隊友合作的環節,但是同時存在著對手需要互相競爭,也不能算是合作對局。
像是桌遊[花火](https://zh.wikipedia.org/zh-tw/%E8%8A%B1%E7%81%AB_(%E5%8D%A1%E7%89%8C%E9%81%8A%E6%88%B2))就是所有人的目標一致,沒有任何競爭關係,這就是合作對局。
但我這次分享的內容都會以零和對局為主。
### 完全資訊對局 (Perfect Information Game)
玩家可以得知全局的資訊
例如:圍棋、象棋、西洋棋等
### 不完全資訊對局 (Imperfect Information Game)
玩家無法知道所有的資訊
例如:橋牌、鬥地主、麻將等
### 發散型對局 (Divergent Game)
合法盤面的可能組合數會隨著雙方移動次數增加而愈來愈多。
### 收斂型對局 (Convergent Game)
合法盤面的可能組合數會隨著雙方移動次數增加而愈來愈少。
其實很多遊戲都會同時存在發散與收斂的情況。
比如井字遊戲 (Tic-Tac-Toe),每回合的合法盤面組合數總和算法為:
$$f(x) = \binom{9}{\lceil \frac{x}{2} \rceil} \binom{9 - \lceil \frac{x}{2} \rceil}{\lfloor \frac{x}{2} \rfloor}$$
$x$:表示目前雙方(X 和 O)移動的總步數。
${\lceil \frac{x}{2} \rceil}$:取上限表示 X 的移動步數。因為 X 先手,當總步數為奇數時,X 會比 O 多下一步。
${\lfloor \frac{x}{2} \rfloor}$:取下限表示 O 的移動步數。當總步數為奇數時,O 的步數比 X 少一步。
這邊公式的小括號就是計算組合的C,等於 $f(x) = C^9_{\lceil \frac{x}{2} \rceil} C^{9 - \lceil \frac{x}{2} \rceil}_{\lfloor \frac{x}{2} \rfloor}$
| $x$ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
| $f(x)$| 9 | 72 | 252 | 756 |1260 |1260 | 756 | 252 | 72 |
可以看到井字遊戲一開始為發散型,盤面變化量會隨著 $x$ 變大跟著變大,但到了有6手棋後就變成收斂型了,又開始漸漸變小。
通常發散型的對局會較收斂型來得複雜,很多遊戲到了最後都會變成收斂型對局,就有機會將其破解,然後儲存這些結果建立成殘局庫,我後面也會介紹到殘局庫的做法。
### 機率型對局 (Stochastic Game)
對局含有機率成分,玩家無法控制所有情況。
許多不完全資訊對局也都是機率型對局。
例如:麻將,你沒有辦法知道你下一張會摸到什麼牌,甚至連摸牌順序都有可能改變。
完全資訊對局的話有:[愛因斯坦棋](https://zh.wikipedia.org/zh-tw/%E6%84%9B%E5%9B%A0%E6%96%AF%E5%9D%A6%E6%A3%8B),能移動哪顆棋子是靠擲骰子決定的,所以不管優勢多大都有機會因為運氣不好而被逆轉,想起6年前曾經聽研究所學長說過愛因斯坦棋是個~~糞game~~好遊戲。
## Reference
* 電腦對局導論