Files
game_theory_of_life/modules/agente.py

64 lines
2.0 KiB
Python

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 __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