O objetivo desse exercício é continuar a estudar arrays e introduzir o módulo matplotlib que permite a visualização de gráficos 2D a partir de arrays. Essas ferramentas são particularmente úteis na análise de dados.
Para explorar essas ferramentas, nesse EP vamos investigar como a simulação do modelo de segregação de Schelling se comporta quando modificamos o critério de felicidade para:
- um agente está infeliz se possui 2 ou mais vizinhos diferentes dele.
e vamos comparar visualmente o comportamento desse novo modelo com o modelo implementado no EP anterior, onde um agente está feliz se possui ao menos 2 vizinhos como ele.
Para medir a “felicidade” do povo, vamos considerar a proporção de agentes infelizes e a proporção de agentes felizes usando a mesma entrada e vendo como essa proporção se modifica ao longo do tempo.
Dado um mapa com uma certa configuração de agentes, o grau de felicidade \(\mathcal{F}\) é definido como
Onde \(F\) é o número de agentes felizes e \(I\) é o número de agentes infelizes. O grau de infelicidade \(\mathcal{I}\) pode ser calculado como \(\mathcal{I} = 1 - \mathcal{F} = I/(F+I)\).
Escreva um programa em Python que permita comparar visualmente a evolução do grau de felicidade e infelicidade dos agentes utilizando os seguintes critérios de felicidade:
- um agente está infeliz se possui menos que 2 vizinhos como ele (feito no EP10). Ele está feliz caso contrário.
- um agente está infeliz se possui mais que 2 vizinhos diferentes dele. Ele está feliz caso contrário.
A soma das porcentagens de agentes azuis e vermelhos deve ser sempre menor que 100, para permitir a existência de casas vazias. Por exemplo, quando a porcentagem de azuis é 45 e a de vermelhos é 35, o restante 20% é de casas vazias.
A partir dessas informações, o seu programa deve sortear uma certa distribuição de casas na cidade, que define a condição inicial, utilizando para isso a função sorteia_cidade() fornecida abaixo:
import numpy as np
######################################################################
# constantes
BORDA = -1
VAZIO = 0
AZUL = 1
VERMELHO = 2
######################################################################
def sorteia_cidade(s, a, v):
''' (int, int, int) -> array
recebe o tamanho s do mapa e a porcentagem de agentes
azuis (a) e vermelhos (v) e retorna um mapa de
dimensão (s x s) com a distribuição fornecida
'''
# cria um array com números pseudo-aleatórios
M = np.random.randint(100, size=(s,s))
vazio = M >= v+a
verm = (M >= a) & (M < v+a)
azul = M < a
M[vazio] = VAZIO
M[azul] = AZUL
M[verm] = VERMELHO
# cria borda
M[:,0] = M[0,:] = M[-1,:] = M[:,-1] = BORDA
return M
######################################################################
A seguir, o seu programa deve executar as n iterações da simulação para cada cidade, A e B, com a mesma configuração inicial (estude o exemplo de execução mais abaixo). Na cidade A o critério de felicidade A deve ser aplicado, e na cidade B, o critério B deve ser aplicado.
A cada iteração da simulação, o seu programa deve simular o comportamento dos agentes na cidade A e depois dos agentes na cidade B. A simulação implica em identificar todos os agentes infelizes na cidade, segundo o critério da cidade. A seguir, cada um desses agentes se move, aleatoriamente para uma casa vazia da mesma cidade. Ao se mudar, sua própria casa fica vazia e disponível para o sorteio do próximo agente insatisfeito. Ao final de cada iteração o grau de felicidade de cada cidade deve ser calculado e salvo em uma lista. Assim, o seu programa deve criar 2 listas com os índices de felicidade em cada iteração e para cada cidade.
Ao final das n iterações, o seu programa deve chamar a função gera_grafico_1() passando as 2 listas como argumentos para que você vilualizar o resultado da simulação e comparar os dois critérios. A função é fornecida abaixo:
import numpy as np
import matplotlib.pyplot as plt
######################################################################
def gera_grafico_1(fa, fb):
''' (list of floats, list of floats) -> None
recebe a lista de agentes felizes fa da cidade A
e a lista de agentes felizes fb da cidade B,
e gera o gráfico mostrando a evolução de agentes
felizes e infelizes em cada cidade
Versão 1: simples
'''
x = np.array(range(len(fa)))
# transforma listas de floats em arrays entre 0 a 100
af = 100 * np.array(fa)
ai = 100 - af
bf = 100 * np.array(fb)
bi = 100 - bf
# plota os gráficos todos na mesma figura default
plt.plot(x, af, 'k--', color='red', label='felizes em A')
plt.plot(x, ai, 'k:', color='blue', label='infelizes em A')
plt.plot(x, bf, 'go', label="felizes em B")
plt.plot(x, bi, 'ys', label="infelizes em B")
plt.grid(True)
plt.legend(loc='center right')
plt.title("Graus de Felicidade e Infelicidade")
plt.xlabel("Iterações")
plt.ylabel("%")
plt.show()
######################################################################
Apenas para mostrar como é simples gerar gráficos sofisticados usando matplotlib, você pode também usar a função gera_grafico_2() abaixo ao invés da função anterior.
import numpy as np
import matplotlib.pyplot as plt
######################################################################
def gera_grafico_2(fa, fb):
''' (list of floats, list of floats) -> None
recebe a lista de agentes felizes fa da cidade A
e a lista de agentes felizes fb da cidade B,
e gera o gráfico mostrando a evolução de agentes
felizes e infelizes em cada cidade
'''
x = np.array(range(len(fa)))
af = 100 * np.array(fa)
ai = 100 - af
bf = 100 * np.array(fb)
bi = 100 - bf
fig = plt.figure(1)
plt.subplot(2,1,1)
plt.plot(x, af, 'go')
plt.plot(x, ai, 'r^')
plt.plot(x, bf, 'k:', color='blue') # linha mostrando os felizes em B
plt.title("Grau de Felicidade (verde) e Infelicidade (vermelho)")
plt.xlabel("Iterações na cidade A")
plt.ylabel("%")
plt.subplot(2,1,2)
plt.plot(x, bf, 'go')
plt.plot(x, bi, 'r^')
plt.plot(x, af, 'k:', color='blue') # linha mostrando os felizes em A
plt.xlabel("Iterações na cidade B")
plt.ylabel("%")
fig.tight_layout()
plt.show()
######################################################################
Veja o tópico Visualização de gráficos 2D usando matplotlib para saber mais sobre o matplotlib, que facilita a criação de gráficos 2D de alta qualidade em Python.
Veja o exemplo de execução abaixo. Implemente o seu programa de tal forma que tenha exatamente o mesmo comportamento do exemplo abaixo. Por comportamento queremos dizer as mensagens e gráficos, mas devido a natureza “aleatória” das mudanças, a evolução das cidades pode não ser a mesma.
Bem vindo ao simulador do modelo de segregação de Schelling
Digite a semente para o gerador de números pseudo-aleatórios: 5
Digite a dimensão N da cidade: 10
Digite a porcentagem da população azul: 50
Digite a porcentagem da população vermelha: 40
Digite o número de iterações para a simulação: 10
Configuração Inicial das cidades A e B
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 2 2 1 1 2 2 2 1 1 2 -1]
[-1 1 1 2 1 2 1 2 1 2 1 -1]
[-1 1 2 1 1 1 2 1 2 1 1 -1]
[-1 2 1 2 2 2 1 0 2 1 1 -1]
[-1 2 1 1 0 1 0 1 1 1 1 -1]
[-1 1 1 2 1 1 1 1 2 1 1 -1]
[-1 0 2 1 1 2 1 2 1 0 1 -1]
[-1 2 1 1 2 2 2 2 0 1 2 -1]
[-1 2 2 1 1 1 2 1 2 1 0 -1]
[-1 2 1 2 2 0 2 1 1 2 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 0
Cidade A
Mudaram de casa: 3 da cor azul
Mudaram de casa: 10 da cor vermelha
Agentes felizes: 0.86
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 2 2 1 1 2 2 2 1 1 2 -1]
[-1 1 1 2 1 2 1 2 1 2 1 -1]
[-1 1 2 1 1 1 2 1 2 1 1 -1]
[-1 2 1 2 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 0 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 0 1 -1]
[-1 2 1 1 2 2 2 2 2 1 2 -1]
[-1 2 2 1 1 2 2 1 2 1 0 -1]
[-1 2 0 2 0 1 0 1 1 0 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 29 da cor azul
Mudaram de casa: 33 da cor vermelha
Agentes felizes: 0.33
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 2 2 1 1 2 2 2 1 1 2 -1]
[-1 1 1 2 2 1 1 2 2 1 1 -1]
[-1 1 1 2 2 1 2 1 1 2 1 -1]
[-1 1 2 2 2 1 1 2 1 1 1 -1]
[-1 0 1 1 2 1 2 1 1 1 1 -1]
[-1 1 2 2 1 1 1 1 2 1 1 -1]
[-1 2 1 1 2 2 2 1 1 1 1 -1]
[-1 2 1 2 2 1 2 2 2 1 1 -1]
[-1 2 2 1 2 1 2 0 2 0 1 -1]
[-1 2 1 0 0 1 0 0 1 0 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 1
Cidade A
Mudaram de casa: 1 da cor azul
Mudaram de casa: 6 da cor vermelha
Agentes felizes: 0.92
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 2 1 1 2 2 2 1 1 0 -1]
[-1 1 1 2 1 2 1 2 1 2 1 -1]
[-1 1 2 1 1 1 2 1 2 1 1 -1]
[-1 0 1 2 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 2 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 0 -1]
[-1 2 2 1 1 2 2 1 2 1 2 -1]
[-1 2 0 0 0 0 2 1 1 2 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 30 da cor azul
Mudaram de casa: 30 da cor vermelha
Agentes felizes: 0.35
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 2 1 1 2 1 2 2 2 1 2 -1]
[-1 1 1 2 2 1 2 2 1 2 1 -1]
[-1 1 1 2 1 1 1 1 2 0 1 -1]
[-1 1 2 1 2 2 2 1 1 1 1 -1]
[-1 1 1 2 2 1 1 2 1 1 1 -1]
[-1 1 2 1 0 1 1 2 1 1 1 -1]
[-1 1 2 0 2 2 1 2 1 1 1 -1]
[-1 2 2 2 0 2 2 2 0 1 1 -1]
[-1 2 1 1 0 0 1 2 2 2 1 -1]
[-1 2 0 1 2 1 1 1 1 2 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 2
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 4 da cor vermelha
Agentes felizes: 0.96
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 2 -1]
[-1 1 1 2 1 2 1 2 1 0 1 -1]
[-1 1 2 1 1 1 2 1 2 1 1 -1]
[-1 0 1 2 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 0 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 0 -1]
[-1 2 2 1 1 2 2 1 2 1 0 -1]
[-1 2 2 2 0 2 2 1 1 2 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 27 da cor azul
Mudaram de casa: 28 da cor vermelha
Agentes felizes: 0.40
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 1 2 2 1 2 2 2 1 2 -1]
[-1 1 2 2 1 2 2 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 2 2 2 1 1 1 1 1 -1]
[-1 1 1 2 2 0 2 1 1 1 1 -1]
[-1 1 1 2 2 2 1 2 1 1 1 -1]
[-1 2 0 2 2 2 2 1 1 1 1 -1]
[-1 2 2 2 2 2 2 0 1 1 1 -1]
[-1 2 1 1 1 1 2 2 0 0 1 -1]
[-1 2 2 1 0 1 1 1 0 0 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 3
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 3 da cor vermelha
Agentes felizes: 0.97
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 0 -1]
[-1 1 1 0 1 2 1 2 1 0 1 -1]
[-1 1 2 1 1 1 2 1 2 1 1 -1]
[-1 2 1 2 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 0 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 2 -1]
[-1 2 2 1 1 2 2 1 2 1 0 -1]
[-1 2 2 2 2 2 2 1 1 0 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 19 da cor azul
Mudaram de casa: 18 da cor vermelha
Agentes felizes: 0.60
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 2 2 2 2 2 2 2 1 2 -1]
[-1 1 2 2 1 1 1 2 1 2 1 -1]
[-1 1 2 1 1 1 2 1 1 1 1 -1]
[-1 1 1 2 2 0 2 1 1 1 1 -1]
[-1 1 2 1 2 1 1 1 1 1 1 -1]
[-1 1 2 2 2 2 1 0 1 1 1 -1]
[-1 2 1 2 2 2 2 0 1 1 1 -1]
[-1 2 2 1 2 2 2 1 1 1 1 -1]
[-1 2 0 1 0 2 0 0 2 1 1 -1]
[-1 2 0 1 2 1 1 1 2 1 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 4
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 2 da cor vermelha
Agentes felizes: 0.98
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 2 -1]
[-1 1 1 0 1 2 1 2 1 0 1 -1]
[-1 1 2 1 1 1 2 1 2 1 1 -1]
[-1 0 1 2 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 2 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 0 -1]
[-1 2 2 1 1 2 2 1 2 1 0 -1]
[-1 2 2 2 2 2 2 1 1 0 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 19 da cor azul
Mudaram de casa: 17 da cor vermelha
Agentes felizes: 0.61
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 2 2 2 2 2 2 2 2 2 -1]
[-1 1 2 2 1 1 2 2 2 1 1 -1]
[-1 1 1 1 1 1 2 0 1 1 1 -1]
[-1 1 2 1 1 1 2 1 1 1 1 -1]
[-1 1 0 2 2 1 1 1 1 1 1 -1]
[-1 0 0 2 2 1 1 2 1 1 1 -1]
[-1 2 2 2 2 2 2 1 1 1 1 -1]
[-1 2 2 1 2 2 2 0 1 1 1 -1]
[-1 2 1 2 2 2 1 2 0 1 1 -1]
[-1 2 1 1 0 1 1 1 0 1 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 5
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 3 da cor vermelha
Agentes felizes: 0.97
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 0 -1]
[-1 1 1 0 1 2 1 2 1 0 1 -1]
[-1 1 0 1 1 1 2 1 2 1 1 -1]
[-1 0 1 2 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 0 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 2 -1]
[-1 2 2 1 1 2 2 1 2 1 2 -1]
[-1 2 2 2 2 2 2 1 1 2 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 16 da cor azul
Mudaram de casa: 13 da cor vermelha
Agentes felizes: 0.68
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 2 2 2 2 2 2 2 2 2 -1]
[-1 1 1 1 2 2 2 2 1 2 1 -1]
[-1 1 0 1 1 2 0 1 1 1 1 -1]
[-1 1 1 2 1 2 1 1 1 1 1 -1]
[-1 1 2 2 1 1 1 1 1 1 1 -1]
[-1 1 2 2 2 1 0 1 1 1 1 -1]
[-1 2 2 2 2 2 2 1 1 1 1 -1]
[-1 2 2 2 2 2 2 1 1 1 1 -1]
[-1 2 0 2 0 2 0 0 1 1 1 -1]
[-1 2 0 1 2 1 1 1 1 1 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 6
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 1 da cor vermelha
Agentes felizes: 0.99
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 0 -1]
[-1 1 1 0 1 2 1 2 1 0 1 -1]
[-1 1 0 1 1 1 2 1 2 1 1 -1]
[-1 0 1 0 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 2 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 2 -1]
[-1 2 2 1 1 2 2 1 2 1 2 -1]
[-1 2 2 2 2 2 2 1 1 2 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 9 da cor azul
Mudaram de casa: 11 da cor vermelha
Agentes felizes: 0.78
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 2 2 2 2 2 2 2 2 2 -1]
[-1 1 1 1 0 2 2 2 0 1 2 -1]
[-1 1 0 1 1 2 1 1 1 1 1 -1]
[-1 1 2 0 0 1 1 1 1 1 1 -1]
[-1 1 1 2 1 1 1 1 1 1 1 -1]
[-1 2 2 2 0 0 2 1 1 1 1 -1]
[-1 2 2 2 2 2 0 1 1 1 1 -1]
[-1 2 2 2 2 2 2 1 1 1 1 -1]
[-1 2 1 2 2 2 2 2 1 1 1 -1]
[-1 2 1 1 2 1 1 1 1 1 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 7
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 2 da cor vermelha
Agentes felizes: 0.98
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 0 -1]
[-1 1 1 2 1 2 1 2 1 0 1 -1]
[-1 1 0 1 1 1 2 1 2 1 1 -1]
[-1 0 1 2 0 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 0 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 2 -1]
[-1 2 2 1 1 2 2 1 2 1 2 -1]
[-1 2 2 2 2 2 2 1 1 2 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 11 da cor azul
Mudaram de casa: 9 da cor vermelha
Agentes felizes: 0.78
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 1 2 2 2 2 2 2 2 2 -1]
[-1 1 1 1 2 2 2 2 2 2 1 -1]
[-1 1 1 1 1 0 1 1 1 1 1 -1]
[-1 1 1 1 2 1 1 1 1 1 1 -1]
[-1 1 1 2 1 1 1 1 1 1 1 -1]
[-1 2 2 2 1 2 0 1 1 1 1 -1]
[-1 2 2 2 2 2 2 1 1 1 1 -1]
[-1 2 2 2 2 2 2 2 1 1 1 -1]
[-1 2 2 1 2 2 0 0 1 1 1 -1]
[-1 2 0 0 2 0 0 1 1 1 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 8
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 2 da cor vermelha
Agentes felizes: 0.98
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 0 -1]
[-1 1 1 0 1 2 1 2 1 0 1 -1]
[-1 1 0 1 1 1 2 1 2 1 1 -1]
[-1 2 1 0 2 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 0 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 2 -1]
[-1 2 2 1 1 2 2 1 2 1 2 -1]
[-1 2 2 2 2 2 2 1 1 2 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 11 da cor azul
Mudaram de casa: 10 da cor vermelha
Agentes felizes: 0.77
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 1 2 2 2 2 2 2 2 2 -1]
[-1 1 1 2 0 2 2 1 2 0 2 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 1 1 1 1 1 1 1 1 -1]
[-1 1 1 2 0 1 1 1 1 1 1 -1]
[-1 2 2 0 2 0 2 1 1 1 1 -1]
[-1 2 2 2 2 2 2 0 1 1 1 -1]
[-1 2 2 2 2 2 2 0 1 1 1 -1]
[-1 2 2 0 2 2 2 1 1 1 1 -1]
[-1 2 2 1 2 1 1 1 1 1 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
=======================
Iteração número 9
Cidade A
Mudaram de casa: 0 da cor azul
Mudaram de casa: 2 da cor vermelha
Agentes felizes: 0.98
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 0 1 1 2 2 2 1 1 2 -1]
[-1 1 1 0 1 2 1 2 1 0 1 -1]
[-1 1 0 1 1 1 2 1 2 1 1 -1]
[-1 0 1 2 0 2 1 2 2 1 1 -1]
[-1 1 1 1 1 1 2 1 1 1 1 -1]
[-1 1 1 0 1 1 1 1 2 1 1 -1]
[-1 2 2 1 1 2 1 2 1 2 1 -1]
[-1 2 1 1 2 2 2 2 2 1 2 -1]
[-1 2 2 1 1 2 2 1 2 1 2 -1]
[-1 2 2 2 2 2 2 1 1 2 0 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Cidade B
Mudaram de casa: 6 da cor azul
Mudaram de casa: 7 da cor vermelha
Agentes felizes: 0.86
Novo estado da Cidade:
[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
[-1 1 1 2 2 2 2 2 2 2 2 -1]
[-1 1 1 0 2 2 1 0 1 2 2 -1]
[-1 1 1 1 1 2 1 2 1 1 1 -1]
[-1 1 1 1 1 1 1 1 1 1 1 -1]
[-1 1 1 0 0 1 1 1 1 1 1 -1]
[-1 2 2 1 2 2 1 1 1 1 1 -1]
[-1 2 2 2 2 2 2 0 1 1 1 -1]
[-1 2 2 2 2 2 2 2 1 1 1 -1]
[-1 2 2 2 2 2 0 1 1 1 1 -1]
[-1 2 2 0 2 0 1 1 1 1 1 -1]
[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]
Obrigado por usar o simulador.
A visualização do resultado utilizando a função gera_grafico_1() é mostrada abaixo:
A visualização do resultado utilizando a função gera_grafico_2() é mostrada abaixo:
. Não deixe o EP para a última hora.
. Siga as Instruções para entrega de EPs.
. Para saber mais sobre números pseudo-aleatórios usando NumPy, visite a documentação disponível em http://docs.scipy.org/doc/numpy/reference/routines.random.html.
. Para saber mais sobre o matplotlib, veja o tópico Visualização de gráficos 2D usando matplotlib.
. Venha tirar as dúvidas nos plantões.
. Venha tirar as dúvidas nos plantões.
. Veja se suas dúvidas já foram respondidas no fórum de discussão
. Coloque as suas dúvidas no fórum de discussão.
. Responda as suas dúvidas dos seus colegas no fórum de discussão.