如果你想在游戏中获胜(即获得更多的利益),你需要根据场景选择合适的游戏策略。 本文将通过一个生动的例子并结合定量分析来说明混合策略在零和博弈中的运用,并给出以下结论:
让自己变得更强,是增加游戏成功概率的基础。 根据自身利益最大化的能力来组合游戏策略。
如果能力不够,游戏策略只是花招; 如果策略不够,能力的实际效果就会大打折扣。
点球——经典的零和游戏
足球场上的点球是典型的零和博弈场景,球员和守门员的利益完全冲突。 想要进球,除了高超的球技之外,球员还需要一定的欺骗技巧。 例如如图,足球场上守门员在,守门员通过错误的小动作误判了球的方向。 另一方面,如果守门员想要防守成功,他需要识破球员的欺骗,预测球的方向,并扑向它。 球实际射出的方向。
守门员等到球员射门后再决定行动就为时已晚。 守门员必须在射门前进行扑救。
由于守门员和球员都熟悉对方的力量和踢球/防守习惯,如果球员擅长在左路踢球,那么守门员就会加强左路的防守;如果球员擅长在左路踢球,那么守门员就会加强左路的防守; 但球员知道守门员会这么想,所以他故意踢右边……,猜疑链可以是无限的。 再这样下去,最终就会变成一场“我猜你猜”,看谁更聪明的游戏。
混合策略
如果追随嫌疑链似乎是无休无止的,事实上每个玩家都知道该怎么做。 他们如何最大化自己的利益(增加进球的概率)? 我们通过定量分析来说明这一点。 下表给出了球员和守门员的行为组合以及各自的成功概率:
捍卫左派
捍卫权利
向左踢
(25, 75)
(75, 25)
右踢
(75, 25)
(25, 75)
单元格中的两个数字分别代表球员进球概率和守门员防守成功概率。 两者之和等于100%。 例如,左上角第一个单元格表示当球员在左侧踢球且守门员在左侧防守时,该球员得分。 概率为25%,其他细胞类似。
从上表不难看出,如果球员成功“欺骗”守门员,进球的概率为75%; 如果守门员“预测”该球员踢球的方向,则进球的概率为25%。 当然,从玩家的角度来说,希望一直能成功欺骗守门员,使进球概率保持在75%,但这只是一厢情愿,因为守门员有自己的主观能动性,会想尽办法识破玩家的伎俩。
此时,球员正站在球门前,准备主罚点球。 他应该向左踢还是向右踢? 或者有什么策略可以最大化球员进球的概率? 答案是肯定的。 博弈论告诉我们,此时球员应该采取混合策略,按照一定的概率随机选择向左打还是向右打,以迷惑守门员。
如何确定左打或右打的比例? 显然你不能一直在左边踢球,也不能一直在右边踢球,因为这会让守门员知道这种模式。 在实践中,球员应该采取如下行动:选择一个比率,无论守门员是向左防守还是向右防守,进球的概率都保持相同。
为了简化解释过程,我们将上表形式化如下:
捍卫左派
捍卫权利
向左踢
一、1-a
b, 1-b
右踢
c, 1-c
d, 1-d
令p代表球员在左侧踢球的概率,1-p代表在右侧踢球的概率。 最佳比例计算公式为:
E = a * p + c * (1 - p) = b * p + d * (1 - p) \\ p = \frac{d - c}{a+dcb}
将表1中的基本进球概率代入公式,可得p=50%,E=50%,即玩家应以50%的概率随机选择在左边打球(并随机选择在左边打球)右侧概率为 1-50%)。 在此策略下最终进球的预期为50%。 请注意,根据上表所示的基本概率,可以计算出,球员采用该比例的混合策略后,无论守门员是防守左侧还是右侧,球员进球的概率仍为不变,始终是50%!
请注意,这里的50%没有特殊含义,只是根据上表计算的结果。 如果变量a、b、c、d中的任何一个发生变化,计算结果也会发生相应的变化。 混合策略的解空间a和b
我们知道球员和守门员的技能并不是一成不变的。 两人都可以通过训练加强自己的进攻和防守能力,也可能因为伤病等因素而导致技术下降。 如果球员打左路的技术得到提升,会对比赛结果产生什么影响? 上表中,向左踢球能力的增强会影响a和b的值。 我们用数值来计算对于a和b的任意组合,进球期望E的变化以及向左踢球的概率:
进球期望 E(彩色点)和向左踢球的概率 p(灰色点)
如上图所示:
一个和c
使用数值计算对于a和c的任意组合,进球期望E的变化以及向左踢球的概率p。
目标E的期望
进球期望 E(彩色点)和向左踢球的概率 p(灰色点)的总结
混合策略是应对零和博弈的有效策略。 如果让对手看清我们的真实选择对我们不利,我们可以通过随机选择和记住替代方案来增加成功的概率。 随机选择概率的原则是选择一个概率比,在这个概率比下,无论对手选择什么策略如图,足球场上守门员在,我们的平均利润保持不变。
同时,我们通过定量分析来解释:
让自己变得更强,是增加游戏成功概率的基础。 根据能力组合游戏策略以最大化您自己的利益。
如果能力不够如图,足球场上守门员在,游戏策略只是花招; 如果策略不够,能力的实际效果就会大打折扣。
参考书:《有趣的博弈论》
附录:
from matplotlib import pyplot as plt
import numpy as np
def cal_p(a, b, c, d):
p = (d-c)/(a + d - c - b)
return p
def cal_E(a, c, p):
E = a * p + c * (1 - p)
return E
a, b, c, d = 0.25, 0.75, 0.75, 0.25
i = 0
aa = []
cc = []
ee = []
pp = []
step = 3
for a in range(0, 101, step):
z = []
print("a=%d" % a)
a = float(a) / 100
for c in range(0, 101, step):
c = float(c) / 100
if a > b:
continue
if c < d:
continue
p = cal_p(a, b, c, d)
E = cal_E(a, c, p)
print("%d a=%f, c=%f, p=%f, E=%f" % (i, a, c, p, E))
i += 1
aa.append(a)
cc.append(c)
ee.append(E)
pp.append(p)
aa = np.array(aa)
cc = np.array(cc)
ee = np.array(ee)
pp = np.array(pp)
ax = plt.axes(projection='3d')
ax.scatter3D(aa, cc, pp, c=pp, cmap='Greys')
ax.scatter3D(aa, cc, ee, c=ee)
ax.set_xlabel("a")
ax.set_ylabel("c")
ax.set_zlabel("E & p")
plt.show()