From e3e3008d73d83c99106f5e605719607de9ab2fa3 Mon Sep 17 00:00:00 2001 From: Luis Rodrigues Date: Thu, 12 Sep 2024 11:06:54 +0100 Subject: [PATCH] restruturar propriedades 'tracos_personalidade' e 'estrategia' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit na classe 'Agente' a propriedade 'tracos_personalidade' passa a ser um dicionario com os diversos traços e valores. --- modules/agente.py | 76 +++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/modules/agente.py b/modules/agente.py index 5845b01..fc7fb90 100644 --- a/modules/agente.py +++ b/modules/agente.py @@ -1,5 +1,4 @@ from enum import Enum -import random class Estrategia(Enum): @@ -10,54 +9,55 @@ class Estrategia(Enum): class Agente(): - # factores da estrategia (probabilidade): 0...1 - # amabilidade -> não desertar a menos que o adversário deserte - # (0 -> desertar sempre; 1 -> nunca desertar) - amabilidade = 0 - # retaliação -> retaliar quando um adversário deserta - # (0 -> nunca retaliar; 1 -> retaliar sempre) - retaliação = 0 - # perdao -> perdoar um adversário desertor, assim que este deixa de - # desertar - # (0 -> nunca perdoar; 1 -> perdoar sempre) - perdao = 0 - # coerencia -> ser coerente na estrategia, evitar aleatoriedade - # (0 -> nunca coerente; 1 -> sempre coerente) - coerencia = 0 - # definir factores de estrategia com base na estrategia + # traços de personalidade + tracos_personalidade: dict[str, float] = { + 'amabilidade': 0.0, + 'retaliacao': 0.0, + 'perdao': 0.0, + 'coerencia': 0.0, + 'memoria': 0.0, + } + pontuacao: int = 0 + estrategia: Estrategia | None = None + id_agente: int = 0 - pontuacao: int - - def __init__(self, aleatorio: bool = False): + def __init__(self, estrategia: Estrategia): # definir estrategia aleatoriamente - self.estrategia = Estrategia(random.randint(0, Estrategia.__len__()-1)) + self.estrategia = Estrategia(estrategia) self.definirEstrategia() # identificador de agente self.id_agente = id(self) - self.pontuacao = 0 if not aleatorio else random.randint(1, 99) + self.pontuacao = 0 def __str__(self): - return f'Dados Agente ({self.id_agente})\n\testrategia: {self.estrategia}\n\tpontução: {self.pontuacao}' + return f'Dados Agente ({self.id_agente})\n \ + \testrategia: {self.estrategia}\n \ + \t\tpersonalidade: {self.tracos_personalidade}\n \ + \tpontução: {self.pontuacao}' def definirEstrategia(self): match self.estrategia: case Estrategia.Neutro: - self.amabilidade = 0.5 - self.retaliação = 0.5 - self.perdao = 0.5 - self.coerencia = 1 + self.tracos_personalidade['amabilidade'] = 0.5 + self.tracos_personalidade['retalicao'] = 0.5 + self.tracos_personalidade['perdao'] = 0.5 + self.tracos_personalidade['coerencia'] = 1.0 + self.tracos_personalidade['memoria'] = 0.5 case Estrategia.Tit4Tat: - self.amabilidade = 1 - self.retaliação = 1 - self.perdao = 1 - self.coerencia = 1 + self.tracos_personalidade['amabilidade'] = 1.0 + self.tracos_personalidade['retalicao'] = 1.0 + self.tracos_personalidade['perdao'] = 1.0 + self.tracos_personalidade['coerencia'] = 1.0 + self.tracos_personalidade['memoria'] = 0.5 case Estrategia.Vingativo: - self.amabilidade = 0 - self.retaliação = 1 - self.perdao = 0 - self.coerencia = 1 + self.tracos_personalidade['amabilidade'] = 0.0 + self.tracos_personalidade['retalicao'] = 1.0 + self.tracos_personalidade['perdao'] = 0.0 + self.tracos_personalidade['coerencia'] = 1.0 + self.tracos_personalidade['memoria'] = 0.5 case Estrategia.Lunatico: - self.amabilidade = 0.5 - self.retaliação = 0.5 - self.perdao = 0.5 - self.coerencia = 0.5 + self.tracos_personalidade['amabilidade'] = 0.5 + self.tracos_personalidade['retalicao'] = 0.5 + self.tracos_personalidade['perdao'] = 0.5 + self.tracos_personalidade['coerencia'] = 0.5 + self.tracos_personalidade['memoria'] = 0.5