LUNDS UNIVERSITET MATEMATIKCENTRUM MATEMATISK STATISTIK LABORATION 3: SIMULERING AV MARKOVPROCESSER MED TILLFÖRLITLIGHETSTILLÄMPNING MATEMATISK STATISTIK AK, MAS 101:A, VT-01 1 Förberedelser Denna laboration handlar om hur man simulerar Markovprocesser i kontinuerlig tid genom att bilda en inbäddad Markovkedja, som innehåller alla processens hopp. Läs igenom Avsnitt 3.4.1 och 5.1 5.5 i Tilläggskompendiet (TK). 2 Att starta MATLAB, användning av befintliga m-filer Gå in i MATLAB på det sätt som beskrivs i introduktionslaborationen. Väl inne i MATLAB anger du sedan >> mh_init( MAS101A ) Då skapas automatiskt en sökväg till underbiblioteket...\mas101a\, som innehåller alla m-filer som behövs för datorlaborationerna till kursen (se även appendix för de m-filer du behöver till just denna laboration). Filerna i...\mas101a\ listas med kommandot 1 >> what MAS101A Hjälptexten till en godtycklig fil från listan får du fram genom >> help... där... är namnet på den fil du vill ha hjälptexten för. Om du dessutom vill läsa in hela filen till Matlabs editor anger du >> edit... där återigen... står för filnamnet. Om du gör ändringar i den inlästa filen (ej nödvändigt för att genomföra laborationen) kan du sedan spara filen med ev. ändringar på ditt eget konto med Save As, såsom anges i introduktionslaborationen. 3 Simulering av Markovprocesser. Vi ska börja med att simulera Markovprocesser i kontinuerlig tid med hjälp av sats 5.7 i TK, avsnitt 5.5. 1 Det syns inte i den lista du får upp på skärmen att samtliga filer är av typen.m.
Förberedelseuppgift 1 (Inbäddad övergångsmatris.) Givet en Markovprocess med fyra tillstånd, numrerade E 1, E 2, E 3, E 4, och intensitetsmatris 3 2 1 0 A = 2 4 2 0 1 3 5 1, 0 3 3 6 bestäm övergångsmatrisen P för den inbäddade Markovkedjan. Den inbäddade Markovkedjans övergångsmatris anger med vilka sannolikheter vi hoppar mellan olika tillstånd, utan hänsyn till hur lång tid det tar mellan hoppen. Med hjälp av sats 5.7 kan vi simulera hoppen och tidsintervallen mellan hoppen var för sig. Förberedelseuppgift 2 (Fördelning för ett hopp.) Anta att vi hoppar till E 3 vid tidpunkten T i (det i:te hoppet). Ange sannolikhetsfunktionen för X i+1 = X (T i+1 ), dvs nästa tillstånd som processen hoppar till. Hur kan man simulera detta hopp? (Ledning: se Avsnitt 3.4.1 i TK.) Förberedelseuppgift 3 (Tiden i ett tillstånd.) Vilken fördelning har T i+1 T i, under samma förutsättningar som i föregående uppgift? Förberedelseuppgift 4 (Flera hopp.) Vilken är sannolikheten att vi givet start i E 3 först tillbringar minst 0.4 tidsenheter i E 3, därefter hoppar till E 2, tillbringar mellan 0.1 och 0.4 tidsenheter i E 2 samt slutligen hoppar till E 1? Funktionen markovkont_sim.m (se appendix eller använd hjälpfunktionen i MATLAB, dvs help markovkont_sim) simulerar en Markovprocess i kontinuerlig tid med intensitetsmatris A och starttillstånd X (0), under T tidsenheter: >> A =... >> X0 =... >> T =... >> [tau,x,t_hopp] = markovkont_sim(a,t,x0) Utparametrarna till funktionen skrivs nu ut på skärmen. För att plotta realiseringen av processen kan man använda >> stairs(t_hopp,x) Gränserna i grafikfönstret, som automatiskt sätts av MATLAB, är inte så bra i detta fall. Du kan själv ändra dem genom >> N = size(a,1); >> axis([0 T 0 N+1]); där N anger antal tillstånd hos Markovkedjan. Uppgift 1 Simulera Markovprocessen med intensitetsmatris ( ) 0.5 0.5 A = 3 3 under en lämpligt vald tidsperiod T och valfritt starttillstånd. Plotta ut realiseringen av processen. Beräkna (T ) = ( 1 (T ), 2(T )), där i(t ) anger hur stor del av tiden processen befinner sig i E i (så att 1(T ) + 2 (T ) = 1). Förklara processens utseende. 2
Uppgift 2 Gör samma sak för Markovprocessen i Förberedelseuppgift 1, för några olika värden på T. Plotta sedan i (T ) som funktion av T för i = 1, 2, 3, 4 i samma plot: >> T_vec = [...] Lägg de T-värden du väljer i en vektor T_vec >> pi_1 = [...] Motsvarande värden på pi_1(t) >> plot(t_vec,pi_1, r ) Plotta pi_1(t) mot T med röd färg ( r ) >> hold on Grafikfönstret raderas ej inför nästa plottning >> pi_2 = [...] >> plot(t_vec,pi_2, b ) Här valde vi blå färg ( b )... >> hold off Pröva gärna, om tiden tillåter, att simulera Markovprocesser med olika intensitetsmatriser, för att se hur realiseringarna beror av A. 4 Stationära sannolikheter Om T är stor bör vektorn (T ) = ( 1 (T ),..., N(T )) svänga in sig mot den stationära sannolikhetsvektorn = ( 1,..., N ). Funktionen pi_kont (se appendix) beräknar för en allmän Markovprocess. Den utnyttjar omskrivningen { A = 0, N i=1 i = 1 B = (0,..., 0, 1), där anger transponat, B = ( A 1 ) = ( A 1 ) och 1 är en radvektor innehållande N ettor. Genom denna omskrivning ges ett ekvationssystem med N + 1 linjärt beroende ekvationer och N obekanta. som lösningen till Uppgift 3 Beräkna den stationära fördelningen för Markovprocessen i Förberedelseuppgift 1. Jämför resultatet med det värde du fick i Uppgift 2. 5 Passiv redundans med reparation av komponenter Vi tänker oss följande tillförlitlighetsproblem: En maskin innehåller en komponent. Så snart denna går sönder, kan den bytas ut mot en annan. Totalt finns n komponenter att tillgå, och trasiga komponenter kan lagas av en reparatör. Komponenterna antas ha oberoende och exponentialfördelade livslängder med väntevärde 1, och reparationstiderna är också exponentialfördelade, med väntevärde 1. Frågeställningen är nu när reparatören ska tillkallas för att underhållskostnaden ska bli så låg som möjlig. Tre typer av kostnader förekommer: 1) kostnad per tidsenhet vid driftsstopp (alla komponenter trasiga) 2) kostnad att tillkalla reparatör 3) reparationskostnad per tidsenhet. Anta att vi tillkallar reparatören (momentant) då den r:te komponenten går sönder, 1 r n. När reparatören har anlänt, lagar han alla komponenter som är trasiga vid ankomst samt de som blir trasiga innan han återvänder. Om r är liten ökar kostnaden 2), eftersom vi måste tillkalla reparatören 3
oftare. Ett stort r ökar å andra sidan sannolikheten för driftsstopp och därmed ökar kostnad 1). Vi antar ett linjärt samband för den totala kostnaden K under T tidsenheter: där K = K (r, T ) = a 1n (T ) + bn rep (T ) + c 1 (T ), (1) 1n(T ) = driftsstoppstid under [0, T ] n rep (T ) = antal gånger reparatören tillkallas under [0, T ] 1(T ) = total reparationstid under [0, T ] (indexen kommer strax att få sin förklaring) och a, b och c är konstanter som beskriver den relativa vikten av de olika kostnadstyperna. Systemet kan beskrivas av en Markovprocess i kontinuerlig tid, med N = n + r tillstånd E 00, E 01,..., E 0,r 1, E 11, E 12,..., E 1n, där E ij = i reparatörer tillkallade, j komponenter trasiga. Tydligen blir 1n den tid vi tillbringar E 1n, n rep antalet hopp E 0,r 1 E 1r och 1 den sammanlagda tiden vi är i något av tillstånden E 11,..., E 1n. Förberedelseuppgift 5 (Tillståndsdiagram.) Ställ upp ett tillståndsdiagram för systemet med intensiteter angivna mellan alla tillstånd. Efter byte av tidsskala kan vi alltid anta att = 1, vilket vi gör fortsättningsvis. Funktionen A_tillflab (se appendix) beräknar tillståndsmatrisen för godtyckligt n, r och (med tillstånden numrerade 1, 2,..., N enligt ordningsföljden E 00, E 01,..., E 0,r 1, E 11, E 12,..., E 1n ). Uppgift 4 Beräkna intensitetsmatrisen då n = 6 och r = 3 och = 3. 5.1 Simulering Med hjälp av funktionen kostnad (se appendix), simuleras systemet under tiden T, och den genomsnittliga kostnaden K medel = K /T bestäms. Uppgift 5 (Grafisk illustration av systemet.) Simulera systemet under en ganska kort tid för lämpligt valda värden på n, r,, a, b och c. Plotta ut antal trasiga komponenter (utparametern Y) som funktion av tiden samt i samma plot när reparatören är tillkallad (utparametern Z) som funktion av tiden. För att kunna särskilja de två kurvorna åt, använd olika färger, exempelvis stairs(t_hopp,y, b ) för en blå Y -kurva osv. Kom ihåg hold on, så att du inte raderar den befintliga kurvan när du ritar in en ny. Gör sedan en ny plot med ett annat värde på. Hur ändras medelkostnaden och varför? Uppgift 6 (Optimalt val av r.) Simulera systemet du valde i föregående uppgift för ett stort T (exempelvis T = 1000 eller ett mindre värde om det tar för lång tid), beräkna och plotta medelkostnaden som funktion av r, då a = 10, b = 1 och c = 1. Vilket r är optimalt? Gör sedan om simuleringen med andra värden på a, b och c. Hur ändras det optimala värdet på r och varför? 4
5.2 Analytisk metod Om T i (1) får vi K medel (r, T ) = K (r, T ) T = a 1n (T ) T + b n rep(t ) T + c 1 (T ) T a 1n + b 0,r 1 + c n i=1 1i, (2) där ij är den stationära sannolikheten att befinna sig i E ij. Då systemet svängt in sig i jämvikt kan alltså de stationära sannolikheterna användas för att beskriva medelkostnaden. Vi utnyttjade att 1n(T )/T är proportionen av tiden vi befinner oss i E 1n, som för stora T bör ligga nära 1n. Av samma anledning bör 1(T )/T ligga nära n i=1 1i, då ju 1 (T ) är den sammanlagda tiden vi befinner oss i något av tillstånden E 11,..., E 1n. Vidare gäller n rep (T ) T = 0,r 1 (T )/T 0,r 1(T )/n rep 0,r 1 1 = 0,r 1, eftersom 0,r 1 (T )/n rep är den genomsnittliga längen av de n rep tidsintervall Markovprocessen befinner sig i E 0,r 1, och väntevärdet är 1 för vart och ett av dessa intervall 2, 3. Uppgift 7 (Medelkostnad vid jämvikt.) Använd dig av funktionen kostnad_limit (se appendix) för att beräkna medelkostnaden vid jämvikt som funktion av r. Utgå från samma system som du simulerade i föregående uppgift, samt jämför resultaten. Uppgift 8 (Konvergens av medelkostnad.) Välj ett system, använd kostnad för att beräkna K medel (r, T ) som funktion av T, och plotta funktionen. Räkna också ut gränsvärdet T, samt lägg in detta värde som en horisontell linje i plotten. En horisontell linje på nivån K i intervallet [T 0, T 1 ] kan erhållas med kommandona >> U = [T0 T1]; >> V = [K K]; >> plot(u,v) 2 Eftersom T är stor, kan vi bortse från att det eventuellt finns n rep + 1 intervall i E 0,r 1 inkluderade i 0,r 1(T ), nämligen om simuleringen avslutas i E 0,r 1, dvs X (T ) = E 0,r 1. 3 Enligt sats 5.7 i TK, avsnitt 5.5, är tiden i E ij varje gång exponentialfördelad med väntevärde ( a ij,ij ) 1, där a ij,ij är diagonalelementet i intensitetsmatrisen svarande mot E ij. 5
Appendix function [k] = disk_sim(p) Funktionen [k] = disk_sim(p) genererar ett slumptal k från en diskret fördelning med sannolikhetsfunktion p (som ska vara en ändlig radvektor) med hjälp av inversa transformationsmetoden. L = length(p); F = cumsum(p); F_shift = [0 F(1:L-1)]; u = rand*ones(1,l); k = find((u <= F)&(u>F_shift)); Beräkna fördelningsfunktionen Hitta det värde k där födelningsfunk- tionen hoppar förbi u function [tau,x,t_hopp] = markovkont_sim(a,t,x0) Funktionen [tau,x,t_hopp] = markovkont_sim(a,t,x0) simulerar en Markovprocess i kontinuerlig tid med intensitetsmatris A under tidsperioden [0,T], med start i tillståndet X0. Utparametrar: tau - vektor som anger tiden processn varit i de olika tillstånden T_hopp - vektor som anger tidpunkter för processens hopp (T_hopp(1)=0) X - vektor som anger processens värde under de olika tidsintervall som definieras av T_hopp Generera övergångsmatris (Pt) för den inbäddade Markovkedjan samt plocka ut diagonalelementen i A (med omvänt tecken) i en vektor a N = size(a,1); a = -diag(a); A_diag = diag(a); Pt = inv(a_diag)*a+eye(n); Påbörja simulering X = [X0]; X_nu = X0; T_hopp = [0]; T_nu = 0; tau = zeros(1,n); while T_nu<T X_next = disk_sim(pt(x_nu,:)); Generera nästa tillstånd hopptid = exprnd(1/a(x_nu)); Tidsavstånd till nästa hopp tau(x_nu) = tau(x_nu) + hopptid; T_next = T_nu + min(hopptid,t-t_nu); T_hopp = [T_hopp T_next]; X = [X X_next]; X_nu = X_next; T_nu = T_next; end; 6
function [pi] = pi_kont(a); Funktionen [pi] = pi_kont(a) bestämmer den stationära fördelningen pi till en Markovprocess i kontinuerlig tid med intensitetsmatris A N = size(a,1); u = zeros(1,n+1); u(1,n+1) = 1; B = [A ;ones(1,n)]; pi = (B\(u )) ; function [A] = A_tillflab(n,r,mu) Funktionen [A] = A_tillflab(n,r,mu) genererar en intensitets- matris A för tillförlitlighetsproblem med n komponenter, där reparatören tillkallas då r komponenter är trasiga. Reparationsintensiteten ges av mu, och komponenterna går sönder med intensiteten 1 (=lambda). Tillstånden är numrerade i ordning E_{00},...,E_{0,r-1},E_{11},...,E_{1n} function [K_medel,Y,Z,T_hopp] = kostnad(n,r,a,b,c,mu,t) Funktionen [K_medel,Y,Z,T_hopp] = kostnad(n,r,a,b,c,mu,t) simulerar ett Markovskt tillförlitlighetssystem bestående av n komponenter under T tidsenheter, där reparatören tillkallas då r enheter är trasiga. Övriga inparametrar: mu - reparationsintensitet a - kostnad per tidsenhet för avbrott (n trasiga komponenter) b - kostnad att tillkalla reparatör c - kostnad per tidsenhet att anlita reparatör Utparametrar: K_medel - totalkostnad per tidsenhet T_hopp - anger tidpunkter då systemet ändras (T_hopp(1) = 0) Y - anger antal trasiga komponenter i de olika tidsintervall som definieras av T_hopp Z - = -1 i de tidsintervall då reparatören är tillkallad, annars = -2 Simulera systemet under T tidsenheter, A = A_tillflab(n,r,mu); N = size(a,1); X0 = 1; [tau,x,t_hopp] = markovkont_sim(a,t,x0); Räkna ut n_rep - antal hopp Markovprocessen gör från E_{0,r-1} (ordningsnummer r) till E_{1r} (ordningsnummer 2*r), dvs antal gånger reparatören tillkallas NX = size(x,1); rep_tillkallas = r*ones(1,nx); rep_kommit = 2*r*ones(1,NX); X_shift = [0 X(1:NX-1)]; 7
n_rep = sum((x_shift == rep_tillkallas)&(x == rep_kommit)); Räkna ut medelkostnaden K_medel = ( a*tau(n) + b*n_rep + c*sum(tau(r+1:n)) )/T; Beräkna antal trasiga komponenter samt när reparatören är tillkallad Y = (X <= r).*(x-1) + (X>r).*(X-r); Z = (X>r)-2; function [K_medel] = kostnad_limit(n,r,a,b,c,mu) Funktionen [K_medel] = kostnad_limit(n,r,a,b,c,mu) beräknar medelkostnaden vid jämvikt, K_medel för ett Markovskt system med n komponenter, där reparatören tillkallas då den r:te komponenten går sönder. a - kostnad per tidsenhet för avbrott (n trasiga komponenter) b - kostnad att tillkalla reparatör c - kostnad per tidsenhet att anlita reparatör Beräkna intensitetsmatrisen för systemet A = A_tillflab(n,r,mu); Beräkna stationär lösning N = size(a,1); pi = pi_kont(a); Beräkna medelkostnad K_medel = a*pi(n) + b*pi(r)*(-a(r,r)) + c*sum(pi(r+1:n)); 8