64 lines
2.1 KiB
Python
64 lines
2.1 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, 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
|