diff --git a/dilema_prisioneiro.py b/dilema_prisioneiro.py index a7ba6b2..4e62ff3 100644 --- a/dilema_prisioneiro.py +++ b/dilema_prisioneiro.py @@ -5,25 +5,61 @@ class Estrategia(Enum): Neutro = 0 Tit4Tat = 1 Vingativo = 2 + Lunatico = 3 class Agente(): def __init__(self): + # definir estrategia aleatoriamente self.estrategia = Estrategia(random.randint(0,Estrategia.__len__()-1)) - #self.estrategia = random.choice(Estrategia._member_names_) - # factores da estrategia (probabilidade): -1...0...1 - # amabilidade -> não desertar a menos que o adversário deserte (-1 -> desertar sempre; 1 -> nunca desertar) - self.amabilidade = 0 - # retaliação -> retaliar quando um adversário deserta (-1 -> nunca retaliar; 1 -> retaliar sempre) - self.retaliação = 0 - # perdao -> perdoar um adversário desertor, assim que este deixa de desertar (-1 -> nunca perdoar; 1 -> perdoar sempre) - self.perdao = 0 - # coerencia -> ser coerente na estrategia, evitar aleatoriedade (-1 -> aletório negativo; 0 -> não aleatorio; 1 -> aleatorio positivo) - self.coerencia = 0 + self.definir_fatores_estrategia() + # identificador de agente + self.id_agente = id(self) + + # 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 + def definir_fatores_estrategia(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 + + agente = Agente() -print(agente.estrategia) +print(f'ID: {agente.id_agente}') +print(f'Estratégia: {agente.estrategia}') +print(f'\tAmabilidade: {agente.amabilidade}') +print(f'\tRetalização: {agente.retaliação}') +print(f'\tPerdão: {agente.perdao}') +print(f'\tCOerência: {agente.coerencia}') # lista_estrategias = Estrategia._member_map_