Geração de Números Aleatórios

13
Universidade do Estado do Amazonas Escola Superior de Tecnologia - EST Constru¸ ao do Gerador de N´ umeros Aleat´ orios MLCG Modulo 2 64 Alunos Gabriel Sevalho Bruno Liliana Oliveira da Silva Matheus Miranda Matos Jhone Mendon¸ca Gomes Professor Ricardo da Silva Barbosa Manaus, 09 de abril de 2015

description

Construção de um Gerador de Números Aleatórios na Linguagem C

Transcript of Geração de Números Aleatórios

Page 1: Geração de Números Aleatórios

Universidade do Estado do AmazonasEscola Superior de Tecnologia - EST

Construcao do Gerador de Numeros Aleatorios MLCGModulo 264

Alunos Gabriel Sevalho BrunoLiliana Oliveira da SilvaMatheus Miranda MatosJhone Mendonca Gomes

Professor Ricardo da Silva Barbosa

Manaus, 09 de abril de 2015

Page 2: Geração de Números Aleatórios

Conteudo

1 Introducao 1

2 Do gerador MLCG Modulo 264 22.1 Caracterısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 O processo de programacao . . . . . . . . . . . . . . . . . . . . . 22.3 O algoritmo final . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3 Do RAND 43.1 A funcao rand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2 O codigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4 Do Teste Qui-Quadrado 54.1 Um pouco sobre . . . . . . . . . . . . . . . . . . . . . . . . . . . 54.2 Parametros Ultilizados . . . . . . . . . . . . . . . . . . . . . . . . 5

5 Resultados 7

6 Analise dos Resultados 96.1 MLCG Modulo 264 x RAND . . . . . . . . . . . . . . . . . . . . 9

7 Consideracoes Finais 10

8 Referencias 11

Page 3: Geração de Números Aleatórios

1 Introducao

O relatorio a seguir tem como tema central a construcao e analise do geradorsugerido durante uma aula do curso de Introducao a Metodos Probabilısticos.O proposito deste trabalho consiste em explanar de forma clara e concisa asdificuldades e duvidas encontradas durante o processo de construcao e, ainda,os resultados obtidos a partir dos dados coletados do algoritmo.

Sao destaques deste documento: Construcao e finalizacao do programa,Teste do Qui-Quadrado e comparacao entre o Gerador construıdo e o Geradordo Compilador, no que diz respeito ao tempo e a uniformidade dos numeros.

1

Page 4: Geração de Números Aleatórios

2 Do gerador MLCG Modulo 264

A definicao do gerador a ser construıdo aconteceu em sala de aula. Das 7(sete) possibilidades apresentadas no livro Numerical Recipes, a escolhida paraeste relatorio foi a 5a (quinta): o gerador (D) MLCG MODULO 264.

2.1 Caracterısticas

O MLCG Modulo 264 e um Gerador Congruente Linear Multiplicativo. OGerador Congruente Linear e uns dos algoritmos mais usados para geracao denumeros aleatorios e possui a formula de recorrencia abaixo:

xn+1 = (axn + c)(mod m) (1)

No caso do MLCG, c = 0, o que aumenta a eficiencia do programa em termos detempo para realizar uma tarefa, por nao ter que realizar a soma. Dessa forma,a sua formula de recorrencia se torna:

xn+1 = axn(mod m) (2)

As caracterısticas do programa deveriam estar de acordo com as seguintes su-gestoes (contidas no livro Numerical Recipes):

state: x (unsigned 64-bit)update: x ax (mod 264)

can use as random: x (high 32 bits, with caution)can use in bit mix: x (high 32 bits)

can improve by: output 64-bit xorshift successorperiod: 262

initialize: x 6= 0

2.2 O processo de programacao

Durante o processo de programacao, e claro, varias dificuldades apareceram.De inıcio, a questao da inicializacao das variaveis comecou a gerar duvidas:qual tipo usar? Inicializar com que valor? Depois de resolvidas essas questoes,o primeiro prototipo do programa comecou a “rodar”.

A primeira saıda do programa nao foi tao promissora: numeros confusose negativos. Apos constante trabalho, o algoritmo foi tomando forma, gracasa uma analise mais cuidadosa das caracterısticas definidas no livro. Posteri-ormente as saıdas se tornaram mais confiaveis, mas ainda nao corretas. Osnumeros gerados eram pares ou ımpares, o que demonstrava claramente quealgo estava errado no codigo. Com a ajuda do professor essa questao tambemfoi resolvida. Restava naquele momento, seguir as instrucoes, fazer os ajustes etestar mais uma vez.

Apos os ajustes, o algoritmo veio a se provar como quase correto e os testespoderiam comecar. Durantes estes, “picos” foram notados. Alguns numerosapareciam em maior quantidade. A solucao foi alternar o valor de a, o que noslevou, infelizmente, a notar picos diferentes. Essa, podemos dizer, e a possıvelcausa para a ma performance do programa durante a primeira bateria de testes.

2

Page 5: Geração de Números Aleatórios

Por fim, foi preciso alterar o programa mais vezes, para que esse finalmentese adequasse as condicoes especificadas e passasse em todos os testes do Qui-Quadrado. Ou seja, o algoritmo finalmente estava gerando numeros aleatorios.Os resultados apresentados neste relatorio provem da ultima versao do gerador,alterado no segundo dia de apresentacao.

2.3 O algoritmo final

O MLCG Modulo 264 gera numeros com base no tempo. Essa condicao eimplementada atribuindo a x, semente do programa, o tempo do computador.Ha um vetor que conta a ocorrencia de cada numero, alem de mecanismospara indicar o tempo de execucao e o valor do Qui-Quadrado. Assim como umponteiro para guardar esses dados em arquivo .txt.

3

Page 6: Geração de Números Aleatórios

3 Do RAND

Alem de construir um gerador proprio ainda deveria ser feito um codigo,para geracao de numeros aleatorios, usando a funcao rand da Linguagem C.

3.1 A funcao rand

A funcao rand (o nome e uma abreviatura de random), definida na bibliotecastdlib, gera numeros aleatorios. Cada invocacao da funcao produz um numeroaleatorio em um intervalo fechado. O rand geraria a mesma sequencia, toda vezque compilassemos o programa, se nao trocassemos o valor da semente usada nafuncao. Por isso e importante especificar a semente por meio da funcao srand,que recebe um unsigned int como argumento e esta na biblioteca stdlib.

3.2 O codigo

O codigo para o gerador rand, em si, e bem simples. O rand gera numeros apartir do tempo, ha um vetor que conta a ocorrencia, mecanismos para indicaro tempo de execucao e o valor do Qui-Quadrado, bem como um ponteiro paraguardar esses dados em arquivo .txt.

4

Page 7: Geração de Números Aleatórios

4 Do Teste Qui-Quadrado

Apos a finalizacao do algoritmo para geracao de numeros aleatorios, deve-riam ser feitos testes, em evolucao, para atestar a “aleatoriedade” dos mesmos.A hipotese partiu da ideia de que os numeros eram aleatorios e cabia ao exameindicar se a hipotese era verdadeira ou nao.

4.1 Um pouco sobre

O Teste Qui-Quadrado e usado principalmente para atestar se duas variaveisestao ou nao amarradas por uma relacao de dependencia. Neste caso, consisteem comparar os dados obtidos experimentalmente com os dados esperados. Dascomparacoes surgem diferencas – que podem ser grandes ou pequenas. Se fo-rem grandes, a H0 (que pressupoe “bom” ajustamento) devera ser rejeitada emfavor da Ha; se forem pequenas, a H0 nao sera rejeitada e as diferencas seraoatribuıveis ao acaso. A formula para calcular o valor do Qui-Quadrado e aseguinte:

χ2 =

n∑k=1

(Ok − Ek)2

Ek(3)

Onde Ok e Ek sao as frequencias observada e esperada, respectivamente.Depois de calculado o valor do χ2 observado , e preciso fazer uma comparacaocom um χ2 crıtico. Essa comparacao indicara se a hipotese podera ser aceitaou nao. A escolha do χ2 crıtico e apresentada na proxima secao.

4.2 Parametros Ultilizados

As escolhas dos parametros foram feitas de acordo com a indicacao do livroStatistics in a Nutshell, juntamente com a escolha do grau de liberdade e numerode classes. Assim sendo, ficou definido como se segue:

n = 10 (numero de classes: algorismos de 0 a 9)graus de liberdade = n - 1 = 9

Figura 1: Valor de α

5

Page 8: Geração de Números Aleatórios

Na Fig. 1, vemos que o valor de α a ser empregado e de 0,025. Usandoesse valor podemos observar na Fig. 2 que o valor de χ2 crıtico para 9 graus deliberdade e um α = 0, 025 e 19,023.

Figura 2: Valor χ2 crıtico

6

Page 9: Geração de Números Aleatórios

5 Resultados

A seguir sao mostrados os resultados de 20 tentativas em cada gerador, paraamostras de diferentes quantidades.

Apresentamos os resultados do MLCG Modulo 264 nas primeiras colunas, edo RAND nas restantes.

MLCG Modulo 264 — RAND

Tentativa χ2 T χ2 T1 8,99 4 6,42 22 15,41 9 7,21 03 10,22 10 2,57 04 16,07 0 9,46 95 7,23 10 9,18 06 16,63 0 5,63 07 3,07 0 13,03 108 7,01 10 4,71 09 5,40 9 10,87 010 4,12 0 5,44 1011 4,53 9 5,14 012 7,40 0 7,32 1013 7,47 10 6,83 014 7,71 0 7,02 015 13,32 0 11,18 016 7,47 0 7,47 017 10,75 0 16,65 018 4,83 10 13,39 019 12,16 0 4,36 020 8,14 0 17,98 0

Tabela 1: Resultados para 100000 (cem mil) numeros gerados;

Mostrando os numeros em evolucao, temos os resultados para 10x e 100xmais numeros.

Sendo o valor de χ2, o observado e T, o tempo que cada algoritmo levoupara gerar a dada quantidade de numeros.

7

Page 10: Geração de Números Aleatórios

Tentativa χ2 T χ2 T1 3,38 40 7,26 302 4,92 40 11,31 203 9,90 40 14,52 204 7,78 40 2,26 305 7,95 50 10,06 206 8,29 50 13,45 207 13,36 40 13,70 208 12,29 50 9,30 209 5,56 40 4,77 2010 11,81 40 10,40 2011 7,46 40 6,08 2012 7,70 40 11,50 2013 6,93 40 6,21 2014 8,65 50 1,83 2015 12,32 40 10,97 2016 7,76 50 8,29 2017 7,10 50 3,61 2018 6,27 40 9,35 2019 4,07 40 5,98 2020 4,50 41 1,86 20

Tabela 2: Resultados para 1000000 (um milhao) de numeros gerados;

Tentativa χ2 T χ2 T1 3,38 40 7,26 302 4,92 40 11,31 203 9,90 40 14,52 204 7,78 40 2,26 305 7,95 50 10,06 206 8,29 50 13,45 207 13,36 40 13,70 208 12,29 50 9,30 209 5,56 40 4,77 2010 11,81 40 10,40 2011 7,46 40 6,08 2012 7,70 40 11,50 2013 6,93 40 6,21 2014 8,65 50 1,83 2015 12,32 40 10,97 2016 7,76 50 8,29 2017 7,10 50 3,61 2018 6,27 40 9,35 2019 4,07 40 5,98 2020 4,50 41 1,86 20

Tabela 3: Resultados para 10000000 (dez milhoes) de numeros gerados;

8

Page 11: Geração de Números Aleatórios

6 Analise dos Resultados

Como parte da tarefa, ainda foi proposta uma comparacao entre o gerador denumero aleatorios da Linguagem C (rand) e, o gerador arquitetado pelos alunos.A comparacao sera feita, principalmente, com base no tempo de execucao decada um dos algoritmos. Portanto, nessa secao serao analisados os resultadostanto para o MLCG Modulo 264 quanto para o RAND.

6.1 MLCG Modulo 264 x RAND

Tanto no MLCG Modulo 264 , quanto no gerador da Linguagem C (RAND),foram instalados mecanismos para obtencao exata do tempo de execucao. Dessamaneira podemos mostrar os tempos para geracao de dada quantidade de numeros,organizados em uma tabela, assim como os valores para o Teste Qui-Quadrado,para o MLCG Modulo 264 e o RAND, respectivamente:

Quantidade de numeros Media χ2 Media T Media χ2 Media T100000 8,90 4,05 8,59 2,051000000 7,90 43,05 8,14 21,0010000000 7,93 410,40 8,87 209,50

Tabela 4: Medias para o tempo e valor χ2 observado

Tomando o valor χ2 crıtico = 19,023, tanto o MLCG Modulo 264 quantoo RAND apresentaram medias menores que valor de χ2 crıtico , sendo que oprimeiro possui valores menores, mais distantes dos desvios e mais proximosdo mais aleatorio possıvel. Portanto, podemos dizer que ambos os algoritmosgeram numeros aleatorios, sendo o MLCG Modulo 264.

Em relacao ao tempo, o RAND levou, em media, metade do tempo pararealizar a tarefa.

9

Page 12: Geração de Números Aleatórios

7 Consideracoes Finais

Finalizamos este relatorio com a certeza de que a maioria dos objetivospropostos inicialmente foi comprida com exito. Foram enunciados os aspectosmais importantes durante o processo de construcao validacao do MLCG Modulo264, como um gerador eficiente de numeros aleatorios.

Decerto os resultados obtidos foram bastante consistente, e apontem que oMLCG Modulo 264 e capaz de gerar numeros aleatorios, mesmo que seja maislento. O indivıduo que optar por usar esse metodo tera de ser bastante cuidadosoem relacao a escolha de seus valores e estar muito atento as saıdas do programa.Tudo isso dependendo do seu empenho para melhorar o desempenho e conseguira melhor performance possıvel do algoritmo.

O MLCG Modulo 264 apresentou varias problemas durante a sua cons-trucao, principalmente em consequencia das dificuldades na implementacao doprograma de maneira correta. Mesmo com todas as dificuldades, foi possıvelfinalizar o algoritmo e realizar todos os testes necessarios.

Por ultimo, vale ressaltar a importancia dessa tarefa, que nos possibilitouconhecer uma area da Computacao muito interessante, liga a Probabilidade. Po-demos dizer, sem duvida, que foi uma experiencia muito boa, nos evidenciando,acima de tudo, como os problemas podem ser na realidade.

10

Page 13: Geração de Números Aleatórios

8 Referencias

[1] WILLIAM, Press et al. NUMERICAL RECIPES The Art of ScientificComputing. 3rd Ed. United States of America: Cambridge University Press,2007.

[2] BOSLAUGH, Sarah. STATISTICS IN A NUTSHELL. 2nd Ed. UnitedStates of America, 2012.

11