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