什么时候应该使用蒙特卡罗方法?
例如,为什么 Joel 决定使用 Monte-Carlo 方法进行基于证据的调度,而不是有条不紊地处理过去一年的所有用户数据?
当问题的维数对于传统方案来说太高时,通常使用蒙特卡罗方法。Persi Diaconis 的《马尔可夫链蒙特卡洛革命》是一篇关于该主题的精彩介绍性论文。
假设您想估计一些感兴趣的数量。在 Joel 的示例中,您要估计“发货日期”。在大多数此类情况下,存在影响我们估计的随机因素。
当您有一个随机量时,您通常想知道它的平均值和标准差,以便您可以采取适当的措施。在简单的情况下,您可以将数量建模为标准分布(例如,正态分布),其中存在平均值和标准差的分析公式。但是,存在很多不存在解析公式的情况。在这种情况下,我们求助于模拟,而不是平均值和标准差的解析解。这个想法是:
第 1 步:使用适当的分布生成影响感兴趣数量的因素
第 2 步:计算感兴趣的数量
多次重复步骤 1 和 2,并计算您想知道的经验平均值和标准差。
以上是目前为止蒙特卡洛应用的典型应用。请参阅 Jarrod 提供的 wikipedia 链接,了解几个这样的应用程序和一些没有内在随机性的有趣应用程序示例(例如,pi 的估计)。
维基百科有一篇关于蒙特卡罗模拟方法的好文章。我曾多次使用过蒙特卡罗——简而言之,当尝试使用几乎随机的样本集预测结果时,MC 方法往往会给出准确的答案,而且通常有人会使用直觉来尝试猜测趋势。不幸的是,试图解释 MC 方法非常困难,所以请查看这篇文章。
有时检查所有选项简直令人望而却步。
因为在调度编程任务时估计通常分布相当广泛,所以对它们进行统计处理更有意义。
如果我们采用一个需要 100 项任务的项目,那么估计的误差将趋于均匀,您最终会得到一个分布,该分布将项目完成的可能性显示为一个范围。
它还规避了一些严重的问题,例如任务缓冲和学生综合症,进一步扭曲了结果。