您应该在风险防御中掷1或2个骰子吗?

上周我和几个朋友一起玩冒险游戏,我们就防御策略进行了一些辩论。 特别是,在由两支或更多支部队防御时应该掷出的骰子数量。 对于不了解风险规则的人,假设攻击者所在的领土上有四支或以上的部队,则攻击者可以掷出最多三个骰子,而防御者则可以掷出最多两个骰子。他们有两个或更多的防御单位。 然后,防御者将他们的最高掷骰与攻击者的最高掷骰进行比较,将他们的第二高掷骰(如果掷出两枚)与攻击者第二高掷骰(如果攻击者掷出两三枚)进行比较。 玩家每场比赛都会输掉一个单位,而对手的掷骰更好,因此,如果防守者掷出两个骰子,可能的结果是攻击者输掉两个,防守者输掉两个,或者每个玩家输掉一个。 但是,如果防御者仅掷出一枚,则他们可能会损失一个单位,或者攻击者会损失一个单位。 重要的是,后卫赢得了联系。

淘汰两个进攻单位作为防守者显然很令人兴奋,但是由于最初是如何设置董事会的,您通常只用两个单位进行防守,因此在一局中输掉两个都是毁灭性的。 但是我的直觉是,由于赢得了联系,后卫如果与掷骰子一样多地掷骰子,则有更好的机会消灭至少一个攻击单位。 另一种思考方式是,一次掷出两枚只能让攻击者三掷胜过防御者的两掷,而如果防御者一次只掷出一局则可以得到六掷。 但是,当然,我的朋友不接受这些论点作为无可争辩的事实,因此我离开桌面进行任务,以证明两个比一个更好。

我决定采用蛮力方法,而不是进行分析验证,因为我的统计技能很生疏,而且似乎更容易理解,因此更具说服力。 我的代码在下面,但是从本质上讲,该程序只是针对3v1争夺战和3v2争夺战的每种可能结果汇总了不同的结果。 我想在某个时候坐下​​来并进行实际证明,也许想出一个关于任何n对m战斗的几率的通用公式。

事实证明,防守者应该掷两个骰子是正确的,尽管预期结果相当相似。 如果防御者掷出一个骰子,则其预期结果将损失0.32个单位;如果防御者掷出两个骰子,则其预期结果将损失0.16个单位。 因此,一个骰子几乎是两个骰子的两倍,但是绝对数的差异很小。 有趣的是,如果您使用具有16个或更多边的骰子,则防御者最好只掷一个骰子。

这是导致各种结果的掷骰结果总数(攻击者在所有这些情况下都掷三个骰子)。

防御者掷出一死,杀死一名攻击者:441
防御者一死一败:855

防御者掷出两个死亡,杀死两个攻击者:2275
防御者掷出两个骰子,分裂:2611
防守者丢了两个死,输了两个部队:2890

这是我的(仓促编写,未优化的)代码:

 导入heapq 
数字= [1,2,3,4,5,6]#0索引是后卫获胜的结果数
#1索引是攻击者获胜的结果数
one_die = [0,0]#0th索引是攻击者输掉两个结果的数量
#1st索引是分割数
#2指数是防守方输掉2场比赛的结果数
two_die = [0,0,0]对于a1的数字:
对于a2的数字:
对于a3的数字:
top_two = heapq.nlargest(2,[a1,a2,a3])
对于数字d1:
#如果后卫掷出一枚,则将其与最高攻击命中率相匹配
如果(d1> = top_two [0]):
one_die [0] + = 1
其他:
one_die [1] + = 1
对于d2的数字:
sorted_d = heapq.nlargest(2,[d1,d2])
ind = 0
#如果后卫掷出2个,按顺序排列骰子
对于[0,1]中的i:
如果(sorted_d [i] <top_two [i]):
ind + = 1
two_die [ind] + = 1ev_one =(one_die [0] + one_die [1] *-1)/ sum(one_die)
打印(ev_one)
ev_two =(two_die [0] * 2 + two_die [2] * -2)/ sum(two_die)
打印(ev_two)

PS显然,骰子既是单词的单数还是复数,并且“ die”不再是单数。