######### # Cas 4 # ######### # 1) # Ulovljen je ruski spijun u SAD. Agent FBI\CIA je uzeo revolver # (sa 6 metkova) i stavio dva metka jedan pored drugog. # Puca u sebe (agent) i nista. Prazno. # Posle agent prisloni revolver ka glavi spijuna i kaze: # "Mogu sad da izvrtim bubanj, a mogu i da ne menjam nista" # Sta treba da odabere spijun da bi povecao sanse za prezivljavanje? # Pre svega smo teorijski resili i objasnili zadatak na tabli i dobili smo da je tacan odgovor da treba da ne menjamo nista, # jer u slucaju kada zavrtimo bubanj imamo 2/3 da prezivimo, dok u slucaju kada nista ne menjamo 3/4. # Ideja: napisacemo kod koji ce da proverava kolika je verovatnoca da NE prezivimo ukoliko ne menjamo nista. # Ocekuje se da rezultat bude ~0.25, jer 1/4 je verovatnoca da ne prezivimo ako ne menjamo nista. # Kako su metkovi postavljeni jedan za drugim, dovoljno je da simuliramo mesto prvog, drugi ide odmah nakon njega. # To cemo odraditi pomocu sample funkcije, samo sto cemo ovog puta da sample-ujemo od 0 do 5, jer mod 6 (u R-u to je %%6) # vraca brojeve {0,1,2,3,4,5}. # Kad smo postavili metkove, dalje proveravamo da li NISU u prvom otvoru (to je nama 0 u kodu), # jer nas samo takvi slucajevi # zanimaju. Jer imamo jasno zadatu uslovnu verovatnocu da se desio dogadjaj # da je agent preziveo prvi potez. # I kada udjemo u taj if, samo jos ispitamo u kojim slucajevima nas spijun NECE da prezivi. # Na kraju samo vratimo odnost ta dva brojaca. revolver <- function() { x = sample(0:5, 1) #vraca jedan broj izmedju 1 i 6 i to je mesto prvog metka, drugi je odmah posle njega. y = (x+1) %% 6 # mesto drugog metka. if(x != 0 & y != 0) # to mora da bude, jer je agent preziveo. { if(x == 1) { return(cbind(1,1)) # racunamo slucajeve kada se isplati vrteti. } return(cbind(0, 1)) } return(cbind(0, 0)) } N = 10000 rezultat = rowMeans(replicate(N, expr = revolver(), simplify = TRUE)) rezultat[1]/rezultat[2] # 2) # Pod pretpostavkom da su verovatnoce radjanja zenske i muske dece jednake, # ispitati nezavisnost sledecih dogadjaja: # A - nisu sva deca istog pola, B - medju decom najvise jedna devojcica. # a) u porodici sa troje dece, # b) u porodici sa cetvoro dece. # Samo cemo na tabli da uradimo. # Probajte sami simulaciju da napisete posle. # 3) # Na slucajan nacin biraju se dve karte iz standardnog spila od 52 karte. Koja # je verovatnoca da prva karte nije sa likom (kralj, dama ili zandar) a da # druga karte je karta sa likom, ako: # a) vratimo u spil prvu kartu pre izvlacenja druge # b) ne vracamo prvu kartu pre izvlacenja druge # Neka su A i B sledeci dogadjaji: # A - prva izvucena karta nije sa likom # B - druga karta je sa likom # a) # U ovom slucaju, kada izvlacimo karte sa vracanjem, A i B su nezavisni # (jer se eksperiment vrsi pri istim uslovima dva puta) # dogadjaji, pa je P(AB)=P(A)P(B)= 40/52 * 12/52 = 0.1775 # b) # U slucaju bez vracanja, A i B nisu nezavisni dogadjaji pa vazi: # P(AB)=P(A)P(B|A)= 40/52 * 12/51 = 0.1809 karte <- function(vracanje) { # kreiramo spil karata spil = c(rep(1:10, 4), rep("J", 4), rep("D", 4), rep("K", 4)) izvucene_karte = sample(spil, 2 , replace = vracanje) prva_karta = izvucene_karte[1] druga_karta = izvucene_karte[2] ifelse(prva_karta %in% c("J", "D", "K") & druga_karta %in% 1:10, return(1), return(0)) } # Sa vracanjem: rezultat_sa_vracanjem = replicate(100000, karte(TRUE)) mean(rezultat_sa_vracanjem) # Bez vracanja: rezultat_bez_vracanjem = replicate(100000, karte(FALSE)) mean(rezultat_bez_vracanjem) # posto je razlika u verovatnocama mala, aproksimacije nam ne daju dovoljno # jasne rezultate posle malog broja simulacija, zbog toga je dato n = 1000000 # 4) # Iz segmenta [0, 1] se na slucajan nacin biraju dva broja nezavisno jedan od drugog. # Dogadjaj A je da je zbir brojeva manji od 1, # a dogadjaj B da je proizvod brojeva manji od 2/9. # Odrediti verovatnoce dogadjaj A i B pomocu simulacije. # Ispitati nezavisnost dogadjaja A i B (Monte Karlo metodom). nezavisnost <- function() { indikator_A = 0 indikator_B = 0 brojevi = runif(n = 2, min=0 , max=1) if(brojevi[1] + brojevi[2] < 1) { indikator_A = 1 } if(brojevi[1] * brojevi[2] < 2/9) { indikator_B = 1 } indikator_preseka = indikator_A * indikator_B return(cbind(indikator_A, indikator_B, indikator_preseka)) } rezultati = rowMeans(replicate(100000, expr = nezavisnost(), simplify = TRUE)) rezultati # Provera nezavisnosti rezultati[1] * rezultati[2] rezultati[3] # Ako su brojevi blizu, mozemo pricati o mogucoj nezavisnosti, u suprotnom ne. # Formula totalne verovatnoce: P(A)=P(A|B)*P(B) + P(A|B^c)*P(B^c) # Bajesova formula: P(A|B) = P(A)*P(B|A)/P(B) # 5) # Poznato je da su 5% osoba muskog pola daltonisti i 0.25% zenskog pola. # Iz skupa koji sadrzi isti broj zena i muskaraca odabrana je jedna osoba. # Ako je izabrano lice daltonista, naci verovatnocu da je to muskarac. # Resenje: # Oznacimo sa # A - izabran je daltonista. # H_1 - izabran je muskarac # H_2 - izabrana je zena # Trazi se da nadjemo P(H_1 | A). Sto se moze raspisati prema Bajesovoj formuli # P(H_1 | A) = P(A | H_1) * P(H_1)/ P(A) # Dalje racunamo: # P(H_1) = 1/2 - prema uslovu zadatka # P(A | H_1) = 0.05 - opet prema uslovu # P(A) = P(A | H_1) * P(H_1) + P(A | H_2) * P(H_2) = (0.05+0.0025)/2 # 6) # Verovatnoca da se knjiga nalazi u biblioteci je p. # Ako je knjiga u biblioteci, sa istom verovatnocom se nalazi # na jednoj od n polica. Pregledano je m (mp>0). Igrac zavrsava igru ako dostigne 10$. # Naci verovatnocu da ce on # to uspeti ako je poznato da ce igrati najvise N puta. Proveriti zakljucak simulacijom. #z=p+(1-p)*z^2 # z - oznacicemo totalnu verovatnocu da se igrac pomerio za jedan dolar unapred. # Tada mozemo na sledeci nacin da zapisemo moguce ishode za tu verovatnocu: (sa 1-pobeda, 0-poraz) # {1, 011, 00111, 01011, ....} bitno je da je na kraju sigurno 1. # Tada prema formuli potpune verovatnoce dobijamo: # z = p + (1-p)*z^2, gde je prvi sabirak - verovatnoca da smo odmah pobedili, a drugi da smo prvo izgubili, # a onda dva puta se desilo dogadjaj verovatnoce z. #Resenja te jednacine po z (za dato p) su: # z_1 = 1 # z_2 = p/(1-p), za p <= 1/2, jer inace z nije verovatnoca. # I time smo dobili pomeranja za jedan dolar verovatnoce z, svaki pomeraj kapitala za jedan dolar je nezavisan od prethodnog, # pa je verovatnoca da predjemo sa 5$ na 10$ zapravo z^5. # Sto se tice simulacije - prosledjujemo verovatnocu da smo dobili u jednoj igri na slot masini (p), # pocetni kapiral (kapital), broj_koraka - koliko najvise puta ce da odigra igrac (N iz postavke zadatka), n - koliko puta # simuliramo. igrac <- function(p, kapital = 5, N) { # sample-ujemo N puta rezultate igranja i gledamo kako se ponasao njegov kapital igra = sample(c(1, -1), N , replace = TRUE, prob = c(p, 1-p)) # Pocetna pozicija pozicija kapitala, je ono sto smo prosledili u funkciji. trajektorija = kapital + cumsum(c(0, igra)) # moglo je i: trajektorija = cumsum(c(kapital, igra)) # Ako je 0, onda nije dostigao svojih 10$. kraj_igre = 0 # Inace, ako jeste, onda belezimo kad je to bilo. if(sum(trajektorija >= 10) >= 1) { kraj_igre = which(trajektorija == 10)[1] } # Vratimo T\F u zavisnosti od toga da li je dostigao 10$. return(kraj_igre > 0) } rezultat = replicate(10000, expr = igrac(0.45, 5, 1000), simplify = TRUE) mean(rezultat) p = 0.48 (p/(1-p))^10 # Dok z p > 0.5 rezultat = replicate(1000, expr = igrac(0.51, 5, 1000), simplify = TRUE) mean(rezultat)