From d8169eebcbfb43025d3ad2264901e377759b6e24 Mon Sep 17 00:00:00 2001 From: "[Luis Rodrigues]" Date: Sat, 11 May 2024 23:53:13 +0100 Subject: [PATCH] =?UTF-8?q?adicionados=20atributos=20=C3=A0=20class=20Agen?= =?UTF-8?q?te(),=20assim=20como=20metodo=20para=20definir=20esses=20atribu?= =?UTF-8?q?tos=20com=20base=20na=20estrat=C3=A9gia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dilema_prisioneiro.py | 58 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 11 deletions(-) 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_