Simulácie kombinatorických úloh

Základy práce v R-ku

Aritmetické operácie

1 + 1
## [1] 2
2 * 2
## [1] 4

Vektory

x1 <- c(1, 2, 3)
x1
## [1] 1 2 3
x2 <- 1:5
x2
## [1] 1 2 3 4 5
x3 <- rep(1, 4)
x3
## [1] 1 1 1 1
x4 <- rep(1:3, 4)
x4
##  [1] 1 2 3 1 2 3 1 2 3 1 2 3
x5 <- rep(1:3, each = 4)
x5
##  [1] 1 1 1 1 2 2 2 2 3 3 3 3
x5 + 1
##  [1] 2 2 2 2 3 3 3 3 4 4 4 4
x5 + x4
##  [1] 2 3 4 2 4 5 3 4 6 4 5 6
x5 * 2
##  [1] 2 2 2 2 4 4 4 4 6 6 6 6
x6 <- 5:15
x6[1:4]
## [1] 5 6 7 8
x6[c(1, 3, 5, 7)]
## [1]  5  7  9 11
x6[-1]
##  [1]  6  7  8  9 10 11 12 13 14 15
x7 <- c(3, 4, 7, 5, 4, 3)
sort(x7)
## [1] 3 3 4 4 5 7

Logické hodnoty TRUE/FALSE

a <- 3
b <- 5
a > b
## [1] FALSE
a <- c(2, 4, 5, 5)
b <- c(3, 4, 5, 6)
a == b
## [1] FALSE  TRUE  TRUE FALSE
a > 4
## [1] FALSE FALSE  TRUE  TRUE
a > b
## [1] FALSE FALSE FALSE FALSE
a < b
## [1]  TRUE FALSE FALSE  TRUE
any(a < b)
## [1] TRUE
all(a < b)
## [1] FALSE

Definovanie funkcií

mocnina <- function(a, b) a^b
mocnina(2, 4)
## [1] 16
vypocet <- function(x, y, n){
  pom1 <- (x + y)^n
  pom2 <- x * y
  return(pom1^pom2)
}
vypocet(1, 3, 2)
## [1] 4096

Práca s reťazcami

Vrátime sa k nim, keď sa objavia v príkladoch.

grep(pattern = "o", x = c("pondelok", "utorok", "streda"))
## [1] 1 2
grepl(pattern = "o", x = c("pondelok", "utorok", "streda"))
## [1]  TRUE  TRUE FALSE
strsplit("MAREC", "")
## [[1]]
## [1] "M" "A" "R" "E" "C"
strsplit("MAREC", "")[[1]]
## [1] "M" "A" "R" "E" "C"
as.character(12345)
## [1] "12345"
paste("A", "B", "C")
## [1] "A B C"
paste0("A", "B", "C")
## [1] "ABC"

Funkcie sample a replicate

set.seed(123) # kvoli reprodukovatelnosti

vyber1 <- sample(1:5, size = 3, replace = TRUE)
vyber1
## [1] 3 3 2
vyber2 <- sample(1:5, size = 3, replace = FALSE)
vyber2
## [1] 2 5 3

Ďalšie užitočné funkcie:

vyber3 <- sample(1:10, size = 10, replace = TRUE)
vyber3
##  [1]  5  4  6  9 10  5  3  9  9  9
sum(vyber3)
## [1] 69
unique(vyber3)
## [1]  5  4  6  9 10  3
length(vyber3)
## [1] 10

Cvičenie: Nájdite počet rôznych hodnôt vo vektore vyber3.

Funkcia replicate na opakovanie simulácií:

sucet3 <- function(N){  # sucet 3 nahodnych cisel medzi 1 a N vyberanych s navratom
  x <- sample(1:N, size = 3, replace = TRUE)
  return(sum(x))
}

set.seed(123)
simulacie <- replicate(10^5, sucet3(6)) # 10^5 krat zopakujeme sucet3(6)

table(simulacie) # pocetnosti jednotlivych vysledkov
## simulacie
##     3     4     5     6     7     8     9    10    11    12    13    14    15 
##   434  1468  2688  4614  6832  9727 11653 12615 12481 11540  9856  6935  4603 
##    16    17    18 
##  2745  1346   463
barplot(table(simulacie)) # stlpcovy graf pocetnosti

prop.table(table(simulacie)) # relativne pocetnosti jednotlivych vysledkov (0.1 = 10 percent)
## simulacie
##       3       4       5       6       7       8       9      10      11      12 
## 0.00434 0.01468 0.02688 0.04614 0.06832 0.09727 0.11653 0.12615 0.12481 0.11540 
##      13      14      15      16      17      18 
## 0.09856 0.06935 0.04603 0.02745 0.01346 0.00463
mean(simulacie) # priemer
## [1] 10.50135

Simulácie príkladov: s návodmi

Hodíme desaťkrát pravidelnou kockou a zaznamenáme súčet, ktorý padol. Aké možnosti súčtu a ako často nastali?

Stačí mierne upraviť predchádzajúci výpočet - doplňte:

# definujte funkciu
sucet <- function(){
  ...
}

# spravte simulacie
set.seed(123)
simulacie <- replicate( ... )

# zobrazte vysledky

Hodíme desaťkrát pravidelnou kockou a zaznamenáme či padla aspoň raz šestka. Ako často nastala situácia, že šestka padla a ako často nie?

Návod:

set.seed(123)
kocky <- sample(1:6, size = 10, replace = TRUE)
kocky
##  [1] 3 6 3 2 2 6 3 5 4 6
kocky == 6
##  [1] FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE
any(kocky == 6)
## [1] TRUE

Hodíme desaťkrát nepravidelnou kockou, pri ktorej má jednotka pravdepodobnosť padnutia 0,5 a ostatné hodnoty po 0,1. Zaznamenáme či padla aspoň raz šestka. Ako často nastala situácia, že šestka padla a ako často nie? Inak povedané: Aký je náš odhad pravdepodobnosti, že padla aspoň jedna šestka?

Funkcia sample má parameter prob, v ktorom sa zadajú pravdepodobnosti jednotlivých výsledkov, z ktorých sa vyberá hodnota. Defaultne sú pravdepodobnosti rovnaké, čo bolo splnené v doterajších zadaniach. Teraz spravíme:

kocky <- sample(1:6, size = 10, replace = TRUE, prob = c(0.5, 0.1, 0.1, 0.1, 0.1, 0.1))
kocky
##  [1] 4 3 1 6 1 1 1 2 6 4

Simulácie príkladov: cvičenia

Nájdite simuláciami odhady pre nasledujúce zadania:

  1. Hodíme päťkrát pravidelnou mincou. Aká je pravdepodobnosť, že hlava padla práve trikrát?

  2. Číslo žrebu v lotérii je na ňom napísané ako päťciferné číslo od 00001 do 99999. Náhodne si jeden kúpime. Aká je pravdepodobnosť, že číslice, z ktorých sa skladá jeho číslo, sú všetky rôzne?

  3. Do výťahu nastúpilo na prízemí osemposchodovej budovy 10 ľudí. Každý vystupuje s rovnakou pravdepodobnosťou na každom z poschodí, nezávisle od ostatných. Aká je stredná hodnota počtu poschodí, na ktorých výťah zastane, lebo na tomto poschodí niekto vystupuje?

  4. V lotérii sa ťahá 5 čísel z 35. Aká je pravdepodobnosť, že budú medzi nimi dve susedné čísla?

  5. V púšti ide za sebou 6 tiav. Po tom, čo majú prestávku, sa usporiadajú náhodným spôsobom tak, že každé usporiadanie má rovnakú pravdepodobnosť. Aká je pravdepodobnosť, že žiadna ťava nemá pred sebou tú istú ťavu ako predtým?

  6. Na každej zo šiestich kartičiek je napísané jedno písmeno a sú usporiadané tak, že vytvárajú slovo KARATE. Zamiešame ich a náhodne vyberáme, pričom ich ukladáme vedľa seba. Aká je pravdepodobodobnosť, že vznikne slovo RAKETA?

  7. Hádžeme pravidelnou kockou, kým nepadne šestka. Aká je pravdepdobonosť, že budeme musieť hádzať viac ako trikrát?

  8. Zoznam otázok na skúšku obsahuje 30 otázok. Napísané sú po dvojiciach na kartičkách, pričom sa neopakujú a dvojice sú vytvorené náhodne. Študent ovláda 25 otázok. Na to, aby skúšku spravil, musí buď zodpovedať obidve otázky z vytiahnutej kartičky alebo na jednu z otázok (ktorú si vyberie) a na jednu otázok z druhej vytiahnutej kartičky, pričom túto otázku vyberie skúšajúci (s rovnakou pravdepodobnosťou vyberie jednu z otázok, ktoré sú na kartičke). Aká je pravdepodobnosť, že študent skúšku spraví?

  9. Príklad z cvičenia o narodeninách - firma, kde sa nepracuje v dňoch, keď má niekto narodeniny.

  10. Príklad z cvičenia o narodeninách - lístok zadarmo.