光是紅方的第一個回合,就有 2,554 個局面
兩種棋裡,紅方在初始局面都有 44 種走法。在象棋裡,黑方對這些走法的應著共構成 1,920 個局面。在鴨子象棋裡,要等鴨子落到某個空點上(空點大約有 58 個),紅方的回合才算走完,所以光是紅方的第一個回合就有 2,554 個局面。
這個差距每走一個回合都會成倍放大。雙方各走一個回合之後,鴨子象棋的局面數就已經超過象棋雙方各走兩個回合之後的局面數。
| 走完以下回合後的局面數 | 象棋 | 鴨子象棋 |
|---|---|---|
| 紅方第一個回合 | 44 | 2,554 |
| 雙方各一個回合 | 1,920 | 6,166,242 |
| 雙方各兩個回合 | 3,290,240 | 未統計 |
這些局面裡,有一半其實是同一個局面
鴨子只有落在黑方下一步要經過的地方才有作用:黑方棋子要走到的點、要滑過的點,或者要跳過的點。落在別處,黑方的應著和盤上沒有鴨子時完全一樣。
最要緊的點是黑方九宮前沿的 e8:無論紅方第一步走什麼,鴨子落在那裡都會讓黑方少掉 8 種應著。那 28 個灰點什麼也不改變。把鴨子放在其中任何一點上,黑方面對的選擇都一樣,然後再把鴨子挪到新的地方,所以接下來的對局還是同一盤棋。只有兩處小差別:黑方不能把鴨子留在原地,而判定重複局面時要算上鴨子所在的點。
所以搜尋只需看其中一個,其餘的都可以跳過。凡是給黑方留下相同應著的落點都只算一次,第一步時紅方的 2,554 種回合就降到 1,310 種。
鴨子離對手的棋子太遠,等於浪費半個回合
同一張棋盤對棋手來說也是一條經驗法則。把鴨子放在灰點上,對手的選擇和沒有鴨子時完全一樣,等於你只走了一步象棋,回合的另一半白白放棄了。鴨子要放在對手棋子的路線上才有價值:放在對方車和炮所走的路上,或者擋在對方的馬和象前面。開局時,作用最大的點在對手炮所在的那一行,一隻鴨子能同時截斷兩門炮。
子力越少,鴨子在博弈樹裡的分量越大
為了看到開局以後的情況,我們讓 Fairy-Stockfish 在兩種棋裡各自戰 64 局,並統計每一步的選擇數。象棋的選擇隨著棋子離盤而減少。在鴨子象棋裡,每吃掉一個子也會給鴨子空出一個點,所以一個回合幾乎和開局時一樣寬;走到第 200 個半回合時,它的選擇數約是象棋一步的 100 倍。
同樣的搜尋,在象棋裡能向前看 25 個回合,在鴨子象棋裡只有 14 個
這種寬度要拿搜尋深度來換。搜尋同樣數量的局面,Fairy-Stockfish 在鴨子象棋裡看到的深度只比象棋的一半多一點。兩種棋的深度我們都按回合計算,鴨子象棋的一個回合包括放鴨子。如果搜尋把每組等價的鴨子落點只算一次,就能贏回一部分深度。能贏回多少,我們還沒有測過。
| 搜尋局面數 | 象棋深度 | 鴨子象棋深度 |
|---|---|---|
| 100,000 | 12 | 8 |
| 1,000,000 | 16 | 10 |
| 10,000,000 | 25 | 14 |
一條小規則,讓象棋變成一種新棋
棋盤、棋子和走法全都是象棋的,所以象棋棋手坐下來就能下鴨子象棋。但鴨子幾乎改變了棋子背後的一切。開局理論在第一步之後就失效了,因為其中每一路變化都假定棋盤上沒有鴨子。對目前下這種棋的引擎來說,它也更難。傳統搜尋,也就是 Fairy-Stockfish 所用的 alpha-beta 搜尋,每向前多看一個回合,都要為每一個多出來的選擇付出代價,這就是為什麼搜尋預算越大,深度差距越大。
我們還不知道高水準的鴨子象棋是什麼樣子。有些落點純粹是技術,比如放在 e8 的鴨子,一下拿走八個應著。另一些落點針對的可能是對手這個人,而不是局面:把鴨子放在一個安靜的點上,引誘對方走某一步;或者用鴨子擋住對手正盯著的那條線,而真正的威脅在別處。一個能向前看 14 個回合的引擎找得到第一種。第二種,只有在高手之間的對局裡才會出現。
我們是怎麼統計的
第一步的局面由本站自己的規則引擎統計,也就是檢查這裡每一步棋的那段程式碼;更深的局面由 Fairy-Stockfish 統計。每種棋的 64 局也是 Fairy-Stockfish 下的,每步搜尋 100,000 個局面,並關閉了神經網路。象棋的計數嚴格按合法著法,所以讓自己的將帥可被吃掉的著法不算。鴨子象棋沒有將軍規則(吃掉將帥即獲勝),所以每一步走子都算。