# Materialy do zajec z modelowania # http://www.biecek.pl/semestr/stats # # --------------------------------------------------------------- # wprowadzenie, czyli CTG # n <- 10000 m <- 100 obs <- matrix(rexp(n*m,1),n,m) srednie <- apply(obs, FUN=mean, 1) hist(srednie,100) # --------------------------------------------------------------- # Model kasyna # strategia cierpliwa # gotowka <- 100 p <- 0.45 krok <- 1 while (gotowka[krok]>0 & gotowka[krok]<700) { stawka <- 100 krok <- krok+1 gotowka[krok] <- gotowka[krok-1] - stawka + 2*stawka*(runif(1)>p) } plot(gotowka, type="l",lwd=3) # strategia narwana # gotowka <- 100 p <- 0.45 krok <- 1 while (gotowka[krok]>0 & gotowka[krok]<700) { stawka <- min(gotowka[krok], 700 - gotowka[krok]) krok <- krok+1 gotowka[krok] <- gotowka[krok-1] - stawka + 2*stawka*(runif(1)>p) } plot(gotowka,type="l",lwd=3) # --------------------------------------------------------------- # Model bomby atomowej # l.neutronow <- 10 p <- 0.26 krok <- 1 while (l.neutronow[krok]>0 & l.neutronow[krok]<10^8) { krok <- krok+1 l.neutronow[krok] <- 4*rbinom(1,l.neutronow[krok-1],p) } plot(l.neutronow,type="l",lwd=3) # --------------------------------------------------------------- # Model obciazenia serwera # # # inicjacja parametrow wejsciowych do opisu zadan wejscie <- function(T, lambda) { liczba.zadan <- rpois(1, T*lambda) czasy.wyslania.zadan <- sort(runif(liczba.zadan, 0, T)) czasy.trwania.zadan <- rchisq(liczba.zadan,1) list(liczba.zadan = liczba.zadan, czasy.wyslania.zadan = czasy.wyslania.zadan, czasy.trwania.zadan = czasy.trwania.zadan) } # # opis pracy serwera serwer <- function(dane.in) { aktualny.czas <- 0 czas.rozpoczecia <- NULL czas.zakonczenia <- NULL czas.bezczynnosci <- NULL for (i in 1:dane.in$liczba.zadan) { aktualny.czas <- max(aktualny.czas, dane.in$czasy.wyslania.zadan[i]) czas.rozpoczecia[i] <- aktualny.czas czas.zakonczenia[i] <- aktualny.czas + dane.in$czasy.trwania.zadan[i] aktualny.czas <- czas.zakonczenia[i] } czas.bezczynnosci <- czas.rozpoczecia[-1] - czas.zakonczenia[-dane.in$liczba.zadan] list(liczba.zadan = dane.in$liczba.zadan, czas.rozpoczecia = czas.rozpoczecia, czas.zakonczenia = czas.zakonczenia, czas.bezczynnosci = czas.bezczynnosci) } # # przykladowa realizacja scenariusza pracy serwera T <- 3000 lambda <- 0.5 dane.in <- wejscie(T, lambda) dane.out <- serwer(dane.in) czas.do.rozgrzania <- 100 zadania.rozgrzewajace <- which(dane.out$czas.rozpoczecia <= czas.do.rozgrzania) hist(dane.out$czas.bezczynnosci[-zadania.rozgrzewajace], xlab="czas bezczynnosci", main="Czas bezczynnosci po ,,rozgrzaniu'' serwera", 100) mean(dane.out$czas.bezczynnosci[-zadania.rozgrzewajace]==0)