from enum import Enum import random class Estrategia(Enum): Neutro = 0 Tit4Tat = 1 Vingativo = 2 Lunatico = 3 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 pontuacao: int def __init__(self, aleatorio: bool = False): # definir estrategia aleatoriamente self.estrategia = Estrategia(random.randint(0, Estrategia.__len__()-1)) self.definirEstrategia() # identificador de agente self.id_agente = id(self) self.pontuacao = 0 if not aleatorio else random.randint(1, 99) def __str__(self): return f'Dados Agente ({self.id_agente})\n\testrategia: {self.estrategia}\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 case Estrategia.Tit4Tat: self.amabilidade = 1 self.retaliação = 1 self.perdao = 1 self.coerencia = 1 case Estrategia.Vingativo: self.amabilidade = 0 self.retaliação = 1 self.perdao = 0 self.coerencia = 1 case Estrategia.Lunatico: self.amabilidade = 0.5 self.retaliação = 0.5 self.perdao = 0.5 self.coerencia = 0.5