'assinatura_interaccao()' - gerar assinatura de transacao entre dois agentes 'criarDicionarioInteraccoes()' - mapear todas as interacoes entre agentes no mapa, eliminando os duplicados (agente1 vs agente2 == agente2 vs agente1) 'correrInteraccoesEntreAgentes()' - começar a definir algum codigo para mediar as interações entre agentes
50 lines
2.2 KiB
Python
50 lines
2.2 KiB
Python
from modules.agente import Agente
|
|
from modules.mapa import Mapa
|
|
from hashlib import blake2b
|
|
|
|
|
|
def assinatura_interaccao(agente1: Agente, agente2: Agente) -> str:
|
|
assin = blake2b(digest_size=8) # usar 64 bits para performance
|
|
assin.update(f"{id(agente1)}+{id(agente2)}".encode("utf-8"))
|
|
return assin.hexdigest()
|
|
|
|
|
|
def criarDicionarioInteraccoes(mapa: Mapa) -> dict[str, list[Agente]]:
|
|
dicionario_interacoes: dict[str, list[Agente]] = {}
|
|
for pos_y in range(mapa.dimensao[0]):
|
|
for pos_x in range(mapa.dimensao[1]):
|
|
agente_actual: Agente = mapa.posicao((pos_x, pos_y))
|
|
for pos_vizinho in agente_actual.vizinhanca():
|
|
agente_vizinho: Agente = mapa.posicao((pos_vizinho[0], pos_vizinho[1]))
|
|
ass_normal = assinatura_interaccao(agente_actual, agente_vizinho)
|
|
ass_inversa = assinatura_interaccao(agente_vizinho, agente_actual)
|
|
# confirmar se interaccao já existe no dicionario
|
|
if (
|
|
ass_normal in dicionario_interacoes.keys()
|
|
or ass_inversa in dicionario_interacoes.keys()
|
|
):
|
|
continue
|
|
# se não existe, vamos adicionar interaccao ao dicionario
|
|
dicionario_interacoes[ass_normal] = [agente_actual, agente_vizinho]
|
|
return dicionario_interacoes
|
|
|
|
|
|
def interaccaoEntreAgentes(agente1: Agente, agente2: Agente) -> None:
|
|
pass
|
|
|
|
|
|
def correrInteraccoesEntreAgentes(mapa: Mapa) -> None:
|
|
# interaccoes entre agentes
|
|
dicionario_interacoes: dict[str, list[Agente]] = criarDicionarioInteraccoes(mapa)
|
|
for interaccao in dicionario_interacoes:
|
|
agente1: Agente = dicionario_interacoes[interaccao][0]
|
|
agente2: Agente = dicionario_interacoes[interaccao][1]
|
|
resultado = interaccaoEntreAgentes(agente1, agente2)
|
|
# primeiro criar um dicionario de interacções, atravessando todas as
|
|
# posicoes de mapa[i][j] e fazendo um hash com agente_actual.id e
|
|
# agente_vizinho.id (e seu inverso, para evitar interaccoes ja
|
|
# existentes no dicionario). adicionar essa interação se ainda não
|
|
# existir no dicionario. passar para proximo vizinho. passar para
|
|
# proxima posicao no mapa.
|
|
pass
|