Atropos:仍然具有可玩性的狀態共用型組合遊戲
有這樣的一類組合遊戲,對於任一個遊戲局面,遊戲雙方的合法決策都完全一樣,遊戲對戰雙方的唯一區別就是看誰先走。這樣的遊戲叫做Impartial Games。像什麼報數啊,取火柴啊,取石子啊,這些遊戲都屬於Impartial Games;而象棋、圍棋等要分棋子顏色的遊戲則不屬於Impartial Games。共享狀態的遊戲幾乎沒有可玩性,因為遊戲開始前我們就能知道誰贏誰輸(如果雙方均使用最佳策略)。棋局的任一狀態只有兩種,面對這個棋局的人要麼必勝要麼必敗。考慮這樣的一個遞推關係:如果一個狀態是必勝態,那至少有一種走法能走成一個必敗態留給對方;如果一個狀態是必敗態,那它怎麼走都只能走到必勝態。運用這樣的關係,我們可以自底向上推出初始狀態是必勝還是必敗。
近來有人提出一個名為Atropos的遊戲,它就是一個即使計算機也很難辦的Impartial Game,它能保證這個遊戲仍然具有可玩性。遊戲在一個Sperner三角形上進行,上圖就是一個邊長為7的Sperner三角形。遊戲開始後,雙方依次在白色的圓圈裡塗上紅色、綠色或者藍色,已經塗過顏色的圓圈不能再塗色。另外,只要有可能,所塗的圓圈都必須緊挨著上次對方塗的那個圓圈。誰先塗出三種顏色都有的小三角形,誰就輸掉這場遊戲。
注意這個遊戲是不可能出現平局的。當所有白色圓圈全部塗上了顏色後,至少會出現一個紅綠藍小三角形。為了證明這一點,我們可以在所有的綠色和紅色圓圈中間畫一個箭頭,紅的在箭頭右邊,綠的在箭頭左邊。這些箭頭一定組成了一條一條的路徑,它們既不會交匯也不會分岔。但整個圖的邊界上進來的箭頭有4個,出去的箭頭只有3個,於是至少有一條路徑在裡面走死了,也即迎面碰上了藍色的圓圈。這樣,我們就找到了一個紅綠藍三色都有的小三角形。
這個遊戲雖然屬於Impartial Games,但它仍然具有可玩性。從直覺上看,這個遊戲中的先手後手幾乎沒有區別,誰也不佔優勢。這篇論文則嚴格證明了,判斷Atropos遊戲的最佳策略屬於PSPACE-complete,這是所有使用多項式空間的問題中最難的一類,所有使用多項式空間的問題都可以(在多項式的時間內)約化到它。這說明,Atropos遊戲沒有什麼很顯然的“決竅”,即使利用計算機也很難確定最優決策。
線上遊戲:http://cs-people.bu.edu/paithan/spernerGame/SpernerGame.html (Java Applet)
檢視更多:http://cs-people.bu.edu/paithan/spernerGame/
相關文章
- [譯] Focal:型別安全、表達力強、可組合的狀態管理方案型別
- 具有代表性的 HTTP 狀態碼HTTP
- Josh Bycer:恐怖遊戲仍然具有可行性 推陳出新是關鍵遊戲
- 組合資料型別資料型別
- 結構型-組合模式模式
- React 4 種狀態型別及 N 種狀態管理React型別
- python 多型、組合、反射Python多型反射
- C語言(共用體型別)C語言型別
- 16、重做日誌檔案的狀態及重做日誌組的狀態說明
- Redux 包教包會(二):引入 combineReducers 拆分和組合狀態邏輯Redux
- linux動態檢視某組程式狀態的辦法Linux
- 簡述oracle日誌組的四種狀態Oracle
- Day 582:遊戲型組織遊戲
- 【Python】組合資料型別Python資料型別
- 8.結構型-組合模式模式
- 結構型之三-組合模式模式
- 狀態機模式 與 ajax 的結合運用模式
- 什麼是組合資料型別?Python組合資料型別分為幾類?資料型別Python
- 組合遊戲與博弈論基礎遊戲
- c++結構體、共用體(聯合體)C++結構體
- 狀態模式替代箭頭型程式碼模式
- BGP報文結構&型別、狀態型別
- Python常用的組合資料型別彙總Python資料型別
- 初始化遊戲狀態資料遊戲
- 狀態為active的日誌組也是不允許刪除的
- 【C++學習筆記】型別組合C++筆記型別
- 結合具體場景,聊聊 React 的狀態管理方案React
- redis 使用GETRANGE 來獲取一組bitmap狀態Redis
- AUTOCAD——拉伸陣列組合動態塊陣列
- 動態規劃-硬幣組合數目動態規劃
- 遞迴元件組合拳,無懼頁面巢狀遞迴元件巢狀
- 設計模式--狀態模式State(行為型)設計模式
- 使用 ATX 判斷單選框選中狀態、開關狀態、圖示型別型別
- 有狀態和無狀態的區別
- inactive狀態日誌組檔案損壞的恢復
- 檢查asm磁碟組狀態的檢視v$asm_diskgroupASM
- windows 下共用外網與內網的靜態路由新增Windows內網路由
- 結合 Vuex 和 Pinia 做一個適合自己的狀態管理 nf-stateVue