吾爱光设

 找回密码
 注册
会员须知
会员须知
实用帮助
实用帮助
查看: 1403|回复: 0

Wolfram 分析:如何在风险中获胜——精确概率

[复制链接]
  • TA的每日心情
    奋斗
    2022-4-11 09:15
  • 签到天数: 38 天

    [LV.5]常住居民I

    542

    主题

    140

    回帖

    6

    积分

    小白

    积分
    6
    发表于 2023-6-21 10:09 | 显示全部楼层 |阅读模式

    经典的棋盘游戏 Risk 涉及通过赢得使用骰子进行的战斗来征服世界。网络上有很多地方可以根据每个玩家拥有的军队数量找出赢得战斗的几率。然而,我所看到的所有这些都是通过蒙特卡罗模拟来实现的,因此本质上是近似的。Wolfram 语言使计算准确的值变得如此容易,以至于我忍不住一次性地计算了一遍。
    以下是基本战斗规则:进攻方最多可以选择三个骰子(但必须至少比骰子多一支军队),防守方最多可以选择两个(但必须至少拥有两支军队才能使用两个)。为了获得最大的获胜机会,您总是尽可能使用最多的骰子,因此我将忽略其他情况。两名玩家同时掷骰子,然后将双方最高的骰子配对,并且(如果双方都至少掷出两个骰子)次高的骰子配对。最高的骰子会杀死一支军队,在平局的情况下,进攻方是输家。重复这个过程,直到一方军队用完为止。
    所以我的目标是创建一个函数 pBattle[a,d],它返回战斗最终以攻击者获胜的概率,假设攻击者以 a 支军队开始,而防御者以 d 支军队开始。
    我首先编写基本的游戏规则。主要的情况是双方都有足够的军队来至少用两个骰子进行战斗。单轮战斗有三种可能的结果。攻方两胜两败,或双方各输一军。因此,赢得这场战斗的概率是被杀死的军队被移除后获胜概率的总和乘以该结果的概率。
    我们还必须涵盖这样一种情况,即任何一方的军队都已不足,而且只有一个游戏棋子处于危险之中。
    这建立了一个递归定义,根据战斗后续阶段的概率来定义我们所有的战斗概率。一旦阻止我们重复计算这些值。我们只需要用战斗结束规则来终止这个递归。如果攻击者只有一支军队,他就输了(因为他的军队必须多于骰子),所以我们的获胜概率为零。如果我们的对手已经用完了军队,那么攻击者就赢了。
    现在我们必须计算出五个单独攻击结果的概率:pWin2、pWin1Lose1、pLose2、pWin1 和 pLose1。
    当使用两个或三个骰子时,我们可以将分布描述为 DiscreteUniformDistribution 的 OrderDistribution,因为我们总是希望将最高的掷骰子配对在一起。
    例如,这是该分布的一个结果;由于 OrderDistribution 部分,第二个数字将始终是最大的。
    单模情况只是均匀分布;无论好坏,我们的玩家都必须使用该值。然而,为了编程方便,我将描述两个数字的分布,但我们永远不会看第一个。
    所以现在两次获胜的概率是攻击者的骰子都大于防御者的骰子。防御者必须使用两个骰子,而攻击者可以使用两个或三个。
    两次失败的概率也有类似的定义。
    剩下的就是平局概率。
    单军作战可能是因为进攻方缺乏军队,也可能是因为防守方缺乏军队。无论哪种方式,我们都只查看分布的最后一个值。
    而 pLose1 只是剩下的情况。
    我们已经完成了。剩下的就是使用该函数。如果攻击者从 18 支军队开始而防御者只有 6 支军队,这里是准确的(假设骰子公平,没有作弊!)获胜的概率。
    我们可以将其近似为 100 位小数。
    我们可以快速枚举许多不同起始位置的概率。
    以下是仅保留 20 位小数的相应数值。
    您可以下载更多排列表,其中包含精确数字 ,和大约为 20 位数字 。
    当然,这种级别的准确性是毫无意义的。如果看 23 对 1 的战斗,失败的概率大约是您在第一次掷骰子时死亡的概率的一半,当然比您的对手把棋盘扔到空中并拒绝再玩一次的概率要小得多。


    附录:生成截过图的代码


    购买软件/免费试用
    【13.2.1中英文 Wolfram 软件】请评论留言申请









    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    ×
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )

    GMT+8, 2024-11-23 05:00 , Processed in 0.125000 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表