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): # 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 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 def mostrar(self) -> None: print(f'Dados Agente: {self.id_agente}') print(f'\testrategia: {self.estrategia}') print(f'\tpontuação: {self.pontuacao}') # agente = Agente() # # print(f'ID: {agente.id_agente}') # print(f'Estratégia: {agente.estrategia}') # print(f'\tAmabilidade: {agente.amabilidade}') # print(f'\tRetaliação: {agente.retaliação}') # print(f'\tPerdão: {agente.perdao}') # print(f'\tCoerência: {agente.coerencia}') # lista_estrategias = Estrategia._member_map_ # lista_estrategias = Estrategia.__dict__ # for estrategia in lista_estrategias: # print(estrategia) # print(lista_estrategias)