1 Om Monte-Carlo-simulering Utdrag ur kompendiet MARKOVPROCESSER Tobias Rydén och Georg Lindgren LUNDS UNIVERSITET och LUNDS TEKNISKA HÖGSKOLA Institutionen för matematisk statistik Lund University and Lund Institute of Technology Department of Mathematical Statistics Appendix A Simulering Ordet simulering kommer av latinets simulo som betyder att låtsas. Med simulering menas att man ersätter verkligheten med en matematisk eller fysisk modell och gör beräkningar eller experiment i modellen istället för i verkligheten. En flygsimulator kan t ex vara ett datorprogram som, med hjälp av fysikaliska lagar och matematiska differentialekvationer, efterliknar vad som händer med ett flygplan. Resultatet kan visas antingen på en datorskärm eller i en fullskalemodell av flygplanet. Monte Carlo-simulering har länge varit ett standardhjälpmedel när man vill undersöka egenskaper hos ett komplicerat system, t ex ett kösystem eller en produktionsprocess. Det har helt enkelt varit nödvändigt att tillgripa simulering eftersom det är alltför komplicerat att exakt beräkna t ex risken för en produktionsstörning i en tillverkningsprocess med slumpmässig efterfrågan, oregelbunden tillförsel av råvaror, planerat maskinunderhåll, felfunktion i maskinparken o dyl. Genom att i ett datorprogram efterlikna systemet och med hjälp av slumptal åstadkomma mängder av händelser av olika typ, kan man få en uppfattning om hur systemet beter sig i det långa loppet. I [4] och [7] finns enkla exempel på denna typ av simulering. Men det är inte bara vid undersökning av komplexa system som Monte Carlo-simulering är användbart. I själva verket har man börjat tillgripa simulering även för att beräkna statistiskt intressanta fördelningar, t ex styrkefunktioner för statistiska test. Den statistiska tekniken vid Monte Carlo-simulering har utvecklats mycket i takt med datortekniken, se t ex [17]. När vi i fortsättningen talar om simulering menar vi alltid Monte Carlosimulering med olika former av slump inblandad. A.1 Slumptal och pseudoslumptal Det första man behöver vid (Monte Carlo-) simulering är slumptal, dvs tal som beter sig som om de vore dragna från en bestämd statistisk fördelning. Det finns fysikaliska fenomen som skulle kunna användas för att ge nästan helt slumpmässiga observationer, t ex elektroniskt brus; se [13]. Vid datorsimulering används nästan uteslutande deterministiska algoritmer som ger helt förutsägbara följder 1 APPENDIX A. SIMULERING 2 av tal. Fördelen med detta är att man kan göra om simuleringen med exakt samma slumptal och därigenom studera effekten av att man t ex gör en ändring i det studerade systemet. Nackdelen är att man i regel inte får exakt de fördelningar man önskar sig. Pseudoslumptal En deterministisk följd av tal x0 , x1 , x2 , . . . som har ”tillräckligt slumpmässiga” egenskaper kallas en följd av pseudoslumptal. Algoritmen som genererar talen kallas en slumptalsalgoritm. Vad som menas med ”tillräckligt slumpmässiga” egenskaper får bero på vilka krav man ställer i den aktuella tillämpningen. I det enklaste fallet kan det t ex räcka med att värdena sprider ut sig på ett önskat sätt i ett intervall. I mera komplicerade fall vill man kanske också ställa krav på förekomsten av vissa kombinationer av tal, t ex förekomst av långa sekvenser av växande tal. Det finns en mängd olika test på slumpmässighet, men det är inte lätt att hitta riktigt bra algoritmer för generering av pseudoslumptal, se [16]. Kongruensalgoritmer Den enklaste formen av slumptalsgenerator är den linjära kongruensalgoritmen, xn+1 = (axn + b) mod c, (A.1) dvs xn+1 är lika med den rest man får när man dividerar axn + b med c. Här är a, b och c lämpligt valda heltal. Matlab använder t ex en kongruensmetod baserad på algoritmen xn+1 = (77 xn ) mod (231 − 1), som ger ett heltal mellan 0 och 231 − 2. Efter division med 231 − 1 får man ett pseudoslumptal i intervallet [0, 1). Exempel 1.1. (Mönster i pseudoslumptal) Följande exempel är hämtat ur [15] och visar en av svårigheterna med kongruensmetoden. Eftersom man bildar resten vid division med c, blir slumptalsföljden helt periodisk med perioden (högst) c, och följden upprepas alltså så småningom exakt. Det uppstår emellertid mönster redan i intilliggande par av slumptal. Genererar man slumptal med algoritmen xn+1 = (781 xn + 387) mod 1000 (A.2) kan man få resultat som i Figur A.1a som visar de 500 första paren (xn , xn+1 ). Som synes ligger intilliggande x-värden inte så ”slumpmässigt” utspridda som man skulle önska sig. Med ett enkelt trick kan man erhålla betydligt bättre slumpegenskaper även för en så här enkel algoritm. Man lägger helt enkelt in de av (A.2) genererade slumptalen i en ändlig buffert, och väljer något av talen i bufferten med en annan, liknande algoritm. Figur A.1b visar de 500 första paren när man lagrar APPENDIX A. SIMULERING 3 (a) (b) 1 1 0.8 0.8 0.6 0.6 0.4 0.4 0.2 0.2 0 0 0.2 0.4 0.6 0.8 1 0 0 0.2 0.4 0.6 0.8 1 Figur A.1: (a) De 500 första paren (xn , xn+1 ) med algoritmen (A.2) . (b) De 500 första paren (xn , xn+1 ) enligt (A.2) modifierad med slumpalgoritmen (A.3). xn+1 i en buffert med 20 tal och man väljer ett av de 20 talen med hjälp av ett pseudoslumptal från en annan slumptalsgenerator, un+1 = (π + un )5 mod 1. (A.3) När man valt ett tal ur bufferten fyller man i hålet med nästa tal från algoritmen (A.2). 2 A.2 Allmänna fördelningar Inversmetoden Standardmetoden när man skall generera (pseudo)slumptal från en speciell statistisk fördelning är inversmetoden. Sats 1.1. Låt F (x) vara en fördelningsfunktion och definiera ”inversen” F −1 (y) = inf {x : F (x) ≥ y} . Om U ∈ Rekt(0, 1) så har X = F −1 (U ) fördelningsfunktionen FX (x) = F (x). Bevis: Av definitionen av F −1 (y) följer att F −1 (y) > x om och endast om F (F −1 (y)) > F (x). Dessutom gäller F (F −1 (y)) = y för alla y . Vi beräknar sannolikheten P (X > x), dvs 1 − FX (x) = P (X > x) = P (F −1 (U ) > x) = P (F (F −1 (U )) > F (x)) = P (U > F (x)) = 1 − F (x), dvs FX (x) = F (x). 2 APPENDIX A. SIMULERING 4 Exempel 1.2. Exponentialfördelningen med täthetsfunktion fX (x) = λe−λx för x ≥ 0 och fördelningsfunktionen FX (x) = 1 − e−λx förekommer flitigt i samband med Markovprocesser. Om U ∈ Rekt(0, 1) så är X = −λ−1 ln(1 − U ) exponentialfördelad med väntevärdet λ. Eftersom i detta fall y = FX (x) har inversen x = −λ−1 ln(1 − y) följer detta av Sats 1.1. Man ser det också genom direkt beräkning av P (X ≤ x); observera att 1 − U också är rektangelfördelad i (0, 1) om U är det. 2 En diskret variabel kan man simulera genom ”tabellslagning” eller genom att använda något speciellt trick. Exempel 1.3. En ffg-fördelning (för första gången) med parameter p kan simuleras genom att man helt enkelt genererar slumptal U ∈ Rekt(0, 1) och räknar det antal slumptal, X , man behöver dra för att för första gången få ett värde större än p. Sannolikhetsfunktionen blir pX (k) = (1 − p)pk−1 för k = 1, 2, . . .. 2 Förkastningsmetoden När det är svårt att beräkna inversen F −1 (y) kan förkastningsmetoden (eng. rejection method ) vara ett alternativ. Antag att vi skall generera slumptal X från en fördelning med täthetsfunktionen f (x). Vi vet att arean under kurvan y = f (x) till vänster om linjen x = x0 betyder sannolikheten att X ≤ x0 . Om vi kunde välja en punkt slumpmässigt inom det område som begränsas av x-axeln och kurvan y = f (x) skulle vi få en observation av X . Nu är det inte så lätt att välja ”en punkt slumpmässigt” under en kurva. Hur man gör framgår av följande sats. Sats 1.2. Antag att man kan generera slumptal från en fördelning med täthetsfunktion g(t) (detta kan få ske med vilken tillgänglig metod som helst) och att vi vill generera slumptal från en fördelning med täthetsfunktionen f (t). Antag också att det finns en konstant M > 0 sådan att f (t) ≤ M g(t) för alla t. Följande procedur ger då slumptal med tätheten f (x). (i) Generera x med tätheten g(t) och u ∈ Rekt(0, 1). (ii) Om f (x) < M u g(x) så upprepa (i) och välj nya slumptal. (iii) Om f (x) ≥ M u g(x) så acceptera x som slumptal. Bevis: Den beskrivna proceduren för att generera x och u ger en ”slumppunkt” med koordinaterna (x, M ug(x)), som är vald slumpmässigt under kurvan y = M g(x). Om man bara accepterar de punkter som dessutom hamnar under kurvan y = f (x) har man fått något som är slumpmässigt fördelat under y = f (x). 2 APPENDIX A. SIMULERING 5 Simulering av normalfördelningen Det finns en mängd snabba specialmetoder att ta till när man skall generera slumptal från en standardiserad normalfördelning. En allmän normalvariabel Y ∈ N(m, σ) kan fås som Y = m + σX där X ∈ N(0, 1). Box-Müllers metod: Denna eleganta metod bygger på framställningen av två oberoende normalvariabler i polär form. Om X1 och X2 är två oberoende N(0, 1)-variabler, så gäller att R= q X12 + X22 och θ = arg(X1 , X2 ) är oberoende. Här är tydligen R avståndet från punkten (X1 , X2 ) till origo medan θ är dess argument. Det är lätt att generera två variabler som har de rätta fördelningarna för att fungera som R respektive θ . Om U1 och U2 är oberoende och Rekt(0, 1)-fördelade så gäller nämligen att X1 = cos(2πU1 ) q −2 ln U2 , q X2 = sin(2πU1 ) −2 ln U2 , är oberoende och N(0, 1)-fördelade. Marsaglias metod: Tag Z1 och Z2 oberoende och Rekt(−1, 1). (i) Om Z12 + Z22 > 1 så välj nya slumptal. (ii) Om Z12 + Z22 ≤ 1 så sätt X1 = Z 1 X2 = Z 2 v u 2 u t−2 ln(Z1 + Z22 ) , Z12 + Z22 v u 2 u t−2 ln(Z1 + Z22 ) . Z12 + Z22 Då blir de godkända värdena oberoende och N(0, 1)-fördelade. Blandad simulering: Om det är viktigt att man får korrekt fördelade slumptal även i de yttre delarna av variationsområdet, t ex när man skall simulera maximat av flera normalvariabler, kan man använda en blandad simulering. Detta innebär att man använder en metod för att generera slumptal i t ex intervallet [−3, 3] och en annan metod för att få värden utaför detta intervall. Eftersom P (X > 3) = 0.001349898 . . . skall man blanda in 0.135% värden större än 3 och likaså 0.135% värden mindre än -3. Dessa extrema värden kan simuleras med någon specialmetod, t ex förkastningsmetoden; se vidare [15]. Inversmetoden: Det finns enkla rationella approximationer till normalfördelningsfunktions invers. Följande lättprogrammerade formel ger ett fel i inversen APPENDIX A. SIMULERING 6 på högst en halv enhet i andra decimalen, se [1, 26.2.22]. Definiera t(u) = s R(t) = 2.30753 + 0.27061t . 1 + 0.99229t + 0.04481t2 ln 1 , u2 Välj sedan u rektangelfördelat i (0, 1) och sätt X= A.3 ( t(u) − R(t(u)) −t(1 − u) + R(t(u)) för 0 ≤ u < 0.5 för 0.5 ≤ u < 1 (A.4) Vägd simulering Vägd simulering, eller LR-simulering, är en användbar och mycket kraftfull variant av Monte Carlo-simulering som kan användas när man vill undersöka hur egenskaperna hos ett stokastiskt system beror av någon av de ingående variablernas fördelning, t ex hur medelkölängden i ett kösystem beror av betjäningstidens fördelning. Metoden innebär att man simulerar systemets egenskaper, t ex kölängd, för betjäningstider genererade som utfall från en viss fix fördelning, och därefter väger samman de olika resultaten efter deras relativa trolighet under de olika alternativa fördelningarna. Mera precist innebär metoden följande. Definition 1.1. Låt f0 (x) vara en täthetsfunktion och låt fθ (x), θ ∈ Θ, vara en familj av täthetsfunktioner med samma stöd som f0 (x), dvs de är noll på samma mängd. Låt, för varje θ , Xθ beteckna en stokastisk variabel med täthetsfunktion fXθ (x) = fθ (x), och låt g(x) vara en given funktion av utfallet x. Antag att vi vill bestämma väntevärdet `(θ) = E[g(Xθ )] = Z g(x) fθ (x) dx av g(Xθ ). Låt X vara en stokastisk variabel med täthetsfunktionen fX (x) = f0 (x) och låt x1 , x2 , . . . , xN vara genererade från fördelningen f0 (x), dvs observationer av X . Med en LR-simulering av `(θ) menas `(θ) = N 1 X fθ (xk ) . g(xk ) N k=1 f0 (xk ) 2 Eftersom observationerna x1 , . . . , xN är gerererade från tätheten f0 (x) finner man direkt att E[`(θ)] = Z g(x) Z fθ (x) f0 (x) dx = g(x) f0 (x) dx = `(θ). f0 (x) Vikterna w(xk , θ) = fθ (xk )/f0 (xk ) APPENDIX A. SIMULERING 7 2.5 2 1.5 E ∗ (λ) 1 0.5 0 0 2 4 6 8 10 λ Figur A.2: Simulerade skattningar E ∗ (λ) av E[X] = 1/λ när X är exponentialfördelad. Den heldragna kurvan visar resultatet av en vägd simulering enligt (A.5), den streckade kurvan visar resultatet där varje värde på λ simulerats för sig. Antalet replikat är i båda fallen 100. används alltså till att väga samman de olika utfallen g(xk ), genererade från grundfördelningen f0 (x), så att resultatet `(θ) i medeltal blir vad man skulle fått om man istället hade simulerat från fördelningen fθ (x). Om det är komplicerat att beräkna funktionen g(xk ) men lätt att beräkna vikterna w(xk ) kan LR-simulering innebära en avsevärd besparing av räknetid. För varje upprepning behöver man ju bara beräkna funktionsvärdet g(xk ) en enda gång, och genom att använda samma värde många gånger (för olika värden på parametern θ ) får man ändå en uppskattning av hela funktionen `(θ). Exempel 1.4. Antag att vi skulle vilja bestämma `(λ) = E[Xλ ] om Xλ är exponentialfördelad med täthetsfunktionen fXλ (x) = λe−λx . Nu vet vi ju redan att E[Xλ ] = 1/λ, så i detta fall kan vi lätt kontrollera resultatet. Vi använder LR-metoden och väljer att simulera x1 , x2 , . . . , xN med grundtätheten f0 (x) = e−x . Som skattning av `(λ) skall vi ta `(λ) = N 1 X λe−λxk xk −x N k=1 e k (A.5) Figur A.2 visar resultatet av två simuleringar med N = 100 replikat vardera, dels med vägd simulering, dels med oberoende upprepningar för varje λ-värde. 2 Litteratur [1] M. Abramowitz & I. A. Stegun: Handbook of Mathematical Functions. National Bureau of Standards, 1964. [2] W. J. Anderson: Continuous-Time Markov Chains. Springer-Verlag, 1991. [3] P. J. Bickel & K. A. Doksum: Mathematical Statistics. Holden-Day, 1977. [4] G. Blom: Sannolikhetsteori med tillämpningar, Bok A. Studentlitteratur, 1984. [5] G. Blom: Statistikteori med tillämpningar, Bok B. Studentlitteratur, 1984. [6] D. J. Daley & D. Vere-Jones: An Introduction to the Theory of Point Processes. Springer-Verlag, 1988. [7] J. E. Englund, J. Lanke, G. Lindgren & T. Persson: Sannolikhetsteori med tillämpningar; Övningsbok. Studentlitteratur, 1993. [8] G. E. Forsythe, M. A. Malcolm & C. B. Moler: Computer Methods for Mathematical Computations. Prentice Hall, 1977. [9] G. R. Grimmet & D. R. Stirzaker: Probability and Random Processes, 2nd ed. Oxford University Press, 1992. [10] A. Gut: An Intermediate Course in Probability Theory. Springer-Verlag, 1995. [11] R. Kindermann & J. Laurie Snell: Markov Random Fields and their Applications. American Mathematical Society, 1980. [12] P. A .W. Lewis: A branching Poisson process model for the analysis of computer failure patters. Journal of the Royal Statistical Society B 26, 398-441, 1964. [13] G. Lindgren & H. Rootzén: Stationära stokastiska processer. Lund, 1994. [14] N. Metropolis, et al.: Equations of state calculations by fast computing machines. J. Chem. Phys. 21, 1087-1092, 1953. [15] B. J. T. Morgan: Elements of Simulation. Chapman and Hall, 1984. 8 LITTERATUR 9 [16] S. K. Park & K. W. Miller: Random Number Generators: Good ones are hard to find. Communications of the ACM 32, 1192-1201, 1988. [17] R. Y. Rubinstein & A. Shapiro: Discret Event Systems: sensitivity analysis. Wiley, 1993. [18] D. L. Snyder & M. I. Miller: Random Point Processes in Time and Space, 2nd ed. Springer-Verlag, 1991.