Nem tão aleatório assim…


O que você pensa quando falamos em algo aleatório? Um dado? Um jogo de cara ou coroa? Algo totalmente imprevisível?

Até pouco mais de 100 anos atrás, a grande maioria dos cientistas acreditava que a física era completamente determinística, ou seja, que se você for capaz de considerar a força com que o dado é jogado, o vento, a temperatura, a rugosidade da superfície em que ele bate e todos os mínimos detalhes que podem influenciar na sua trajetória, você pode prever, sem nenhuma dúvida, qual face estará voltada para cima quando o dado parar. Da mesma forma, você poderia prever qualquer fenômeno da natureza, contanto que você tivesse informações o suficiente.

Essa ideia mudou após o surgimento da mecânica quântica, com a Interpretação de Copenhague, que diz que um estado quântico só pode ser determinado no momento em que ele for medido, e que até então ele pode ser qualquer um. Nesse sentido, o spin de um átomo pode estar apontando para cima ou para baixo no momento em que você mede, mas isso não é determinado até que a medida seja feita, ou seja, é algo “completamente” aleatório. As condições do ambiente ao redor não podem determinar se esse spin será para cima ou para baixo, apenas alterar a probabilidade de se medir uma delas (pode ser mais provável medir o spin para cima do que para baixo, assim como em um dado viciado).

Hoje nós utilizamos 3 conceitos diferentes para falar sobre a determinação de um evento: (i) se nós podemos determinar facilmente o resultado de um evento, conhecendo as condições iniciais, nós chamamos o evento de “previsível” ou “determinístico”, por exemplo, a trajetória de uma bala, disparada por uma arma; (ii) se um sistema depende tanto das condições iniciais, que é impossível prever com exatidão o resultado final, nós dizemos que o sistema é caótico, o clima, por exemplo, que pode ser previsto com bastante precisão para amanhã, mas certamente não para o mês que vem; por último temos os sistemas aleatórios, cujo resultado pode depender das condições iniciais, mas não pode ser determinado por elas.

Mas o que quer dizer que um sistema aleatório pode depender de condições iniciais e qual a relação disso com programação? Números aleatórios são extremamente importantes para a programação. Eles servem desde base para que jogos não sejam sempre iguais, como para alimentar variações em um algoritmo genético. O que a maior parte das pessoas não sabe é que os números aleatórios gerados por computadores não são realmente aleatórios. Os números gerados dependem de um número inicial chamado de “semente” e, depois de uma quantidade determinada de números gerados, eles voltam a repetir, afinal, gerar um número realmente aleatório não é algo simples, mas algo que só um computador quântico é capaz.

No entanto, isso não é necessariamente um problema. Uma das coisas mais importantes em programação é testar o seu código várias vezes, em vários sistemas. Nesse sentido, poder repetir os números gerados “aleatoriamente” é importante para garantir que o resultado final seja o mesmo, e isso pode ser feito se utilizarmos a mesma “semente” no gerador de números aleatórios. Na hora de executar o programa final, para garantir uma certa aleatoriedade, tudo que precisamos é usar uma semente diferente e trocar de tempo em tempo. O que os programas normalmente fazem é utilizar algo único como semente, por exemplo, a data do seu computador, incluindo horas, minutos e segundos, no momento em que o programa é executado.

Para saber mais sobre essa e outras práticas computacionais venha conhecer nossos cursos na Let’s Code Academy.