Integrando o Mersenne Twister com o NS2/Procedimentos
Introdução
[editar | editar código-fonte]A disponibilidade de números aleatórios é extremamente útil em uma variedade de situações, como nas simulações de fenômenos físicos (indo desde a física nuclear até engenharia de sistemas), em amostragem de uma população, na programação de computadores, na tomada de decisões ou até mesmo em entretenimento (bingos, loterias ou jogos). Na área de simulação, consideremos, por exemplo, a modelagem do tempo de acesso de um disco rígido, num computador pessoal. Podemos determinar que a duração desse evento irá ficar numa faixa conhecida, digamos de 0 a 200ms, de acordo com características físicas inerentes ao próprio disco rígido. Entretanto, o valor real desse evento vai depender de vários fatores, como a posição da cabeça de leitura quando a requisição é feita pelo sistema operacional, detalhes espúrios da implementação do suporte à controladora no sistema e até mesmo da temperatura e outras condições ambientais. Podemos considerar então que esse tempo de acesso é uma variável aleatória seguindo uma distribuição conveniente, e simulamos com o objetivo de ver se nosso modelo adere a realidade. Para fazermos essa simulação precisamos de números aleatórios que sigam essa dada distribuição, e para isso precisamos saber primeiro como gerar esses números aleatórios.
Objetivo
[editar | editar código-fonte]Integrar o gerador de pseudo números aleatórios Mersenne Twister com o NS2
No desenvolvimento do trabalho vamos estudar o algoritmo para geração de números aleatórios do Mersenne Twister e, em seguida, vamos estudar também alguns testes de aleatoriedade, que nos fornecem um meio objetivo de verificar a aleatoriedade de uma seqüência. Vamos também implementar alguns desses métodos e fazer testes para verificar como eles se comportam.
Metodologia
[editar | editar código-fonte]Para tal experimento, utilizaremos um computador dual core.
Usando o NS2.29 com o Akaroa, rodaremos algoritmos que comprovadamente necessitam de números pseudo-aleatórios de qualidade para gerarem resultados satisfatórios. O experimento vai se basear em testar a qualidade dos números aleatórios gerados pelo Mersenne Twister.
Justificativa
[editar | editar código-fonte]Para um simulador gerar resultados próximos da realidade, seu gerador de número aleatório deve ser o mais confiável possível. Este projeto visa integrar ao simulador um gerador de números aleatório com resultados mais confiáveis (Mersenne Twister) para que a simulação seja o mais próximo do valor teórico possível.
Nível do curso
[editar | editar código-fonte]Superior. Simulação de Sistemas.
Pré-Requisito
[editar | editar código-fonte]Ter instalado o NS 2.29.3 com o akaroa 2.7.6 ewrwer wer we rw er wer we r wer we r we rw r
Procedimentos de integração
[editar | editar código-fonte]Faça o download Mersenne Twister no website: http://wwwpersonal.umich.edu/~wagnerr/MersenneTwister.html
Após desconpactar, na pasta do Mersenne, será necessário alterar o Makefile.in do NS2. Faça o seguinte:
Dentro da pasta do NS2, no caso o nsallinone2.29/ns2.29/ se encontra o Makefile.in
Edite o Makefile.in e adicione nos INCLUDES a linha: -I/caminho da pasta do Mersenne. No meu caso, como o Mersenne estava no meu /home, a linha adicionada foi: -I/home/caloa/Mersenne
obs.: Não esqueça de colocar a “ \ “ na linha anterior à nova linha.
Incluido o Mersenne no Makefile.in, podemos agora modificar o código do akaroa para usar o Mersenne Twister em vez do gerador de código padrão.
Edite o arquivo akaroa.cc, que se encontra dentro da pasta /nsallinone2.29/ns2.29/tools.
Inclua a seguinte linha após o último “#include”:
#include "MersenneTwister.h";
Agora procure o método:
long next()
Logo acima dele, inclua o código:
MTRand mtrand1;
Agora, dentro do método long next() existirá a linha:
seed_ = ((long) ((unsigned long) ( ((unsigned long)(MAXINT+1)) * AkRandomReal())));
Substitua o AkRandomReal() por mtrand1(). A linha deve ficar assim:
seed_ = ((long) ((unsigned long) ( ((unsigned long)(MAXINT+1)) * mtrand1())));
Agora, dentro do método double next_double(), faça a mesma substituição. return AkRandomReal();
Deve ficar:
return mtrand1();
Após estas alterações, faça dentro da pasta do /nsallinone2.29/ns2.29 os seguintes comandos:
./configure e espere terminar.
./make clean e espere terminar.
./make e espere terminar.
./install e espere terminar.
Caso as instruções tenham sido seguidas corretamente, o ns2 estará funcionando com seu novo gerador de número aleatório.
Para fazer um teste, faça o download do arquivo de teste: http://www.tkn.tuberlin.de/research/ns2_akaroa2/mm1.tcl
Para executar, o comando é:
ns mm1.tcl
Conclusões
[editar | editar código-fonte]Usamos para o experimento, vários tipo de filas. Foram eles: MEK1, MHK1 e MMMKM.
Executamos todas as filas, tanto com o gerador padrão do NS2 quanto com o NS2 já modificado com o gerador de números pseudo-aleatórios Mersenne Twister.
Os resultados utilizando o Mersenne foram um pouco melhores que utilizando o gerador nativo do NS2 com todas as filas experimentadas. Porém, conhecendo a possibilidade de usar vários geradores de números em conjunto com o NS2, nos dá uma grande abertura para experimentar outros geradores e buscar cada vez mais, melhores e mais eficientes resultados.