Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida Random.Seed()

Não sei se entendi o Seed() corretamente. Alguém poderia me explicar como funciona e qual situação poderia usar?

4 respostas

Romeu, tudo bom?

Vou tentar. Você precisa gerar um número randômico (pseudo-randômico na verdade) e para isso tem lá o método randrange() para isso. Toda vez que você chamar o método ele vai te mostrar valores diferentes, claro, dentro dos que você propôs para ele. Afinal, é randômico.

Agora pensa no seguinte cenário, eu quero se o algoritmo A é mais rápido que o algoritmo B, ambos com entradas randômicas. Não seria muito justo comparar A com B usando elementos randômicos diferentes, então eu preciso garantir que eles sejam comparados com entradas randômicas iguais. Para isso eu uso o seed(). Ele "fixa" a minha randomização garantindo que a amostra randomizada para A será a mesma amostra randomizada para B o que me garante uma comparação justa.

Então é como se eu definisse o número de dados que jogarei para tirar um número aleatório, correto?

Se eu falo que vou jogar 3 dados sempre, então a base para todos os meus número aleatórios são iguais.

A função Random() sem o Seed() pode usar na primeira vez 3 dados e na segunda 14 dados.

É isso?

Fiz um teste aqui enquanto eu estava respondendo e fiquei confuso:

random.seed(30)
print ("Teste(1):", random.randint(25,50))

random.seed(30)
print ("Teste(2):", random.randint(25,50))

random.seed(30)
print ("Teste(3): ", random.randint(25,50))

Todos os resultados foram o número 42. Se eu vou receber sempre o número 42 então a função Random() deixa de se aleatória, não?

solução!

Romeu, não é que deixa de ser aleatório, se você pedir mais valores eles serão selecionados aleatoriamente. Acontece que é mais como se você "voltasse no tempo".

Pensando que eu tenho um seed (semente) definido eu peço para gerar 3 números aleatórios no primeiro ciclo:

[1,10,2]

Num segundo ciclo eu peço para gerar novamente, mas agora peço 5 números:

[1,10,2,7,3]

Por fim um terceiro ciclo com 6 números aleatórios:

[1,10,2,7,3,0]

Percebe que no segundo ciclo eu sabia muito bem quais seriam os 3 primeiros números aleatório [1,10,2] pq eu "voltei no tempo", mas eu não sabia quais seriam os dois próximos pq eu ainda não os tinha sorteado aleatoriamente. O mesmo para o terceiro ciclo, eu sabia quais seriam os 5 primeiros números, mas não o seguinte que foi escolhido aleatoriamente.

Só para fechar, a gente sempre fala números pseudo-aleatórios, e esse vídeo vai te ajudar a entender o pq disso:

https://www.youtube.com/watch?v=LqXnpIn2Uxs&list=WL&index=102&t=0s

Eu vi esse vídeo e compreendi do por quê os números não serem realmente aleatórios pois são baseados em algo programado. Vi até o site lá que gera os número com aleatoriedade real.

Eu entendi agora a aplicabilidade da função, é uma função que sei qual os número aleatórios virão.

Acho que esse Seed() exemplifica claramente o pseudo-aleatório. Isso já acontece por baixo dos panos, como o vídeo até fala, mas fica evidente com o Seed().. Tecnicamente o computador de vários Seed() e escolhe algum para retornar e achamos que é aleatório. Ficou bem claro agora.

Saquei, valeu pela explicação. Minha maior dúvida foi como aplicar isso. Não estava entendendo, mas depois dessa última explicação ficou mais claro.

Obrigado Ronald!