主要内容

提高性能的蒙特卡罗模拟并行计算

这个例子展示了如何提高蒙特卡罗模拟的性能使用并行计算工具箱™。

考虑一个几何布朗运动(GBM)过程中,你要将替代资产价格动态。具体来说,假设您想要包括一个时变短期汇率波动表面。过程模拟是写成

d 年代 ( t ) = r ( t ) 年代 ( t ) d t + V ( t , 年代 ( t ) ) 年代 ( t ) d W ( t )

对股票价格S (t),回报率r (t)、波动性V (t, S (t)),布朗运动W (t)。在这个例子中,回报率是一个确定性的函数的波动是一个函数的时间和时间和当前的股票价格。回报和波动性都定义在离散网格,这样中间值是通过线性插值获得。例如,这种模拟可以用来支持交投清淡的定价选择。金宝app

包括无风险的时间序列短期利率,假设你获得以下确定的费率过程作为时间的函数。

* = [0 0.25 0.5 1 2 3 4 5 6 7 8 9 10];%的年率= (0.1 0.2 0.3 0.4 0.5 0.8 1.25 1.75 2.0 2.2 - 2.25 2.50 - 2.75)/ 100;

假设你获得以下表面波动的列对应简单相对moneyness,或执行价格的现货价格的比率,和它的行对应时间到期,或男高音。

表面= [28.1 25.3 20.6 16.3 11.2 6.2 4.9 4.9 4.9 4.9 4.9 4.9 22.7 19.8 15.4 12.6 9.6 6.7 5.2 5.2 5.2 5.2 5.2 5.2 21.7 17.6 13.7 11.5 9.4 7.3 5.7 5.4 5.4 5.4 5.4 5.4 19.8 16.4 12.9 11.1 9.3 7.6 6.2 5.6 5.6 5.6 5.6 5.6 18.6 15.6 12.5 10.8 9.3 7.8 6.6 5.9 5.9 5.9 5.9 5.9 17.4 13.8 11.7 10.8 9.9 9.1 8.5 7.9 7.4 7.3 7.3 7.3 17.1 13.7 12.0 11.2 10.6 10.0 9.5 9.1 8.8 8.6 8.4 8.0 17.5 13.9 12.5 11.9 11.4 10.9 10.5 10.2 9.9 9.6 9.4 9.0 18.3 14.9 13.7 13.2 12.8 12.4 12.0 11.7 11.4 11.2 11.0 10.8 19.2 19.6 14.2 13.9 13.4 13.0 13.2 12.5 12.1 - 11.9 11.8 - 11.4)/ 100;男高音= [0 0.25 0.50 0.75 1 2 3 5 7 10);%的年moneyness = [1 0.25 0.5 0.75 0.8 0.9 1.10 1.25 1.50 2 3 5];

设置仿真参数。以下假设标的资产的价格最初等于执行价格标的资产的价格是模拟每月的10年,或者120个月。作为一个简单的例子,100年样本路径模拟。

价格= 100;罢工= 100;dt = 1/12;NPeriods = 120;NTrials = 100;

再现性,其默认设置随机数发生器,画出高斯随机变量驱动仿真。生成随机变量没有必要产生并行计算的性能改进,但是这样做允许生成的模拟路径匹配的传统(即non-parallelized)模拟。同时,生成独立的高斯随机变量作为输入也保证所有模拟路径是独立的。

rng默认的Z = randn (NPeriods 1 NTrials);

创建回报和波动性函数和使用的“绿带运动”模型“绿带运动”。注意时间的回报率是一个确定性的函数,因此只接受模拟时间作为它的输入参数。相比之下,波动必须占moneyness和是一个函数的时间和股票价格。此外,由于波动表面到期被定义为时间的函数,而不是模拟时间,波动函数减去当前仿真时间从最后一次的价格过程模拟(10年)。这将确保作为其终值仿真时间的临近,到期时间的波动表面趋于零。尽管可以使用更复杂的回报和波动性函数如果需要,以下假设简单的线性插值。

μ= @ (t) interp1(时间、利率、t);σ= @ (t, S) interp2 (moneyness男高音,表面,S /罢工,男高音(结束)- t);mdl =“绿带运动”(μ、σ“StartState”、价格);

模拟底层几何布朗运动的路径没有并行化。

tStart =抽搐;路径= simBySolution (mdl NPeriods,“NTrials”NTrials,“DeltaTime”,dt,“Z”,Z);time1 = toc (tStart);

模拟路径并行使用parfor(并行计算工具箱)循环。为用户授权访问并行计算工具箱,下面的代码段自动创建一个平行的池使用默认的本地配置文件。如果需要,这种行为可以改变首先调用parpool(并行计算工具箱)函数。如果一个平行池不是已经创建,以下模拟可能会低于之前的模拟并行化。在这种情况下,重新运行下面的仿真评估并行的真正好处。

tStart =抽搐;parPaths = 0 (NPeriods + 1, 1, NTrials);parfori = 1: NTrials parPaths (:,:, i) = simBySolution (mdl NPeriods,“DeltaTime”,dt,“Z”Z (:,:, i));结束time2 = toc (tStart);

如果你检查任何给定的路径获得没有并行处理与并行化对应的路径,你会发现他们是一样的。此外,尽管相对性能不同,获得的结果与并行化通常会导致一个明显改善。评估性能改进,检查每种方法在秒和运行时加速从模拟并行路径。

time1%常规仿真运行时间,以秒为单位time2%并行仿真的运行时间,以秒为单位加速= time1 / time2%加速因子
time1 = 2.3663 = 6.1329 time2 = 2.5918的加速效果

另请参阅

||||||||||||||||||||

相关的例子

更多关于