funções auxiliares para interações

'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
This commit is contained in:
2026-03-20 11:45:51 +00:00
parent 5df0bf0e49
commit 8c8f7c3058

View File

@ -1,10 +1,49 @@
from modules.agente import Agente from modules.agente import Agente
from modules.mapa import Mapa 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: def interaccaoEntreAgentes(agente1: Agente, agente2: Agente) -> None:
pass pass
def correrInteraccoesEntreAgentes(mapa: Mapa | None) -> None: 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 pass