sexta-feira, fevereiro 18, 2005

Numeros aleatorios muito pouco aleatorios

Nos algoritmos em que ando a trabalhar, é indispensável o uso de números aleatórios durante para gerar a população inicial, ou no caso concreto do CGA, para gerar os cromossomas dos indivíduos que se confrontam. A utilização de um gerador fidedigno é essencial para o bom funcionamento. E o que deve ser um gerador fidedigno ? Por poucas palavras, é um gerador em que, dado um determinado intervalo dentro do qual se pretenda obter os valores aleatórios, a probabilidade de sair um número é exactamente idêntica à de outro qualquer. Para melhor compreender estes assuntos, suponhamos um intervalo entre 0 e 1, dividido em 100 partes, assim em princípio, se pedirmos ao gerador para criar um número aleatório 100 vezes, a probabilidade de calhar um número em cada um desses intervalos é de 1%. Se forem 1000 vezes, a frequência absoluta é de 10 e 10000 de 100. Quanto maior for a amostragem, mais as probabilidades de cada intervalo se equilibram entre si.
Deste modo, decidi correr um programa para decidir se o gerador era o mais fiável possível baseado no exemplo que descrevi acima, isto apesar de acordo, com a teoria, geradores aleatórios perfeitos são coisas que não existem. Submeti então ao programa o gerador de números aleatórios baseados no código que o meu orientador me forneceu, assim como o gerador que vem com a biblioteca da Java.
Deixo aqui uma imagem que ilustra o resultado do programa para algoritmo extraído do SGA e baseado no livro do Goldberg:

Acho que se pode concluir que o gerador não é assim tão mau !!!