MCM520 ← 资料站首页 蒙特卡洛模拟 · 深度手册 打开交互阅读器 →

蒙特卡洛模拟 · 深度手册

分类:优化类 | 难度:★★☆ 进阶 | 编号:montecarlo

一、这是什么(一句话用途)

解析难求时用随机采样估计(风险 / 积分 / 排队)

二、核心思想

蒙特卡洛(Monte Carlo)方法是一种"以随机取胜"的数值技术:当问题解析解难以求得(高维积分、复杂随机系统、风险分布)时,就靠生成大量随机样本、用统计频率/均值去逼近真实量。它的误差只与样本量有关(与维度无关),因此在高维问题中反而比网格积分更具优势。常见应用包括风险价值(VaR)估计、复杂系统可靠性、随机优化与贝叶斯后验采样。

三、数学原理与推导

设要估计量 θ=E[X]\theta=E[X],X1,…,XNX_1,\dots,X_N 为独立同分布样本。蒙特卡洛估计:

θ^=1N∑i=1NXi \hat{\theta}=\frac{1}{N}\sum_{i=1}^{N}X_i

由中心极限定理,N(θ^−θ)→dN(0,σ2)\sqrt{N}(\hat{\theta}-\theta)\xrightarrow{d}N(0,\sigma^2),故近似 1−α1-\alpha 置信区间:

θ^±zα/2σN \hat{\theta}\pm z_{\alpha/2}\frac{\sigma}{\sqrt{N}}

其中 σ2=Var(X)\sigma^2=\mathrm{Var}(X)。关键结论:误差以 1/N1/\sqrt{N} 的速度下降,与问题维度无关——这正是它在高维积分中优于确定性方法的原因。减小方差的手段有重要性采样、分层抽样、控制变量法等。

四、建模 / 求解步骤

  1. 建随机模型(分布)
  2. 大量独立采样
  3. 统计目标量(均值 / 分位)
  4. 估计误差(标准差 / √N)
  5. 收敛后停止

五、关键公式速查

E[X]≈(1/N)ΣX_i;误差 ∝ 1/√N

六、典型示例

项目工期不确定性 → 模拟万次得完工概率分布。

完整算例(数字演示,照着算一遍)

场景:估计 π。单位正方形内投 N=10⁶ 点,落在 x²+y²≤1 的比例 p≈0.7854。

结果:π≈4p≈3.1416。

结论:蒙特卡洛用随机采样近似积分/概率,误差 O(1/√N)。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","montecarlo.csv"))
# 估算项目在 30 天内完工的概率:工期~三角分布(8,15,25)
lo,ml,hi=8,15,25
rng=np.random.default_rng(5)
N=20000
u=rng.random(N); v=rng.random(N)
# 三角分布采样
def tri(u):
    if u<(ml-lo)/(hi-lo): return lo+np.sqrt(u*(hi-lo)*(ml-lo))
    return hi-np.sqrt((1-u)*(hi-lo)*(hi-ml))
sample=np.array([tri(ui) for ui in rng.random(N)])
print("平均工期=%.2f 天"%sample.mean())
print("30 天内完工概率=%.3f"%( (sample<=30).mean() ))

配套文件:py_montecarlo.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% 蒙特卡洛示例(MATLAB/Octave)
lo=8; ml=15; hi=25; rng(5); N=20000;
u=rand(N,1);
tri = @(x) (x<(ml-lo)/(hi-lo)).*(lo+sqrt(x*(hi-lo)*(ml-lo))) + ...
            (x>=(ml-lo)/(hi-lo)).*(hi-sqrt((1-x)*(hi-lo)*(hi-ml)));
sample=arrayfun(tri,u);
fprintf('平均工期=%.2f 天, 30天内完工概率=%.3f\n', mean(sample), mean(sample<=30));

配套文件:m_montecarlo.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

项目工期 30 次采样(三角分布 8/15/25)。用于蒙特卡洛估计平均工期与 30 天内完工概率。

十、常见误区与避坑清单

  • 样本量要够(误差 ∝ 1/√N)
  • 随机数质量
  • 方差大需分层采样

十一、结果怎么解读

均值与置信区间即结果。

十二、常与谁搭配

与马尔可夫 / 排队结合。

十三、论文写作技巧(怎么把它写进论文)

把 蒙特卡洛模拟 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

先把问题「数学化」:决策变量、目标函数、约束条件——这一步写清楚比算法本身更重要。再说明为何用 蒙特卡洛模拟 求解:连续可导用梯度 / 解析法,组合 / 非凸 / 黑箱用启发式(GA / PSO / SA)。

2. 结果怎么写(图表与指标)

放「收敛曲线(迭代 vs 目标值)」+「最优解参数表」+「约束是否满足」三件套。若是多目标,放 Pareto 前沿散点图。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 蒙特卡洛模拟 进行解析难求时用随机采样估计(风险 / 积分 / 排队)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt 蒙特卡洛模拟 to 解析难求时用随机采样估计(风险 / 积分 / 排队). Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

务必说明约束是否全部满足、是否陷入局部最优(可多次随机初始化对比);别把无约束结果当约束最优报。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

将配送中心选址建模为带容量约束的总成本最小化问题,本文采用 蒙特卡洛模拟 求解,得到 5 个选址及其服务分配方案,目标值较贪婪启发式降低 12.4%,且全部约束满足。

We formulate the distribution center location as a total-cost minimization problem with capacity constraints and solve it via 蒙特卡洛模拟, yielding 5 sites and their service assignments. The objective is 12.4% lower than a greedy heuristic while satisfying all constraints.

十四、相关手册(延伸阅读)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。