Estou um pouco confuso sobre o que random.seed()
faz em Python. Por exemplo, por que os ensaios abaixo fazem o que fazem (de forma consistente)?
>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7
Não consegui encontrar boa documentação sobre isso.
python
random
random-seed
Ahaan S. Rungta
fonte
fonte
random.seed
. Normalmente, você invocarandom.seed()
e usa o tempo atual como valor inicial, o que significa que sempre que você executa o script, obtém uma sequência diferente de valores.Respostas:
Geradores de números pseudo-aleatórios funcionam executando alguma operação em um valor. Geralmente esse valor é o número anterior gerado pelo gerador. No entanto, na primeira vez em que você usa o gerador, não há valor anterior.
A semeadura de um gerador de números pseudo-aleatórios fornece seu primeiro valor "anterior". Cada valor inicial corresponde a uma sequência de valores gerados para um determinado gerador de números aleatórios. Ou seja, se você fornecer a mesma semente duas vezes, obterá a mesma sequência de números duas vezes.
Geralmente, você deseja propagar seu gerador de números aleatórios com algum valor que alterará cada execução do programa. Por exemplo, o horário atual é uma semente usada com frequência. A razão pela qual isso não ocorre automaticamente é para que, se você quiser, forneça uma semente específica para obter uma sequência conhecida de números.
fonte
Todas as outras respostas parecem não explicar o uso de random.seed (). Aqui está um exemplo simples ( fonte ):
fonte
Você tenta isso.
Digamos que 'random.seed' dê um valor ao gerador de valor aleatório ('random.randint ()') que gera esses valores com base nessa semente. Uma das propriedades obrigatórias dos números aleatórios é que eles devem ser reproduzíveis. Quando você coloca a mesma semente, obtém o mesmo padrão de números aleatórios. Dessa forma, você os está gerando desde o início. Você fornece uma semente diferente - ela começa com uma inicial diferente (acima de 3).
Dada uma semente, ela gerará números aleatórios entre 1 e 10, um após o outro. Então você assume um conjunto de números para um valor inicial.
fonte
Um número aleatório é gerado por alguma operação no valor anterior.
Se não houver valor anterior, o horário atual será automaticamente como valor anterior. Podemos fornecer esse valor anterior por conta própria usando
random.seed(x)
wherex
pode haver qualquer número ou sequência etc.Portanto,
random.random()
não é realmente um número aleatório perfeito, poderia ser previsto viarandom.seed(x)
.Portanto, gerar um número aleatório não é realmente aleatório, porque é executado em algoritmos. Os algoritmos sempre fornecem a mesma saída com base na mesma entrada. Isso significa que depende do valor da semente. Portanto, para torná-lo mais aleatório, o tempo é atribuído automaticamente a
seed()
.fonte
fonte
Execute o programa acima várias vezes ...
1ª tentativa: imprime 5 números inteiros aleatórios no intervalo de 1 a 100
2ª tentativa: imprime os mesmos 5 números aleatórios exibidos na execução acima.
3ª tentativa: mesma
.....Em breve
Explicação: Toda vez que estamos executando o programa acima, estamos configurando seed para 10, então o gerador aleatório toma isso como uma variável de referência. E então, fazendo alguma fórmula predefinida, gera um número aleatório.
Portanto, definir a semente como 10 na próxima execução novamente define o número de referência como 10 e, novamente, o mesmo comportamento começa ...
Assim que redefinimos o valor da semente, ele fornece as mesmas plantas.
Nota: Altere o valor inicial e execute o programa, você verá uma sequência aleatória diferente da anterior.
fonte
Nesse caso, aleatório é realmente pseudo-aleatório. Dada uma semente, ela gerará números com uma distribuição igual. Mas com a mesma semente, ele gerará a mesma sequência numérica toda vez. Se você quiser mudar, precisará alterar sua semente. Muitas pessoas gostam de gerar uma semente com base no tempo atual ou algo assim.
fonte
Imho, é usado para gerar o mesmo resultado de curso aleatório quando você usa
random.seed(samedigit)
novamente.fonte
Defina o
seed(x)
antes de gerar um conjunto de números aleatórios e use a mesma semente para gerar o mesmo conjunto de números aleatórios. Útil no caso de reproduzir os problemas.fonte
Aqui está o meu entendimento. Sempre que configuramos um valor inicial, um "rótulo" ou "referência" é gerado. A próxima chamada random.function é anexada a esse "rótulo"; portanto, da próxima vez que você chamar o mesmo valor inicial e random.function, ele fornecerá o mesmo resultado.
fonte
Aqui está um pequeno teste que demonstra que alimentar o
seed()
método com o mesmo argumento causará o mesmo resultado pseudo-aleatório:fonte
len(set(l))<=1
random.seed(a, version)
em python é usado para inicializar o gerador de números pseudo-aleatórios (PRNG) .PRNG é um algoritmo que gera sequência de números aproximando-se das propriedades de números aleatórios. Esses números aleatórios podem ser reproduzidos usando o valor de semente . Portanto, se você fornecer um valor inicial, o PRNG iniciará de um estado inicial arbitrário usando uma semente.
Argumento
a
é o valor inicial. Se o valor a forNone
, então, por padrão, a hora atual do sistema será usada.e
version
é um número inteiro especificando como converter o parâmetro a em um número inteiro. O valor padrão é 2.Se você deseja que o mesmo número aleatório seja reproduzido, forneça a mesma semente novamente
Se você não fornecer a semente, ela gera um número diferente e não 1 como antes
Se você fornecer sementes diferentes das anteriores , ele fornecerá um número aleatório diferente
Portanto, em resumo, se você deseja que o mesmo número aleatório seja reproduzido, forneça a semente. Especificamente, a mesma semente .
fonte