拍手遊戲勝負概率 2014

2022-08-20 18:39:10 字數 4045 閱讀 9195

2023年寫的東西,使用馬爾可夫鏈求簡化的拍手遊戲的勝負概率。

我的設想是人機對玩時程式可以**人的動作概率來最大化勝率。

ps:其他問題:

遊戲介面如何模擬剪刀石頭布的場景,可以讓人們相信對方沒有作弊或非常容易發現對方作弊?

原文:我說的拍手遊戲是指這個小時候的遊戲:ab用手勢表示裝彈、防衛和開槍,每拍兩次手給出手勢,勝出的條件是開槍時對方在裝彈或者先裝滿五顆子彈。用(+)(=)(―)表示裝彈、防衛、開槍,有(―)<(=)<(+)<(―),類似於剪刀石頭布。我用程式試驗在很簡單的條件下遊戲的勝負情況。

網上介紹的規則要複雜得多,還有人在上大學前用 c# 實現過區域網對戰版本。程式似乎難以模擬這類猜拳遊戲的同步場景。這個遊戲也可以實現為其他場景。比如,房間裡有錢幣,ab每一次或者不進入房間,或者進入房間偷走乙個錢幣,或者進入房間放回乙個錢幣。先偷走m個錢幣的勝出,或者進入房間放回錢幣而(看見)對方偷走錢幣時勝出。

假設:雙方設定在當前雙方裝彈數目為ab時,自己出某個手勢的概率,儲存在table_a/b。

table_b中(+)(=)(-)的概率都設為p、r、q。例外:b=0時,不允許(-),q≡0,r≡1-p;a=0時,沒有必要(=),r≡0,q≡1-p。

table_a通過置換table_b對應單元中(+)(=)(-)的概率得到。我希望a勝的概率pa總大於1/2。

在b=0或a=0時,合理的置換只有乙個,如下圖所示。但a+b=0時,雙方p(+)≡1。

按照(―)<(=)<(+)<(―),a>0,b>0時的置換如下圖所示。

下邊就是看看在p、r(q=1―p―r)和最大裝彈數目m的不同取值下,遊戲的勝負情況。

將遊戲看成從原點出發的隨機游動,ab就是狀態(a,b),a,b=0,1,……,m;δa,δb=―1,0,1;a=0時,δa≠―1,δb≠0,ab對調亦然。新增狀態end_a、end_b,表示a勝、b勝。規定當δa=1,δb=―1或者a=m,b<m時轉移到狀態end_a,ab對調亦然;到達end_a或end_b後不再轉移至其他狀態。因此座標上的點每次可向周圍最多6個點移動、或者不動、或者轉移到end_a或end_b。

為了方便計算,合併多餘的狀態。(m,b<m)/(a<m,m)合併至end_a/end_b。另外,(m―1,0)/(0,m―1)一定轉移到end_a/end_b;(m,m)一定轉移到(0,0),而(0,0)一定轉移到(1,1)。合併後,游動實際上從(1,1)出發;(m―1,m―1)在δa=1,δb=1時轉移到(1,1);狀態總數n為:(m+1―1)^2+2―3=m^2―1。如圖所示,取m=5。

ab的手勢按當前雙方裝彈數目對應的設定概率給出,因此這n個狀態組成的游動是乙個齊次馬爾可夫鏈。由table_a/b可得到轉移矩陣。end_a、end_b是(非零)常返狀態;其他狀態是非常返狀態。系統最終一定被吸收進end_a或者end_b。吸收概率和平均吸收時間的解法可參見《概率、隨機變數與隨機過程》15.5節非常返狀態和吸收概率。

用轉移矩陣的特徵值計算好像也是可以的。用matlab的符號運算功能可以得出pa的表示式,很長。將數值代入最終的表示式計算比代入轉移矩陣計算的效率高,但是計算pa很費時間,不如直接代入轉移矩陣。 

先考慮a>0,b>0時出一次手勢的情況。這三種情況對a有利:勝;a(+)b(=);a(=)b(―)。假設這三項的權重一樣,則取它們的和為sa=p^2+r^2+q^2,則sb=qr+pq+pr。顯然sa≥sb,似乎總是a占有比較大的優勢。如果只取前兩項,p^2+r^2>1/4時,sa>sb;p^2+r^2<2/9時,sa<sb。如果只取第一項,則sa=p^2,有pa>sa>1/2,若p^2>1/2;sb=qr≤1/4。不過這樣一次簡單的比較意義不大。除end_a/b外的狀態總數為n―2=m^2―3,因此m的最小值應取3。如果m=2,則只有乙個初始狀態(1,1),取三項之和的sa、sb,有pa/pb=sa/sb≥1。

以步進值0.025取0~1之間的41個點作為p、r的取值,取m=3,4,5,6,7,15,畫出p+r≤1時,pa的變化情況,pa有npa=861個點。m=3時pa如下圖所示;m取其他值時的曲面形狀相似,見等高線圖。可見,pa並非總是大於1/2。m越大,pa最小值越小,pa<1/2的範圍越大,見下表。

最小值出現在p<1/3,q=1/3附近,取一項之和的sa、sb,sa=p^2,sb=qr,有sa<sb。直接作圖看看sa―sb<0和pa<1/2的分布,如下圖所示。除邊緣幾個格仔外,可以認為sa<sb是pa<1/2(m≤15)的充分條件。

也就是p較小,而q約為1/3時,採用上述置換對a是不利的。此時b傾向於(―)和(=),而a隨著傾向於(=)和(+),企圖達到最大裝彈數目m來取勝,但同時中槍的可能性比較大,m越大,越難以達到,p(pa<1/2)越大。

如果不置換,結果如上圖所示,取m=34567。p(pa<1/2)≤202/npa=0.23,最小值都出現在p≥0.4處,且min(pa)≥0.4966。不置換時,a應該只在b>a=0時不得不佔劣勢,我本以為p(pa<1/2)=0。

如果反過來,取經過上述置換得到table_b的table作為table_a,能不能使a起死回生?這樣置換後,相當於ab、pq位置互換,三項之和的sa=qr+pq+pr,sb=p^2+r^2+q^2,原來的pa<1/2,p<1/3對應於置換後的pa=1―pb>1/2,p+r=1-q>2/3。取m=5,看看和其他三個置換的結果。其他置換是左右對稱的。這四個置換的p(pa<1/2)

都大於原來的p(pa<1/2)=0.2009。

p1的p(pa<1/2)

最大,p(pa<1/2)>1/2,max(pa)<1。p2的p(pa<1/2)

最小,且剛好可以作為原來pa<1/2時的替換,但m繼續增大時,二者pa<1/2的區域有重合。直接從p2來看,sa-sb=p(r―q),r<q時,也就是r<1/2―p/2時,對b是有利的。但結果表明在p=0.25附近有另一條分界線。p3直觀上也是在p>r時對b有利;另一條分界線在q=0.15附近。對於p4,sa―sb=p^2―q^2=(1―r)(2p+r―1),r<1―2p

時sa<sb,而實際上主要在r<0.5時才有pa<1/2。

所以,如果隨機地選擇一組pr,按照(―)<(=)<(+)<(―)得到的置換方式是最合理的,而相反的置換方式是最不合理的。

Horsemeet (勝負的概率)

原題 題意 8 8的棋盤,已知兩個馬 走日,無馬腳,每次往各個可行方向走的概率相同 的位置,黑馬先走,吃法同中國象棋,問黑馬贏的概率大還是白馬 解析 直接暴力每次走完後落在64個格仔上的概率 設 當前由v0 v1 v 0 to v 1 v0 v1 v0 v 0v0 有kk k個方向可以走,當前馬的概...

閒逸遊戲態度決定勝負,安全決定未來!

2019年12月27日,公安部官方 正式公布閒逸遊戲通過國家資訊系統安全等級保護 認證,這標誌著閒逸遊戲在軟體能力成熟度和專案安全水平等方面均已達到國家審核標準,位居行業前列。國家資訊系統安全等級保護認證是中國權威的資訊產品安全等級資格認證,由公安部依據國家資訊保安保護條例及相關制度規定,按照管理規...

挖雷遊戲的概率

程式設計之美最後一題 挖雷遊戲的概率 沒附答案,有一則腳注雲 此題適合matlab使用者解答 頗感有趣.題目說,一局16 16的掃雷遊戲剛開始,只翻開了兩格,分別顯示數字1和2,如下圖所示 只畫出了3 5的區域性示意圖 設地雷總數從10逐漸增加到240,請分別作出圖中a,b,c三處為地雷的概率曲線....