蒙特卡罗方法 蒙特卡洛、Monte Carlo、随机模拟
把牌反复随机洗发上万次,用命中的比例来估算概率。
蒙特卡罗方法是一种用随机模拟来估算概率的办法。当一个问题的精确公式太难写,就干脆让计算机把过程重复做很多次:比如把整副牌洗匀、发牌,看这次有没有出现顺子,记一笔;这样跑上几万次,出现顺子的次数除以总次数,就是顺子概率的近似值。名字来自摩纳哥的蒙特卡罗赌场,取的就是「靠随机」这层意思。
它的价值在于绕开了复杂的数学推导。顺子要求点数连续、连对要求连续点数各有两张、飞机要求连续点数各有三张,这些都和牌点的相邻关系纠缠在一起,写成封闭公式非常容易出错。改用模拟,逻辑就是「发一手、看一眼、记一次」,直观又不容易搞错。
要注意的是模拟结果带有随机波动,跑的次数越多越准,但小数点后一两位每次可能不一样,所以它给的是估计值而不是精确解。跑得快、掼蛋里算顺子、连对、飞机这类概率常用它;而炸弹这种能写出组合公式的,一般还是用容斥原理算精确值。
关于蒙特卡罗方法的常见问答
为什么每次算出来的概率略有不同?因为它靠随机发牌抽样,几万次的命中比例本身带统计波动,所以重复算会在小数点后一两位上下浮动。想更稳就把模拟次数加大。
模拟的结果准吗?跑的次数足够多时相当接近真实值,一般几万次对牌局判断已经够用。它是估计值,追求绝对精确的场合才需要公式解。
什么时候用它、什么时候用公式?能写出干净组合公式的(如炸弹)用容斥原理算精确;顺子、连对、飞机这类和点数连续相关、公式繁琐的,用蒙特卡罗模拟更省心。