restruturar propriedades 'tracos_personalidade' e 'estrategia'

na classe 'Agente' a propriedade 'tracos_personalidade' passa a ser um
dicionario com os diversos traços e valores.
This commit is contained in:
2024-09-12 11:06:54 +01:00
parent 452a5becb2
commit e3e3008d73

View File

@ -1,5 +1,4 @@
from enum import Enum from enum import Enum
import random
class Estrategia(Enum): class Estrategia(Enum):
@ -10,54 +9,55 @@ class Estrategia(Enum):
class Agente(): class Agente():
# factores da estrategia (probabilidade): 0...1 # traços de personalidade
# amabilidade -> não desertar a menos que o adversário deserte tracos_personalidade: dict[str, float] = {
# (0 -> desertar sempre; 1 -> nunca desertar) 'amabilidade': 0.0,
amabilidade = 0 'retaliacao': 0.0,
# retaliação -> retaliar quando um adversário deserta 'perdao': 0.0,
# (0 -> nunca retaliar; 1 -> retaliar sempre) 'coerencia': 0.0,
retaliação = 0 'memoria': 0.0,
# perdao -> perdoar um adversário desertor, assim que este deixa de }
# desertar pontuacao: int = 0
# (0 -> nunca perdoar; 1 -> perdoar sempre) estrategia: Estrategia | None = None
perdao = 0 id_agente: int = 0
# coerencia -> ser coerente na estrategia, evitar aleatoriedade
# (0 -> nunca coerente; 1 -> sempre coerente)
coerencia = 0
# definir factores de estrategia com base na estrategia
pontuacao: int def __init__(self, estrategia: Estrategia):
def __init__(self, aleatorio: bool = False):
# definir estrategia aleatoriamente # definir estrategia aleatoriamente
self.estrategia = Estrategia(random.randint(0, Estrategia.__len__()-1)) self.estrategia = Estrategia(estrategia)
self.definirEstrategia() self.definirEstrategia()
# identificador de agente # identificador de agente
self.id_agente = id(self) self.id_agente = id(self)
self.pontuacao = 0 if not aleatorio else random.randint(1, 99) self.pontuacao = 0
def __str__(self): 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): def definirEstrategia(self):
match self.estrategia: match self.estrategia:
case Estrategia.Neutro: case Estrategia.Neutro:
self.amabilidade = 0.5 self.tracos_personalidade['amabilidade'] = 0.5
self.retaliação = 0.5 self.tracos_personalidade['retalicao'] = 0.5
self.perdao = 0.5 self.tracos_personalidade['perdao'] = 0.5
self.coerencia = 1 self.tracos_personalidade['coerencia'] = 1.0
self.tracos_personalidade['memoria'] = 0.5
case Estrategia.Tit4Tat: case Estrategia.Tit4Tat:
self.amabilidade = 1 self.tracos_personalidade['amabilidade'] = 1.0
self.retaliação = 1 self.tracos_personalidade['retalicao'] = 1.0
self.perdao = 1 self.tracos_personalidade['perdao'] = 1.0
self.coerencia = 1 self.tracos_personalidade['coerencia'] = 1.0
self.tracos_personalidade['memoria'] = 0.5
case Estrategia.Vingativo: case Estrategia.Vingativo:
self.amabilidade = 0 self.tracos_personalidade['amabilidade'] = 0.0
self.retaliação = 1 self.tracos_personalidade['retalicao'] = 1.0
self.perdao = 0 self.tracos_personalidade['perdao'] = 0.0
self.coerencia = 1 self.tracos_personalidade['coerencia'] = 1.0
self.tracos_personalidade['memoria'] = 0.5
case Estrategia.Lunatico: case Estrategia.Lunatico:
self.amabilidade = 0.5 self.tracos_personalidade['amabilidade'] = 0.5
self.retaliação = 0.5 self.tracos_personalidade['retalicao'] = 0.5
self.perdao = 0.5 self.tracos_personalidade['perdao'] = 0.5
self.coerencia = 0.5 self.tracos_personalidade['coerencia'] = 0.5
self.tracos_personalidade['memoria'] = 0.5