題:
有限狀態機是模擬國際象棋的好方法嗎?
A. N. Other
2019-12-16 15:19:05 UTC
view on stackexchange narkive permalink

編程中非常常見的模型是有限狀態機(FSM)(有關出色的示例,請參見此處的)FSM是對國際象棋進行建模的好方法嗎?最好的方法是什麼?可以使用哪些國際象棋功能;應該遺漏什麼?

我對計算機科學或工程學,甚至對象棋編程都不了解,所以我想知道這個問題。

什麼是有限狀態機?
正如我在問題中所說,我對這一概念的了解有限。 Wikipedia條目應該對什麼是有限狀態機有一個很好的了解。這個問題顯然是給那些知道什麼是fsm的人準備的。
如果您不明白這意味著什麼,為什麼要問一個問題?您認為該術語含義的上下文以及您認為該術語可能適用於國際象棋的原因可以幫助回答。
作為科學家,我無法回答,但是我可以理解其他人在寫關於有限狀態機的文章。您對所談論或詢問的所有內容是否有完全的了解和知識?根據我的經驗,通過提出一些我們不確定性達100%的問題,然後逐步從有見地的答案中逐漸了解知識,知識會以這種方式得到改善。
@Grade'Eh'Bacon我與您希望提出這個問題有關,但是我發現,如果我們只留下諸如“為什麼您問一個問題,如果您不明白這意味著什麼?”之類的話,則更具建設性,而直接去說出第二句話中說的話。
這個問題不適用於本網站。這是計算機科學專家會知道的問題,而不是國際象棋專家會知道的問題,因此它屬於cs.stackexchange.com
按照您的推理,關於象棋編程的問題也不適用於該站點,因為只有軟件程序員才能正確回答它們。但是也許這個委員會有一位或多位計算機科學專家,同時還是國際象棋專家。就目前而言,在我看來,對我的問題的大多數答案是有見地和充分的。
@Grade'Eh'Bacon為什麼您_care?_這個人可以問他想問的任何問題,別理他。
從學步上來說,我不確定問“ X是否為有限狀態機”是否有意義。就像在問,“我的銀行帳戶有功能嗎?”不,我想不是。不過,其中的金額可以使用函數來建模。同樣,可能使用FSM對國際象棋的某些方面進行建模,但是遊戲本身是遊戲,而不是數學構造。
這帶來了一個有趣的問題:首先是像國際象棋這樣的遊戲嗎?這不是變相的數學結構嗎? “遊戲”一詞是我們創造的東西,因為它具有娛樂性,等等。但是,如果我們深入分析它,那麼,這背後不是數學嗎?如果某些遊戲最終不是數學的,那麼像約翰·納什(John Nash)這樣的數學家為什麼還要關心關於遊戲理論的深入寫作?
此外,請考慮計算機可以下象棋。而且計算機程序最終不是由算法即數學構成的嗎?
@A.N。其他,從理論上講,可以將機器設計為執行許多與國際象棋有關的任務:告訴此舉是否合法,針對給定的董事會職位或職位歷史選擇合適的舉措,告知給定的董事會國家屬於合法遊戲,等等。但是,所有這些都不是說遊戲是一台機器。機器做的事。象棋遊戲不是。遊戲不是一台機器,或多或少與轉彎指示列表不是公路旅行或食譜不是飯菜一樣。
那麼,@Solomon,首先是什麼“遊戲”,沒有兩個玩家玩,沒有一系列的動作或任務,依此類推? “國際象棋遊戲”本身並不算什麼,僅僅是一個抽象。我正在談論我的問題背後的所有行動。
快速谷歌搜索告訴我們,它最多[7728772977965919677167163483487685453137329736522個州](https://math.stackexchange.com/a/1407631/2333)。
-1
@A.N。其他,續但是顯然,這要復雜得多-該模型不僅僅是將數字(狀態)加在一起的龐大(但有限)的查找表。這是計算機創建並遍歷(實時)以計算分數的搜索樹。計算機可以使樹多深(和寬)是它可以觀察和評估的前幾步。
@A.N。其他好問題,但請更改標題以匹配詳細文本:“國際象棋可否視為有限狀態機?”
十 答案:
RemcoGerlich
2019-12-16 15:39:56 UTC
view on stackexchange narkive permalink

是的,我想是這樣。

您將所有可能的董事會職位都列為州(很多州,但是有限)。起始位置為初始狀態。合法行動是國家之間的聯繫(因此“字母”將包括所有可能的行動)。

最後,您將獲得所有可能的國際象棋遊戲集,作為機器可接受的語言。

>

如何通過非法舉動,50和75舉動規則,正式描述合法舉動等的形式來正式解決這一問題,供讀者練習。

抽籤要約,以其他外部方式結束的遊戲(例如手機關機)應該被排除在外。

我認為您無需忽略抽獎要約和其他外部因素來結束比賽。為每個板狀態添加DrawAccepted和BoardState + DrawOffered狀態。加上BlackLoss和WhiteLoss的狀態說明了導致一側丟失的其他外部因素(例如,辭職)。每個州都有一個指向BlackLoss,WhiteLoss及其BoardState + DrawOffered的鏈接,BoardState + DrawOffered帶有一個指向BoardState和DrawAccepted的鏈接。
只有有限數量的可能的板狀態,根據定義,這使其成為FSM。但是,這就像爭論所有計算機都是FSM一樣,因為內存始終是有限的。雖然正確,但這不是有用的抽象。如果您想要的FSM不包含過多的節點,那麼由於遊戲規則的複雜性,答案可能是“否”。
說一台機器可以識別出有效的移動順序或有效的棋盤狀態與說遊戲本身就是一台機器並不是一回事。
@SolomonSlow是的,但是原始張貼者承認寬鬆地使用這些術語。
董事會職位還不夠。您需要以下信息:King和Rooks是否已移動,最後一次移動是要通過的,並且,為了在一個位置重複三次重複後要求平局,通常需要自上次棋子移動以來的所有位置。
@M.Herzkamp這很容易處理,但要花大一些的狀態集。
John Coleman
2019-12-16 20:00:28 UTC
view on stackexchange narkive permalink

有限狀態機可以描述為常規語言的識別器。您也許可以通過所有可能的遊戲記錄來識別國際象棋。例如, f3e5g4Qh4#(傻瓜的伴侶)是該語言中較短的字符串之一。由於該語言的字母是有限的,所有單詞的長度是有限制的(上限為35,000,因為最大遊戲長度不超過6000步(假設50步繪製規則),大多數步長為6個字母進行編碼))。因此,國際象棋的語言是一種有限的語言,因此它很普通,因此可以被FSM識別。

@Cruncher嚴重,您這個傻瓜,[您怎麼可能認為regex無法解析XML](https://stackoverflow.com/a/1732454/745903)?
Eric Lippert
2019-12-17 00:46:00 UTC
view on stackexchange narkive permalink

可以將像棋遊戲視為有限狀態機嗎?

是的;這是一個很好的見解。

FSM是具有以下特徵的抽象計算模型:

  • 機器以已知的“啟動狀態”開始
  • 機器接受輸入序列
  • 在當前狀態的上下文中解釋每個輸入
  • 每個輸入都會導致當前狀態的更新;更新僅取決於當前遊戲狀態和輸入。
  • 某些狀態為“停止狀態”,這會導致機器停止。
  • 有是狀態大小和可能輸入的數量的嚴格上限。

這是使計算機成為​​有限狀態機的最後一個功能。也就是說,如果我們對機器可能處於的每個單獨狀態進行編號,則將有最大個此類編號。也許大於宇宙中的原子數,但仍然是有限的。

然後我們可以將像棋遊戲建模為FSM。起始狀態是起始板。輸入的內容是合法舉動-包括“我辭職”之類的舉動-每個舉動都會更新董事會的狀態。有些狀態是“停止狀態”-我們稱這些狀態為“白人有將死”,“黑人處於僵持狀態”,“黑人辭職”等等。

此外,任何具有這些特徵的遊戲可以建模為FSM;您需要的只是有限的遊戲狀態和可預測地更新遊戲狀態的輸入。例如,如果我們考慮對撲克進行限制,以使所有玩家可用的籌碼總數少於例如100萬億美元(或任何其他有限的數字),那麼也可以將撲克建模為FSM。我們有一個開始狀態:玩家人數,每個玩家的籌碼數和洗牌後的牌組。我們有規則來更新狀態-下注,下注和棄牌等等-我們有狀態可以停止遊戲。

但是,如果我們將撲克建模為對可用籌碼總數沒有限制,那麼從技術上講它將不再是FSM;如果玩家可能擁有任何個籌碼,那麼每個撲克遊戲都沒有有限的信息。

考慮以下游戲很有趣: em> not FSM;我已經註意到,數量不限的遊戲不是FSM。考慮一個紙牌遊戲,玩家可以在某個時候採取某種行動,導致牌組被洗牌。在這種情況下,我們有一個不確定狀態轉換,從技術上講,這將使其不成為FSM ...但是也許可以通過以下方法解決:

骰子怎麼樣?遊戲?這些是隨機的,因此看來它們不是FSM,但是我們可以通過將每個玩家的擲骰作為 input 來巧妙地將它們設為FSM,而僅僅是由 choose 玩家;選手。其他隨機遊戲元素(如紙牌洗牌)也是如此。

國際象棋特別適合作為FSM,因為它沒有隨機性,而且實際上在沒有隱藏狀態全部。兩位玩家都始終了解遊戲的整個狀態。

這可能是偏離主題的,但是對於甲板的改組,您可以從技術上用“ 52!”改組後的狀態來處理嗎?從玩家的角度來看,混洗是不確定的,但是從狀態機的POV來看,混洗是確定的?我誠懇地問,因為我不確定。
@Dancrumb聽起來就像將非確定性有限自動機轉換為等效的確定性自動機一樣,並伴隨著狀態的指數爆炸。 NFA和DFA具有相同的計算能力(它們都只能識別常規語言)。
Laska
2019-12-16 16:46:26 UTC
view on stackexchange narkive permalink

問題專家將像棋視為有限狀態機非常有用。該狀態可以包括:

  • 每個廣場上有什麼樣的棋子
  • 誰有舉動?
  • 鑄造權
  • 傳遞能力

您真的希望這是國家的範圍,主要是因為在第9.2條的法律中,這是定義位置重複的基礎!

這裡有一個微妙之處,因為儘管排擋權僅取決於K&R是否已移動(或者可以說R已被捕獲),但被動能力取決於ep可以執行。 (可能有一些別針或檢查可以阻止它。)因此,需要先行回顧。

我們在提供狀態方面已經很慷慨,但是在定義字母表時我們可以更加謹慎。我們可以僅通過指示源和目標兩個正方形來定義移動,然後我們可以解釋該移動以給出唯一的移動(包括cast割和e.p.)。當然,在大多數情況下,兩個方塊之間不存在移動,而在其他情況下,由於檢查,該移動是非法的。根據FSM的慣例,這很好。從概念上講,我們可以認為每個職位都提供了一系列法律措施。

很自然地允許陳述棋子上的棋子排列狀態,即使是代表非法立場的棋子也是如此。有些職位看起來很正常,但實際上是非法的-很好,這些都可以。擁有零個或一位國王的位置,或已經移動過檢定口的玩家都很容易。但是,如果一個玩家的棋子位於第一或第八等級,則該棋子也可能會從其他等級開始,然後我們將不得不為每個棋子跟踪其他狀態,以查看其是否有權進行第一步雙跳。起始方塊也可能會影響它在達到第8位時是否可以提升。我們也有一個問題,當一個玩家有多個國王時會發生什麼。但是原則上,定義非法職位的移動是最好的方法。合法位置和非法位置之間的唯一區別是,它是否可以植根於最初的“遊戲數組”中-這是一個微不足道的功能,但有時很難確定。要確定某個職位是否已死,需要展望遊戲的未來,因此我們不想丟掉那棵後來的樹。說出它的出現並沒有使死亡變得不那麼真實。

50/75重複規則的移動和繪製當然也與狀態機無關。前者可能嵌入在狀態機中,而後者則不能,因此最好也從頭開始記錄狀態序列。

在大多數情況下,這是遊戲數組,但是對於復雜的問題,從頭開始是較晚的一點,我們可能需要約定以告訴我們如何確定詳細的遊戲狀態和歷史記錄。

執行所有這些操作有什麼意義?國際象棋問題(特別是仙女問題)的問題之一是規則和約定不太清楚。舉一個隨機的例子:死位規則是否具有50移動的可見性& 75移動狀態?問題世界沒有仲裁員可以告訴我們FIDE規則可能試圖說些什麼。如果我們說得好,沒關係到個別情況,那麼我們就會造成不確定性的迷霧,這將使逆向分析無法發揮其全部潛力。

專家問題學家Guus Rol現在應該採取的方法我們將把每個過渡(移動)分解成一個微階段的旅程。這樣可以更精細地管理童話環境。我自己的感覺是,這應該以我在此描述的更簡單的模型為基礎,這對於他後來的探索是一種大本營。

編輯:其他人可以確認國際象棋是否可以在FSM中表示。我試圖採用的獨特角度是如何應該採用哪種方法:將什麼有意義的東西嵌入機器中以及應該在頂部構建什麼。我沒有提到的真正複雜性是管理多個可能的逆向歷史,這對於許多逆向分析問題是必需的。唯一可行的解​​決方法是FIDE意義上的state = position。

逆行分析有兩個主要範例:RS & PRA。它們中的任何一個都可能是晶格理論分析的合適候選者,但尚未系統地進行。最好的解釋在這裡 https://www.janko.at/Retros/Glossary/Castling-and-En-passant.htm。韋納·凱姆(Werner Keym)的文章中包含一些經典而又困難的作品。

不打算自動化解決復古問題,而只是定義一種語言來正式表示其解決方案將是一個很好的開始。

我忽略了全面的事件,例如單擊,寫動,觸摸動,辭職,開出要約,開出索償等,以集中於撰寫方面。請注意,有一種有趣的比賽條件,可能有兩名選手同時辭職。

重複抽獎可以嵌入到FSM中,因為只有有限的許多可能的棋盤配置,因此我們可以用有限的位數來表示該配置是否已在此遊戲中實現。當然,實際上這不是我們的方法,但是理論上沒有異議。
確實,我很喜歡復古的問題,但是對如何自動化解決方案卻沒有多加考慮。有趣的是,是否有一種方法可以將晶格理論應用於逆向問題。
嗨,埃里克(Eric),謝謝您的深刻評論。其他人可以確認國際象棋是否可以在FSM中表示。我試圖採用的獨特角度是*如何*應該採用這種方法:將什麼嵌入機器中以及將其構建在頂部是什麼。我沒有提到的真正複雜性是管理多個可能的逆向歷史,這對於許多逆向分析問題是必需的。唯一可行的解​​決方法是FIDE意義上的state = position。這不是棋盤遊戲的必要條件。
增加了對主要答案的回應
Inertial Ignorance
2019-12-16 16:54:52 UTC
view on stackexchange narkive permalink

從某種意義上說,是的。國際象棋可以有很多狀態/位置,但是這個數量是有限的。為了從一種狀態進入另一種狀態,需要採取一些措施。如果您處於一種狀態,則可以從多個操作中進行選擇以達到另一種狀態。

Tertium Quid
2019-12-17 01:49:02 UTC
view on stackexchange narkive permalink

您可以通過將FSA狀態與一對值相關聯來將FSA與有效的國際象棋遊戲(由FSA識別的語言是所有有效的國際象棋的集合)相關聯:(1)可能的棋盤配置和(2)一個值,該值指定要移動的下一個玩家。 (給定部件的顏色編碼,可以選擇第二個值。)這些對中的每對僅在有有效的棋局加入時才與過渡連接。一個有效的遊戲將是一系列合法的舉動。我猜想,這種FSA 本身的定義過大。我不確定它將與FSA在魔方上的移動相比較,這需要定義43個五百億個狀態(儘管該遊戲中有許多可能的陳述狀態)。堆棧機將是對國際象棋建模的巨大改進。

fraxinus
2019-12-17 14:30:14 UTC
view on stackexchange narkive permalink

根據定義,國際象棋遊戲是一種有限狀態機。

再說一次,可能的狀態數量很大,而且兩個玩家都可以遵循的策略數量更多。

為某些終點桿預留空間,這些數字通常超過了現代計算能力,因此通常不將游戲建模為FSM。

speciesUnknown
2019-12-18 18:38:41 UTC
view on stackexchange narkive permalink

程序員的回答

我偶然發現了這個問題,並認為程序員的回答在這裡很有用。

雖然國際象棋棋盤可以表示為一組有限狀態,但由於它們的數量眾多,因此不切實際。

但是,遊戲的邏輯包含特定的步驟-遊戲客戶端通常使用FSM實施。由於玩家必須遵循某些規則,因此使用FSM可以輕鬆實現那些規則(任何其他基於回合的遊戲)。

在繪製動作時,客戶處於特定狀態。我們可以稱其為“計劃”。

然後您選擇一塊,客戶可以提供可供選擇的移動清單。 “正在移動”狀態。

一旦選擇了一個移動,客戶端就可以為該移動設置動畫。

然後您切換到“等待”,其他客戶端執行相同的步驟。

一旦發生配對或遊戲無法繼續,我們將切換到“得分”狀態。

董事會本身肯定是有狀態的,儘管在技術上是有限的,但這與FSM並不相同,因為我們沒有事先寫明州和州之間的轉移規則。

關於AI

儘管不可能在電路板上的每個位置都具有預編碼狀態,但AI能夠提前映射成千上萬的移動並構建大型的FSM。在這種情況下,它將使用每個狀態必須確定的屬性來確定移動。從技術上講是有限狀態機,儘管定義不一樣。

Christian H. Kuhn
2019-12-21 19:14:12 UTC
view on stackexchange narkive permalink

當您用“規則”標記問題時,我會嘗試回答。

我認為FSM不適合作為模型。當然,您有很多但有限的狀態。該模型各有利弊,有比我更好的計算機科學家對此進行解釋。我的觀點:轉換的次數可能是無限的。

為清楚起見,您必須定義“ chess”。我希望我們同意國際棋聯的《國際象棋法》對國際象棋的定義。這些主要包括兩個部分:基本比賽規則(第1-5條)和比賽規則(第6-12條,附錄和指南)。

從最初的位置轉到位置在1.e4之後,有幾個過渡。 1.Nf3 Nf6 2.Ng1 Ng8 3.e4是其中之一。您會看到問題。

尤其是根據《競賽規則》。第9.6條規定,轉換次數是有限且有限的,因為在排名第5後,遊戲結束了,FSM是一個很好的模型。無限可能出現無限職位。對於無限數量的過渡,有限狀態機可以按定義em 成為模型。

user20899
2019-12-18 22:31:47 UTC
view on stackexchange narkive permalink

是的!由於狀態數量有限,因此您可以根據國際象棋規則在這些狀態之間移動。有一個整潔的頁面,它可以可視化連接圖中的可能移動,因此,這已經是對狀態機進行編程時的操作的90%。 graph visualization of opening

https://www.chessroots.com/



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...