From aa33bf423885ea087ec5716996df898ef707484c Mon Sep 17 00:00:00 2001 From: Walmes Zeviani <walmes@ufpr.br> Date: Mon, 13 Aug 2018 20:36:08 -0300 Subject: [PATCH] Adiciona slides sobre GNA Uniforme. --- _site.yml | 6 + slides/03-gna-uniforme.Rnw | 367 +++++++++++++++++++++++++++++++++++++ 2 files changed, 373 insertions(+) create mode 100644 slides/03-gna-uniforme.Rnw diff --git a/_site.yml b/_site.yml index 68e1b10..670cd43 100644 --- a/_site.yml +++ b/_site.yml @@ -29,6 +29,12 @@ navbar: href: slides/01-revis-program.pdf - text: "Doc. e avaliação de código." href: slides/02-docum-codigo.pdf + - text: "GNA Uniformes" + href: slides/03-gna-uniforme.pdf + - text: "----------" + - text: "Arquivos complementares" + - text: "GNA Uniformes (2015)" + href: http://leg.ufpr.br/~walmes/ensino/ce089-2015-02/aula02_gna-2015-02.html # - text: "Estruturas de controle" # href: slides/01-estru-repet.html # - text: "Teorema da Transformação da Probabilidade" diff --git a/slides/03-gna-uniforme.Rnw b/slides/03-gna-uniforme.Rnw new file mode 100644 index 0000000..65eb722 --- /dev/null +++ b/slides/03-gna-uniforme.Rnw @@ -0,0 +1,367 @@ +%----------------------------------------------------------------------- + +\documentclass[serif, professionalfont, usenames, dvipsnames]{beamer} +\usepackage[T1]{fontenc} + +% ATTENTION: preamble.tex contains all style definitions. +\input{config/preamble.tex} +% \usepackage[backend=bibtex, style=authoryear]{biblatex} +\addbibresource{config/refs.bib} + +<<include = FALSE>>= +source("config/setup.R") +@ + +%----------------------------------------------------------------------- + +\title{Geração de números uniformes} +\subtitle{Importância e principais algorÃtmos} +\date{\small{ \Sexpr{sprintf('Atualizado em %s', Sys.Date())}}} + +%----------------------------------------------------------------------- + +\begin{document} + +{\setbeamertemplate{footline}{} + \frame{\titlepage} %-------------------------------------------------- +} + +\begin{frame}{} + + {\large Justificativas} + + \begin{itemize} + \item Simulação computacional de processos estocásticos depende da + geração de números aleatórios (GNA). + \item TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO + \end{itemize} + + {\large Objetivos} + + \begin{itemize} + \item Discutir a importância da geração de números aleatórios em EstatÃstica. + \item Descrever os principais algorÃtmos para GNA uniformes. + \end{itemize} +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{A distribuição uniforme} + + Se uma variável aleatória $X$ tem distribuição uniforme contÃnua entre + $a$ e $b$, denotamos $X \sim \text{U}(a, b)$, e sua função de + densidade é + + \begin{equation} + f(x, a, b) = \frac{1}{b - a} \cdot I(a \leq x < b), \quad -\infty < a < b < \infty. + \end{equation} + + A função de probabilidade é + \begin{equation} + F(x, a, b) = \Pr(X < x) = \int_{-\infty}^{x} f(x, a, b)\, \text{d}x = + \begin{cases} + 0, & x < a \\ + \dfrac{x - a}{b - a}, & a \leq x < b\\ + 1, & x \geq b. + \end{cases} + \end{equation} + + A média e variância são funções dos parâmetros + + \begin{equation} + \text{E}(X) = \frac{a + b}{2} \quad\text{e}\quad \text{V}(X) = \frac{(b - a)^2}{12}. + \end{equation} + +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{Importância da distribuição uniforme} + + \begin{itemize} + \item A distribuição tem pouca importância do ponto de vista de + modelagem. + \item Porém, para simulação computacional, ela é central. + \item Números aleatório da Uniforme são: + \begin{itemize} + \item O principal ingrediente para GNA de outras distribuições. + \item Usados em várias aplicações de Monte Carlo + (e.g. integração MC, inf. Bayesiana por MCMC, etc.) + \item Utilizados em otimização estocástica. + \item Empregados em jogos digitais (e.g. poker online). + \end{itemize} + \end{itemize} + +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}[allowframebreaks]{Geração de números aleatórios} + + {\large Números aleatórios reais} + + \begin{itemize} + \item São gerados por dispositivos via processos fÃsicos. + \begin{itemize} + \item Globo de sorteio da Mega-Sena e bingos. + \item Lançamento de um dado, moeda. + \item Roleta de cassino. + \end{itemize} + \item Para uso em maior escala, são geralmente baseados em fenômenos + que geram um nÃvel baixo de rúido. + \begin{itemize} + \item RuÃdo termal. + \item RuÃdo fotoelétrico. + \item RuÃdo acústico. + \item Movimento browniano de partÃculas. + \end{itemize} + \item Os sinais precisam ser traduzidos para números (intensidade). + \item A distribuição da v.a. pode não ter forma conhecida. + \item A v.a. pode ter correlação serial. + \item São usados em criptografia. + \end{itemize} + + \framebreak + + {\large Números pseudo-aleatórios reais} + + \begin{itemize} + \item São gerados por programas de computador, ou seja, algorÃtmos. + \item Os número não são realmente aleatórios, pois, dado o algorÃtmo + gerador, pode-se prever os números (tem reprodutibilidade). + \item Do ponto de vista EstatÃstico, os números são imprevisÃveis. + \item Bons GNA terão propriedades interessantes para aplicações + EstatÃstica. + \end{itemize} + +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{Propriedades desejáveis de um GNA} + \begin{itemize} + \item Os valores gerados são completamente imprevisÃveis e passam em + testes de detecção de não aleatoriedade. + \item A distribuição da v.a. é matematicamente conhecida + (e.g. distribuição Uniforme). + \item O GNA produz v.a. que não apresentarem correlação serial, ou + seja, as realizações são independentes umas das outras. + \end{itemize} +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{AlgorÃtmos para GNA Uniformes} + + \begin{itemize} + \item Existem vários algorÃtmos para GNA. No R, existem 7 opções para + o algorÃtmo de GNA. + \item Peça \texttt{help(Random)} para consultar a respectiva documentação. + \end{itemize} + + {\large AlgorÃtmos disponÃveis no R} + + \mytwocolumns{0.49}{0.49}{ + \begin{itemize} + \item Wichmann-Hill. + \item Marsaglia-Multicarry. + \item Super-Duper. + \item Mersenne-Twister (\textit{default}). + \end{itemize} + }{ + \begin{itemize} + \item Knuth-TAOCP-2002. + \item Knuth-TAOCP. + \item L'Ecuyer-CMRG. + \end{itemize} + } + +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{GNA feito por mim} + + {\large AlgorÃtmo} + \begin{enumerate} + \item Definir um número $u_0 \in (0, 1)$ e atribuir $i = 0$. + \item Calcular $u_{i+1} = 0.5+0.5\sin(2\pi u_{i}).$ + \item Incrementar $i$ fazendo $i = i+1$. + \item Repetir 2--3 até obter a sequência de tamanho desejado. + \end{enumerate} + + {\large Atividades} + \begin{itemize} + \item Implemente em R o algorÃtmo acima. + \item Considere $x_0 = 0.3$ e gere 1000 números. + \item Inspecione a amostra de números varificar existência de + independência, periodicidade e forma da distribuição. + \end{itemize} +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{GNA de von Neumann} + + {\large Artigo} + + von Neumann, J. (1951). Various Techniques Used in Connection with + Random Digits. In the Monte Carlo Method (ed. A.S. Householder et al., + 36-38). \textbf{Nat. Bur. Standards Appl.} Math Ser. no. 12. + + {\large AlgorÃtmo} + + \begin{enumerate} + \item Definir um número $u_0$ de quadro digitos decimais e atribuir + $i = 0$. + \item Calcular $u_i^2$. Agregar zeros à esquerda, quando necessário, + para manter representação com 4 digitos: + $u_i^2 = d_7 d_6\ldots d_0$, onde cada $d_j$ é um inteiro entre 0 e + 9. + \item Fazer $u_{i+1} = d_5 d_4 d_3 d_2$. + \item Incrementar $i$ fazendo $i = i+1$. + \item Repetir 2--4 até obter a sequência de tamanho desejado. + \end{enumerate} + + Implemente e inspecione as propriedades deste GNA Uniformes. + +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{O método congruencial linear} + + O método congruencial linear é baseado na seguinte expressão recursiva + + \begin{equation} + u_{i + 1} = (a u_{i} + c) \!\!\mod m, + \end{equation} + + em que + \begin{itemize} + \item $u_i \in \mathbb{N}$ no intervalo $[0, m - 1]$, + \item $a \in \mathbb{N}^{+}$ é chamado de multiplicador, + \item $c \in \mathbb{N}^{+}$ é chamado de incremento, + \item $m \in \mathbb{N}^{+}$ é chamado de módulo. + \end{itemize} + + Se $a$, $c$ e $m$ forem adequadamente escolhidos, a cardinalidade do + conjunto de valores gerados é no máximo $m$. + +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}{Implementação e avaliação} + +Baseado nas orientações em \cite{ferreira2013estcompjava}. + + \begin{itemize} + \item Implemente e inspecione usando as configurações + \begin{itemize} + \item $u_0 = 7$, $a = 7$, $c = 7$ e $m = 10$. + \item $u_0 = 7$, $a = 7^5$, $c = 0$ e $m = 2^{31} - 1$ (Park \& Miller, 1988, apud \cite{ferreira2013estcompjava}). + \end{itemize} + \end{itemize} + + \cite{ferreira2013estcompjava} citando Schrage (1979), comenta que + \begin{equation} + a u_i \!\!\mod m = \begin{cases} + a (u_i \!\!\mod q) - r\lfloor u_i/q \rfloor & \text{se maior que } 0, \\ + a (u_i \!\!\mod q) - r\lfloor u_i/q \rfloor + m & \text{caso contr\'ario}, + \end{cases} + \end{equation} + é uma implementação mais portável para linguagens de baixo nÃvel. + + Em que $q = \lfloor m/a \rfloor$ e $r = m \!\!\mod a$, que resulta em + $m \approx aq + r$. + +\end{frame} + +%----------------------------------------------------------------------- + +\begin{frame}[fragile, allowframebreaks]{Implementação em R} + + {\large Método congruencial linear} + +<<eval = FALSE>>= +# a = 7^5 +# m = 2^31 - 1 +rand_congr0 <- function(n = 1, x0, a = 16807, m = 2147483647) { + if (missing(x0)) x0 <- as.integer(Sys.time()) + stopifnot(x0 < m) + n <- n + 1 + x <- vector(mode = "integer", length = n) + x[1] <- x0 + for (i in 2:n) { + x[i] <- (a * x[i - 1]) %% m + } + return(x[-1]) +} + +rand_congr0(n = 10, x0 = 321) +@ + + \framebreak + + {\large Método congruencial linear de Schrage} + +<<eval = FALSE>>= +rand_congr1 <- function(n = 1, x0) { + a <- 16807; m <- 2147483647; q <- 127773; r <- 2836 + # Verifique que: a * (321 %% q) == a * (321 - r * floor(321/q)). + if (missing(x0)) x0 <- as.integer(Sys.time()) + stopifnot(x0 < m) + n <- n + 1 + x <- vector(mode = "integer", length = n) + x[1] <- x0 + for (i in 2:n) { + k <- floor(x[i - 1]/q) + x[i] <- a * (x[i - 1] - k * q) - k * r + if (x[i] < 0) { + x[i] <- x[i] + m + } + } + return(x[-1]) +} +@ + +\end{frame} + +%----------------------------------------------------------------------- +{ + \usebackgroundtemplate{\includegraphics[height=\paperheight, width=\paperwidth]{../img/looking-ahead.jpg}} + % \setbeamersize{text margin left=30mm} + + \begin{frame}[b]{} + + \hspace*{0.5\linewidth} + \begin{minipage}[t]{0.5\linewidth} + + \hi{Próxima aula} + \begin{itemize} + \item Outros algorÃtmos para GNA Uniforme. + \item GNA de variáveis aleatórias discretas. + \item GNA de variáveis aleatórias contÃnuas. + \end{itemize} + + \hi{Avisos} + \begin{itemize} + \item Sabatina no Moodle do conteúdo da semana passada. + \item Notas das sabatinas já estão disponÃveis! + \end{itemize} + + \end{minipage} + +\end{frame} +} + +%----------------------------------------------------------------------- +\begin{frame}[t, fragile, allowframebreaks] + \frametitle{Referências bibliográficas} + + \printbibliography[heading=none] +\end{frame} + +%----------------------------------------------------------------------- +\end{document} -- GitLab