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.