Skip to content
Snippets Groups Projects
Commit aa33bf42 authored by Walmes Marques Zeviani's avatar Walmes Marques Zeviani
Browse files

Adiciona slides sobre GNA Uniforme.

parent f94c899e
No related branches found
No related tags found
No related merge requests found
...@@ -29,6 +29,12 @@ navbar: ...@@ -29,6 +29,12 @@ navbar:
href: slides/01-revis-program.pdf href: slides/01-revis-program.pdf
- text: "Doc. e avaliação de código." - text: "Doc. e avaliação de código."
href: slides/02-docum-codigo.pdf 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" # - text: "Estruturas de controle"
# href: slides/01-estru-repet.html # href: slides/01-estru-repet.html
# - text: "Teorema da Transformação da Probabilidade" # - text: "Teorema da Transformação da Probabilidade"
......
%-----------------------------------------------------------------------
\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}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment