-
Notifications
You must be signed in to change notification settings - Fork 0
/
problema.py
53 lines (34 loc) · 1.32 KB
/
problema.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
#Interfaz genérico para los estados del espacio de estados
from abc import abstractmethod
from abc import ABCMeta
class Estado(metaclass=ABCMeta):
#Devuelve el Vector con la lista de Operadores aplicables sobre este Estado
@abstractmethod
def operadoresAplicables(self):
pass
#Indica si este es un estado final (solución)
@abstractmethod
def esFinal(self):
pass
@abstractmethod
#Genera un nuevo Estado resultante de aplicar el Operador indicado
def aplicarOperador(self,operador):
pass
#Interfaz para encapsular operadores
class Operador(metaclass=ABCMeta):
@abstractmethod
def getEtiqueta(self):
pass
@abstractmethod
def getCoste(self):
pass
# Clase genérica (indepeniente de estados y algoritmos concretos) que representa un problema de búsqueda en espacio de estados.
# Está caracterizado por un Estado inicial y un método de Busqueda
class Problema:
def __init__(self,inicial,buscador):
self.inicial=inicial
self.buscador=buscador
#Aplica el método de Busqueda de este Problema concreto para resolverlo.
#Devuelve la lista de Operadores que permiten alcanzar un Estado final desde el Estado inicial del Problema
def obtenerSolucion(self):
return self.buscador.buscarSolucion(self.inicial)