-
Notifications
You must be signed in to change notification settings - Fork 0
/
agentes-por-capacidades.py
96 lines (74 loc) · 2.75 KB
/
agentes-por-capacidades.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# Código com definição de agentes abstratos a serem utilizados em nossas aulas.
from abc import ABC
class Agente(ABC):
'''
Classe abstrata de agentes artificiais racionais.
'''
@abstractmethod
def adquirirPercepcao(self, percepcao_mundo):
''' Forma uma percepcao interna por meio de seus sensores, a partir das
informacoes de um objeto de visao de mundo.
'''
return
@abstractmethod
def escolherProximaAcao(self):
''' Escolhe proxima acao, com base em seu entendimento do mundo, a partir
das percepções anteriores.
'''
return
class AgenteReflexivo(Agente):
def __init__(self, regras):
''' Inicializa o agente e suas regras de atuação
:param regras: dicionário de condição-ação, no formato modelo -> ação
'''
self.regras = regras
def adquirirPercepcao(self, percepcao_mundo):
''' Forma uma percepcao interna por meio de seus sensores, a partir das
informacoes de um objeto de visao de mundo.
'''
self.ultima_percepcao = percepcao_mundo
def escolherProximaAcao(self):
modelo_imediato = self.ultima_percepcao
acao = self.regras[modelo_imediato]
return acao
class AgenteComModelo(Agente):
def __init__(self, modelo, regras):
self.modelo = modelo
self.regras = regras
# Ultima acao realizada, inicialmente nenhuma
self.acao = None
def adquirirPercepcao(self, percepcao_mundo):
''' Atualiza o estado de acordo com os atributos internos (estado,
acao, modelo) e a nova percepcao do ambiente
'''
pass
def escolherProximaAcao(self):
acao = self.regras[modelo]
return acao
class AgenteComObjetivo(Agente):
def __init__(self):
# Uma sequencia de acoes, inicialmente vazia
self.seq = []
# Um objetivo, inicialmente nulo
self.objetivo = None
def escolherProximaAcao(self):
# Se seq estiver vazia
if not self.seq:
self.formularEstadoAtual()
self.busca()
if not self.seq:
return None
acao = self.seq.pop(0)
return acao
def formularEstadoAtual(self):
''' Instancia objeto com base em AbstractEstado representando o estado
atual e as corretas funções de navegação pelo estado, bem como o teste
de objetivo e a função de custo.
Ao final, self.estado deve estar preenchido.
'''
pass
def busca(self):
''' Monta uma nova sequencia de acoes para resolver o problema atual.
Ao final, self.seq deve conter uma lista de acoes.
'''
pass