Exercício Programa 11: Análise e Visualização do Modelo de Schelling

Introdução

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

\[\mathcal{F} = \frac{F}{(F + I)}\]

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

O que você deve fazer (entrega segunda-feira, 30/11)

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:

  1. um agente está infeliz se possui menos que 2 vizinhos como ele (feito no EP10). Ele está feliz caso contrário.
  2. um agente está infeliz se possui mais que 2 vizinhos diferentes dele. Ele está feliz caso contrário.
Inicialmente o seu programa deve ler do teclado os seguintes valores inteiros:
  • o valor da semente a ser utilizada para o gerador de números pseudo-aleatórios;
  • a dimensão s da cidade que será representada por um array (= objeto da classe numpy.ndarray) quadrado de dimensão s x s;
  • a porcentagem porc_A de agentes azuis;
  • a porcentagem porc_V de agentes vermelhos;
  • o número n de iterações a serem mostradas no gráfico.

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.

Exemplo de execução

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:

resultado do exemplo usando gera_grafico_1

A visualização do resultado utilizando a função gera_grafico_2() é mostrada abaixo:

resultado do exemplo usando gera_grafico_2

Dicas e Detalhes

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