Você está na página 1de 13

Universidade do Estado do Amazonas

Escola Superior de Tecnologia - EST

Construc
ao do Gerador de N
umeros Aleat
orios MLCG
Modulo 264

Alunos

Gabriel Sevalho Bruno


Liliana Oliveira da Silva
Matheus Miranda Matos
Jhone Mendonca Gomes

Professor

Ricardo da Silva Barbosa

Manaus, 09 de abril de 2015

Conte
udo
1 Introdu
c
ao

gerador MLCG Modulo 264


Caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O processo de programacao . . . . . . . . . . . . . . . . . . . . .
O algoritmo final . . . . . . . . . . . . . . . . . . . . . . . . . . .

2
2
2
3

3 Do RAND
3.1 A func
ao rand . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 O c
odigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4
4

4 Do Teste Qui-Quadrado
4.1 Um pouco sobre . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Par
ametros Ultilizados . . . . . . . . . . . . . . . . . . . . . . . .

5
5
5

5 Resultados

6 An
alise dos Resultados
6.1 MLCG Modulo 264 x RAND . . . . . . . . . . . . . . . . . . . .

9
9

2 Do
2.1
2.2
2.3

7 Considera
c
oes Finais

10

8 Refer
encias

11

Introdu
c
ao

O relat
orio a seguir tem como tema central a construcao e analise do gerador
sugerido durante uma aula do curso de Introducao a Metodos Probabilsticos.
O prop
osito deste trabalho consiste em explanar de forma clara e concisa as
dificuldades e d
uvidas encontradas durante o processo de construcao e, ainda,
os resultados obtidos a partir dos dados coletados do algoritmo.
S
ao destaques deste documento: Construcao e finalizacao do programa,
Teste do Qui-Quadrado e comparacao entre o Gerador construdo e o Gerador
do Compilador, no que diz respeito ao tempo e a uniformidade dos n
umeros.

Do gerador MLCG Modulo 264

A definic
ao do gerador a ser construdo aconteceu em sala de aula. Das 7
(sete) possibilidades apresentadas no livro Numerical Recipes, a escolhida para
este relat
orio foi a 5a (quinta): o gerador (D) MLCG MODULO 264 .

2.1

Caractersticas

O MLCG Modulo 264 e um Gerador Congruente Linear Multiplicativo. O


Gerador Congruente Linear e uns dos algoritmos mais usados para geracao de
n
umeros aleat
orios 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 de


tempo para realizar uma tarefa, por nao ter que realizar a soma. Dessa forma,
a sua f
ormula de recorrencia se torna:
xn+1 = axn (mod

m)

(2)

As caractersticas do programa deveriam estar de acordo com as seguintes sugest


oes (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 successor
period: 262
initialize: x 6= 0

2.2

O processo de programac
ao

Durante o processo de programacao, e claro, varias dificuldades apareceram.


De incio, a quest
ao da inicializacao das variaveis comecou a gerar d
uvidas:
qual tipo usar? Inicializar com que valor? Depois de resolvidas essas questoes,
o primeiro prot
otipo do programa comecou a rodar.
A primeira sada do programa nao foi tao promissora: n
umeros confusos
e negativos. Ap
os constante trabalho, o algoritmo foi tomando forma, gracas
a uma an
alise mais cuidadosa das caractersticas definidas no livro. Posteriormente as sadas se tornaram mais confiaveis, mas ainda nao corretas. Os
n
umeros gerados eram pares ou mpares, o que demonstrava claramente que
algo estava errado no c
odigo. Com a ajuda do professor essa questao tambem
foi resolvida. Restava naquele momento, seguir as instrucoes, fazer os ajustes e
testar mais uma vez.
Ap
os os ajustes, o algoritmo veio a se provar como quase correto e os testes
poderiam comecar. Durantes estes, picos foram notados. Alguns n
umeros
apareciam em maior quantidade. A solucao foi alternar o valor de a, o que nos
levou, infelizmente, a notar picos diferentes. Essa, podemos dizer, e a possvel
causa para a m
a performance do programa durante a primeira bateria de testes.

Por fim, foi preciso alterar o programa mais vezes, para que esse finalmente
se adequasse as condic
oes especificadas e passasse em todos os testes do QuiQuadrado. Ou seja, o algoritmo finalmente estava gerando n
umeros aleatorios.
Os resultados apresentados neste relatorio provem da u
ltima versao do gerador,
alterado no segundo dia de apresentacao.

2.3

O algoritmo final

O MLCG Modulo 264 gera n


umeros com base no tempo. Essa condicao e
implementada atribuindo a x, semente do programa, o tempo do computador.
H
a um vetor que conta a ocorrencia de cada n
umero, alem de mecanismos
para indicar o tempo de execucao e o valor do Qui-Quadrado. Assim como um
ponteiro para guardar esses dados em arquivo .txt.

Do RAND

Alem de construir um gerador proprio ainda deveria ser feito um codigo,


para gerac
ao de n
umeros aleatorios, usando a funcao rand da Linguagem C.

3.1

A func
ao rand

A func
ao rand (o nome e uma abreviatura de random), definida na biblioteca
stdlib, gera n
umeros aleat
orios. Cada invocacao da funcao produz um n
umero
aleat
orio em um intervalo fechado. O rand geraria a mesma sequencia, toda vez
que compil
assemos o programa, se nao trocassemos o valor da semente usada na
func
ao. 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 c
odigo

O c
odigo para o gerador rand, em si, e bem simples. O rand gera n
umeros a
partir do tempo, h
a um vetor que conta a ocorrencia, mecanismos para indicar
o tempo de execuc
ao e o valor do Qui-Quadrado, bem como um ponteiro para
guardar esses dados em arquivo .txt.

Do Teste Qui-Quadrado

Ap
os a finalizac
ao do algoritmo para geracao de n
umeros aleatorios, deveriam ser feitos testes, em evolucao, para atestar a aleatoriedade dos mesmos.
A hip
otese partiu da ideia de que os n
umeros eram aleatorios e cabia ao exame
indicar se a hip
otese era verdadeira ou nao.

4.1

Um pouco sobre

O Teste Qui-Quadrado e usado principalmente para atestar se duas variaveis


est
ao ou n
ao amarradas por uma relacao de dependencia. Neste caso, consiste
em comparar os dados obtidos experimentalmente com os dados esperados. Das
comparac
oes surgem diferencas que podem ser grandes ou pequenas. Se forem grandes, a H0 (que pressupoe bom ajustamento) devera ser rejeitada em
favor da Ha ; se forem pequenas, a H0 nao sera rejeitada e as diferencas serao
atribuveis ao acaso. A f
ormula para calcular o valor do Qui-Quadrado e a
seguinte:
2 =

n
X
(Ok Ek )2
k=1

Ek

(3)

Onde Ok e Ek s
ao as frequencias observada e esperada, respectivamente.
Depois de calculado o valor do 2 observado , e preciso fazer uma comparacao
com um 2 crtico. Essa comparacao indicara se a hipotese podera ser aceita
ou n
ao. A escolha do 2 crtico e apresentada na proxima secao.

4.2

Par
ametros Ultilizados

As escolhas dos par


ametros foram feitas de acordo com a indicacao do livro
Statistics in a Nutshell, juntamente com a escolha do grau de liberdade e n
umero
de classes. Assim sendo, ficou definido como se segue:
n = 10 (n
umero de classes: algorismos de 0 a 9)
graus de liberdade = n - 1 = 9

Figura 1: Valor de

Na Fig. 1, vemos que o valor de a ser empregado e de 0,025. Usando


esse valor podemos observar na Fig. 2 que o valor de 2 crtico para 9 graus de
liberdade e um = 0, 025 e 19,023.

Figura 2: Valor 2 crtico

Resultados

A seguir s
ao mostrados os resultados de 20 tentativas em cada gerador, para
amostras de diferentes quantidades.
Apresentamos os resultados do MLCG Modulo 264 nas primeiras colunas, e
do RAND nas restantes.
MLCG Modulo 264 RAND
Tentativa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

2
8,99
15,41
10,22
16,07
7,23
16,63
3,07
7,01
5,40
4,12
4,53
7,40
7,47
7,71
13,32
7,47
10,75
4,83
12,16
8,14

T
4
9
10
0
10
0
0
10
9
0
9
0
10
0
0
0
0
10
0
0

2
6,42
7,21
2,57
9,46
9,18
5,63
13,03
4,71
10,87
5,44
5,14
7,32
6,83
7,02
11,18
7,47
16,65
13,39
4,36
17,98

T
2
0
0
9
0
0
10
0
0
10
0
10
0
0
0
0
0
0
0
0

Tabela 1: Resultados para 100000 (cem mil) n


umeros gerados;
Mostrando os n
umeros em evolucao, temos os resultados para 10x e 100x
mais n
umeros.
Sendo o valor de 2 , o observado e T, o tempo que cada algoritmo levou
para gerar a dada quantidade de n
umeros.

Tentativa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

2
3,38
4,92
9,90
7,78
7,95
8,29
13,36
12,29
5,56
11,81
7,46
7,70
6,93
8,65
12,32
7,76
7,10
6,27
4,07
4,50

T
40
40
40
40
50
50
40
50
40
40
40
40
40
50
40
50
50
40
40
41

2
7,26
11,31
14,52
2,26
10,06
13,45
13,70
9,30
4,77
10,40
6,08
11,50
6,21
1,83
10,97
8,29
3,61
9,35
5,98
1,86

T
30
20
20
30
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20

Tabela 2: Resultados para 1000000 (um milhao) de n


umeros gerados;

Tentativa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

2
3,38
4,92
9,90
7,78
7,95
8,29
13,36
12,29
5,56
11,81
7,46
7,70
6,93
8,65
12,32
7,76
7,10
6,27
4,07
4,50

T
40
40
40
40
50
50
40
50
40
40
40
40
40
50
40
50
50
40
40
41

2
7,26
11,31
14,52
2,26
10,06
13,45
13,70
9,30
4,77
10,40
6,08
11,50
6,21
1,83
10,97
8,29
3,61
9,35
5,98
1,86

T
30
20
20
30
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20

Tabela 3: Resultados para 10000000 (dez milhoes) de n


umeros gerados;

An
alise dos Resultados

Como parte da tarefa, ainda foi proposta uma comparacao entre o gerador de
n
umero aleat
orios da Linguagem C (rand) e, o gerador arquitetado pelos alunos.
A comparac
ao ser
a feita, principalmente, com base no tempo de execucao de
cada um dos algoritmos. Portanto, nessa secao serao analisados os resultados
tanto 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. Dessa
maneira podemos mostrar os tempos para geracao de dada quantidade de n
umeros,
organizados em uma tabela, assim como os valores para o Teste Qui-Quadrado,
para o MLCG Modulo 264 e o RAND, respectivamente:
Quantidade de n
umeros
100000
1000000
10000000

Media 2
8,90
7,90
7,93

Media T
4,05
43,05
410,40

Media 2
8,59
8,14
8,87

Media T
2,05
21,00
209,50

Tabela 4: Medias para o tempo e valor 2 observado


Tomando o valor 2 crtico = 19,023, tanto o MLCG Modulo 264 quanto
o RAND apresentaram medias menores que valor de 2 crtico , sendo que o
primeiro possui valores menores, mais distantes dos desvios e mais proximos
do mais aleat
orio possvel. Portanto, podemos dizer que ambos os algoritmos
geram n
umeros aleat
orios, sendo o MLCG Modulo 264 .
Em relac
ao ao tempo, o RAND levou, em media, metade do tempo para
realizar a tarefa.

Considera
co
es Finais

Finalizamos este relat


orio com a certeza de que a maioria dos objetivos
propostos inicialmente foi comprida com exito. Foram enunciados os aspectos
mais importantes durante o processo de construcao validacao do MLCG Modulo
264 , como um gerador eficiente de n
umeros aleatorios.
Decerto os resultados obtidos foram bastante consistente, e apontem que o
MLCG Modulo 264 e capaz de gerar n
umeros aleatorios, mesmo que seja mais
lento. O indivduo que optar por usar esse metodo tera de ser bastante cuidadoso
em relac
ao a escolha de seus valores e estar muito atento as sadas do programa.
Tudo isso dependendo do seu empenho para melhorar o desempenho e conseguir
a melhor performance possvel do algoritmo.
O MLCG Modulo 264 apresentou varias problemas durante a sua construc
ao, principalmente em consequencia das dificuldades na implementacao do
programa de maneira correta. Mesmo com todas as dificuldades, foi possvel
finalizar o algoritmo e realizar todos os testes necessarios.
Por u
ltimo, vale ressaltar a importancia dessa tarefa, que nos possibilitou
conhecer uma
area da Computacao muito interessante, liga `a Probabilidade. Podemos dizer, sem d
uvida, que foi uma experiencia muito boa, nos evidenciando,
acima de tudo, como os problemas podem ser na realidade.

10

Refer
encias

[1] WILLIAM, Press et al. NUMERICAL RECIPES The Art of Scientific


Computing. 3rd Ed. United States of America: Cambridge University Press,
2007.
[2] BOSLAUGH, Sarah. STATISTICS IN A NUTSHELL. 2nd Ed. United
States of America, 2012.

11

Você também pode gostar