如何解決有規則的拿棋子的博弈論問題?

時間 2021-06-12 01:05:19

1樓:

後手必勝。

因為三種操作都不改變棋子總數的奇偶性,所以只有當左右兩堆棋子數量都為零時無合法操作,即當且僅當你執行完操作後無棋子時獲勝,以此倒推即可得是否有必勝的策略。以左邊棋子數為橫座標、右邊棋子數為縱座標繪圖,可得下圖,其中紅色代表當自己操作完成後有該座標表示棋子數時有必勝策略,藍色代表當自己操作完成後有該座標表示棋子數時對方有必勝策略。

如圖所示,先手操作後必落在藍點上,此時後手選擇並在後面一直選擇能落在紅點上的操作即可。

# -*- coding: utf-8 -*-import

numpy

asnp

import

matplotlib.pyplot

aspltm,

n=8,

8net=np

.zeros((m

+n+5

,n+5

))foriin

range((m

+n)//

4+1):

net[4*

i,0]

=1net[4*

i+2,

0]=-

1net[4

*i+1

,1]=

-1net[4*

i+3,

1]=-

1foriin

range(n

//2+1

):net[0

,2*i

]=1net[1

,2*i

+1]=

-1fori

inrange(4

,m+n

+1,2

):forjin

range(2

,n+1

):if

i>j:

flag

=net[i

-j+1

,j-1

]+net[i-

j-1,

j-1]

+net[i

-j-2

,j]if

flag

==-3

:net[i

-j,j

]=1else

:net[i

-j,j

]=-1

fori

inrange(n

+1):forjin

range(m

+n+1

):if

net[j,

i]==-1

:plt

.scatter(i

,j,color

='b'

,marker

='o')if

net[j,

i]==1

:plt

.scatter(i

,j,color

='r'

,marker

='o'

)x_ticks=np

.linspace(0

,8,9

)y_ticks=np

.linspace(0

,16,17

)plt

.xticks

(x_ticks

)plt

.yticks

(y_ticks

)plt

.grid

()plt

.xlabel(u

'左邊棋子數'

,fontproperties

='SimHei'

)plt

.ylabel(u

'右邊棋子數'

,fontproperties

='SimHei'

)plt

.show()

在兩人拿棋子的博弈論問題中怎麼樣獲勝?

tosearchfor 從簡單問題開始研究,首先研究兩堆球的問題。設有兩堆球,球數分別為A和B,其中A 0,B 0且A B均為自然數。當A 1,B 0,先起手的拿走B數量的球,後手的只剩A 1個球拿 因此,當A 1,B 0,先手必勝。當A 1,B 1時,先手的可拿走A數量的球,先手必勝。那麼,當A ...

如何理解博弈論對經濟學的影響?

caoglish 亞當斯密說 市場有隻手,但我看不見。馮諾依曼說 我覺得這隻手可能在博弈論裡。古諾說 這不就是我之前看到的那只手嗎。 竹杖笀鞋 這麼說吧 現代微觀經濟學的重要理論工具就是博弈論,它不但繼承了用嚴格數學語言闡述理論,而且可以通過推演得出一些出乎意料又合情合理的結論。相比之下,巨集觀經濟...

如何從博弈論的角度理解 黑暗森林法則 ?

Dawn Lee 我們來建構乙個簡單的博弈論模型簡單分析一下,假定文明 A B 在宇宙相遇,我們無法第一時間了解對方的具體情況 進化水平,科技水平等 我們需要採取的策略為攻擊 不攻擊 如果一方發動攻擊而另一方不發動攻擊,則不發動攻擊的一方由於被毀滅得0分,而發動攻擊的一方因為消除了潛在威脅且有可能佔...