Antithetic Variable(对偶变量法)

 
对偶变量
 

🧩 一、核心思想

在蒙特卡洛模拟中,我们通常通过生成独立随机样本 ( ) 来估计期望:
其方差为
目标:在样本量 ( n ) 固定的情况下,降低估计量的方差。
Antithetic Variable方法就是通过引入负相关的样本来抵消波动,从而降低方差。
 

🧠 二、基本原理

设 ( ),我们要模拟某个函数 ( ) 的期望:
Antithetic变量法的关键是:
同时使用 ( U ) 和 ( 1 - U ) 作为输入,而不是两个独立的 ( )。
于是估计量改写为:
这样做的好处是:
  • () 与 ( ) 负相关
  • 如果 ( f ) 是单调递增函数,则 ) 与 ( ) 也负相关
  • 两者求平均后,可以部分抵消波动。
直觉:如果 ( ) 在某次模拟中取了偏大的值,那么 ( ) 很可能取偏小的值,二者平均更稳定。

🧮 三、数学解释

估计量方差:
展开:
由于负相关,,因此方差下降。

🎯 四、举例说明

🌰 示例:估计 ( )

普通蒙特卡洛估计:
对偶变量法:

对比直觉:

平均值
0.1
0.9
1.105
2.46
1.78
0.8
0.2
2.23
1.22
1.73
→ 波动被削弱。

📉 五、代码示例

import numpy as np # 估计 E[e^U], U~Uniform(0,1) n = 10000 U = np.random.rand(n) # 普通蒙特卡洛 mc_est = np.mean(np.exp(U)) # 对偶变量 anti_est = np.mean((np.exp(U) + np.exp(1-U)) / 2) # 理论值 true_val = np.e - 1 print(f"True Value: {true_val:.6f}") print(f"Standard MC estimate: {mc_est:.6f}") print(f"Antithetic MC estimate: {anti_est:.6f}") # 比较方差 num_trials = 1000 mc_var = np.var([np.mean(np.exp(np.random.rand(n))) for _ in range(num_trials)]) anti_var = np.var([np.mean((np.exp(U := np.random.rand(n)) + np.exp(1-U)) / 2) for _ in range(num_trials)]) print(f"Var(MC): {mc_var:.6e}") print(f"Var(Antithetic): {anti_var:.6e}") print(f"Variance Reduction Ratio: {mc_var / anti_var:.2f}")
 

🔍 六、应用场景

  • 期权定价(Black-Scholes):在模拟随机路径时,用 ( Z ) 和 ( -Z ) 生成镜像路径。
  • 置信区间估计:减少估计不确定性。
  • 积分估计:对单调函数积分时尤其有效。

总结一句话:
Antithetic Variable 方法通过使用互为镜像(负相关)的随机样本,使得模拟结果波动互相抵消,从而降低蒙特卡洛估计的方差,提升精度。