[EP10] Dúvida sobre input

[EP10] Dúvida sobre input

by Willian Akira Mizutani -
Number of replies: 3

Do exemplo do enunciado, a linha de input que diz:

Digite o número mínimo de vizinhos desejado:

Refere-se à regra de definição do estado de felicidade do agente? Digo, o número que o usuário irá colocar nessa linha deve ser o número mínimo de vizinhos que um agente deve ter para estar feliz?

E esta linha de input:

Digite a semente para o gerador de números pseudo-aleatórios:

O número definido pelo usuário nessa linha é utilizado de que forma? Uma linha de código chamando o random.seed() basta? A documentação do random não foi muito clara nisso (digo, não entendi se isso faz diferença na geração de números pseudoaleatórios, e por que o usuário deveria se preocupar com isso).

In reply to Willian Akira Mizutani

Re: [EP10] Dúvida sobre input

by José Coelho de Pina -

... deve ser o número mínimo de vizinhos que um agente deve ter para estar feliz?

Sim. 

O número definido pelo usuário nessa linha é utilizado de que forma?

Logo depois da leitura da semente ela dev ser fornecida ao gerador de números aleatórios.

    # inicialização do gerador de números pseudo-aleatórios    
    np.random.seed( semente )

não entendi se isso faz diferença na geração de números pseudoaleatórios,

    Segue uma pequena explicação bem simplificada sobre o fenômeno de "os números estão repetindo", que ocorre ao usarmos algum gerador de números aleatórios com semente.

    Um gerador de número aleatórios é uma função que devolve os números de uma sequência, um número a cada chamada da função. Suponha que, através de várias chamadas da função, a sequência

X0 X1 X2 X3 X4 . . .

é obtida e suponha que o gerador usa o método das congruências lineares através da expressão

Xi+1 = (aXi +b) mod m,

onde a, b e m são constantes inteiras.

    Considere, para simplificar muito as coisas, um gerador de números aleatórios que devolve números inteiros entre 0 e 6. Suponha que a sequência devolvida por esse tal gerador é

1 6 0 5 3 3 4 2 1 2 1 6 0 5 3 3 4 2 1 2 1 6 . . .

    Com isto queremos dizer que o primeiro valor obtido pelo gerador é o número 1, o segundo valor obtido é o número 6, e assim por diante. Reparem que a sequência começa a se repetir a partir de um certo ponto; notem o

1 6 . . . 1 6 . . .

Há quem chame esse tipo de sequência de cíclica. A posição na sequência a partir da qual o gerador começa a devolver os números é determinada por um valor, a chamada semente do gerador, que pode ou não ser fornecida ao gerador para que ele faça o seu serviço. Por exemplo, digamos que seja fornecido ao nosso gerador imaginário o número 1234 como semente, a partir daí ele pode, digamos, devolver os números abaixo, na ordem em que aparecem,

3 3 4 2 1 2 1 6 0 5 3 3 4 2 1 2 1 6 0 5 3 3 . . .

    Já, se fornecermos a semente 4321, o gerador talvez passe a devolver os números

4 2 1 2 1 6 0 5 3 3 4 2 1 2 1 6  1 6 0 5 3 3 4 2

    Resumindo, a semente só determina o ponto exato do início da sequência cíclica a partir do qual os números são devolvidos pelo gerador.

    Embora o gerador usado pelo Python seja o Mersenne Twister, e não congruências lineares, a mesma explicação acima se aplica.

    De volta ao EP10, o comando

    # inicialização do gerador de números pseudo-aleatórios    
    np.random.seed(semente)

inicializa a semente do gerador com o valor dado. Se usarmos o comando

    # inicialização do gerador de números pseudo-aleatórios    
    np.random.seed(1234)

a semente do gerador é inicializada com 1234 e, cada vez que o programa é executado, a sequência devolvida pelo gerador será precisamente a mesma. Esse comportamento é útil durante a fase de desenvolvimento de um programa.

In reply to José Coelho de Pina

Dúvida EP10

by Rodrigo Lima Dias -

Não sei se eu deveria saber o que vou perguntar, mas: onde vou usar o que é retornado pelo comando "np.random.seed (semente)" ?