... 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.