Optimising Monte Carlo simulation

9 次查看(过去 30 天)
Johan Burger
Johan Burger 2020-12-7
评论: Johan Burger 2020-12-10
I am trying to run a Monte Carlo simulation on a very complex equation (19 input variables) at about 1-10k iterations. Some of the inputs remain constant throughout the computation, while others (8 variables) are randomised at each iteration using the norminv function and a random probability. As you might imagine, this simulation becomes very expensive as the amount of iterations are increased.
Presently, I am using the parfor function on a 4-core laptop with each run needing around 5min per 1000 iterations. The 8 variable inputs are recalculated at each iteration and then passed to a function that calculates the final answer (although I previously had this in the body of the loop and it didn't make much difference).
My question is, how can I optimise this computation? I would need to run several of these simulations for my project and would like to trim down the time.

回答(1 个)

Jeff Miller
Jeff Miller 2020-12-7
Some suggestions--hopefully not a waste of your time:
  1. Use the profiler to find out where time is spent, so you can focus your speed-up efforts on those portions of the code.
  2. It sounds like 11 of your variables are fixed across all iterations. Maybe you can compute pieces of your very complex equation that use those variables just once in advance, saving yourself recomputation of those same values at each iteration.
  3. "randomised ...using norminv and a random p" It's probably faster to just generate a random number directly rather than generating p and then looking up the corresponding normal.
  4. "randomised at each iteration..." Its probably faster to generate & store vectors of 1-10k random values before starting the iteration process, and then using the stored random value for each iteration. That cuts down on function calling overhead because you only call the random function(s) once rather than 1-10k times.
  4 个评论
Johan Burger
Johan Burger 2020-12-9
Thank you Jeff. I have thought about my problem and have decided to approach it from another angle. Thanks
Johan Burger
Johan Burger 2020-12-10
Turns out the problem was that I was using the symsum function and calling it 3-4 times per simulation. Instead I just used normal summation and it drastically increased the speed of computation!

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Parallel Computing 的更多信息

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by