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:
@ -1,10 +1,49 @@
|
||||
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) -> 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
|
||||
|
||||
Reference in New Issue
Block a user