Definición
- Tiene un nivel de competencia equivalente o superior a un experto humano en un dominio concreto del saber.
- Hace uso y representa conocimiento explícito, como si razonase.
- Diagnóstico médico
- Análisis financiero
- Control y monitorización de procesos
- Educación
- Diagnóstico de fallos y mantenimiento de máquinas
- …
Se utilizan:
- En problemas de dominios complejos y especializados
- Cuando no existe aproximación algorítmica o no hay formas de aprender a resolver el problema
- Existe conocimiento para su solución, tanto dado por expertos o documentado
De ahí nace la ingeniería del conocimiento: expertos que se encargan de gestionar y ordenar el conocimiento.
A la hora de diseñar estos sistemas:
- Primero se debe recoger el conocimiento sobre el problema y su solución por parte de un ingeniero del conocimiento.
- Luego se representa el conocimiento de un modo computacionalmente tratable para su razonamiento en máquinas.
Comparativas
| Sistemas basados en conocimiento | Búsqueda en espacio de estados |
|---|---|
| Base de conocimiento | Estados de representación del problema y heurísticas |
| Método de razonamiento | Algoritmo de búqueda |
| Hechos conocidos | Estado inicial |
| Hechos inferidos | Estados explorados y el estado actual |
| Respuesta a una consulta | Estado solución |
| Hechos | Conocimiento |
|---|---|
| Específicos del problema | Generales del dominio |
| Dinámicos | Relativamente estáticos |
| Aumenta durante la resolución | En general no varía |
| Necesidad de almacenamiento y recuperación eficiente | Necesidad de razonamiento eficiente |
| Precisos y ciertos | Puede ser impreciso e incierto |
| Programación convencional | Sistemas expertos |
|---|---|
| Programación imperativa | Programación declarativa |
| Modificación por reprogramación | Modificación de la Base de Conocimiento |
| Solución algorítmica | Solución por razonamiento basado en conocimiento |
| Normalmente precisa y cierta (óptima) | Imprecisa y con grados de certeza |
| Ejecución guiada por el flujo del código | Ejecución guiada por el motor de inferencia |
- La programación imperativa utiliza instrucciones en orden para describir las operaciones que se deben realizar. Tiene construcciones como bucles y condicionales.
- La programación declarativa es un conjunto de reglas quizás útiles, pero que se pueden ejecutar en cualquier orden y solo un subconjunto de ellas.
Funcionamiento
En la base de hechos se puede almacenar:
- Datos y hechos del problema
- Metas a alcanzar
- Hipótesis a probar
- Reglas a la espera
- Listas de subproblemas
- …

Estructura de un sistema experto
Sistemas basados en reglas
La base de conocimiento está formada por reglas de producción que tienen la siguiente forma:
SI situación ENTONCES acción
- Situación: condiciones a satisfacer para poder realizar la acción
- Acción: operación a realizar cuando la regla se cumple. Algunas acciones
típicas son:
- Añadir hecho a la base de hechos.
- Eliminar algún hecho de la base de hechos.
- Ejecutar algún procedimiento.
- Base de hechos:
T = 39 - Base de conocimiento (en forma de reglas):
SI T > 36.5 ==> fiebre
El motor de inferencia analizará todas las reglas y verá si puede ejecutar
alguna. Como T es mayor que 36.5, esta se ejecutará y se añadirá a la base de
hechos fiebre.
Las reglas de producción son autoexplicativas, con conocer el camino que ha llevado el sistema se puede explicar el proceso de toma de decisiones. Incluso se puede resumir.
En redes neuronales, en cambio, es mucho más difícil. Actualmente, es un tema abierto de investigación.
Conocimiento propio + Respuesta + Explicación VS Respuesta (basado en conocimiento) (redes neuronales)
Y aún así triunfan las redes neuronales…
Porque es muy difícil crear las reglas de conocimiento como para poder replicar la capacidad de una red neuronal de millones de parámetros.
Razonamiento
Aunque las reglas son:
- piezas de conocimiento independientes,
- están desacopladas,
- y se pueden aplicar siempre que su condición sea cierta en cualquier orden
pueden existir relaciones entre ellas. Por ejemplo, si una regla concluye algo de la parte de condición de la otra, ambas estarán relacionadas. Estas dependencias se pueden representar mediante un grafo de razonamiento.

Se usa un arco entre varios ejes para indicar un $\land$ (y lógico). Si el arco no aparece, quiere decir que se trata de un $\lor$ (o lógico).
«De los síntomas obtener un diagnóstico»
- Se parte de los hechos de la memoria de trabajo
- Se emparejan los hechos con los antecedentes de las reglas
- Se aplican las reglas hasta se llega al objetivo o no se puede seguir
- Aplicación de criterios de selección de las reglas aplicables dentro del conjunto conflicto.
Principio de refracción: no se ejecuta reiteradamente una misma regla, aunque se cumpla.
R1. IF coche no arranca, THEN comprobar batería
R2. IF coche no arranca THEN comprobar combustible
...
R75. IF comprobar batería AND voltaje batería < 10V THEN cambiar batería
...
R120. IF comprobar combustible AND depósito de combustible vacío THEN llenar depósito.

Base de conocimiento:
Regla 0. IF hay placas (puntos blancos) en la garganta
THEN diagnóstico: posible infección de garganta
Regla 1. IF garganta inflamada AND sospechamos infección bacteriana
THEN diagnóstico: posible infección de garganta
Regla 2. IF temperatura paciente > 39
THEN paciente tiene fiebre
Regla 3. IF paciente enfermo más de una semana
AND paciente tiene fiebre
THEN sospechamos infección bacteriana
Memoria de trabajo inicial:
- Temperatura 40ºC
- Enfermo desde hace 2 semanas
- Garganta inflamada
| Memoria de Trabajo | Conjunto Conflicto | Regla ejecutada |
|---|---|---|
| R2 | R2 Añade fiebre |
| R3 | R3 Añade posible infección bacteriana |
| R1 | R1 Añade diagnóstico: posible infección de garganta |
«Del diagnóstico, obtener los síntomas»
Esta es más eficiente porque implica explorar menos ramas.
Usando el mismo conocimiento que en ejemplos previos:
Regla 0. IF hay placas (puntos blancos) en la garganta
THEN diagnóstico: posible infección de garganta
Regla 1. IF garganta inflamada AND sospechamos infección bacteriana
THEN diagnóstico: posible infección de garganta
Regla 2. IF temperatura paciente > 39
THEN paciente tiene fiebre
Regla 3. IF paciente enfermo más de una semana
AND paciente tiene fiebre
THEN sospechamos infección bacteriana

Nótese que todos los nodos hoja son hechos.
Todos los posibles diagnósticos en este sistema son:
placas en la garganta(R0)temperatura > 39,enfermo > 1 semana,garganta inflamada(R2, R3, R1)
Recuerde que si hay un arco entre dos conexiones, significa que ambas reglas o hechos deben ser ciertos.
Estas formas son los métodos usuales para sistematizar el razonamiento automático sobre las reglas:
- El razonamiento hacia delante es dirigido por los datos.
- El razonamiento hacia atrás es dirigido por las preguntas de los usuarios o especulaciones.
Pseudocódigo
Método básico de razonamiento:
BH = hechos_iniciales
BC: BaseConocimiento
while not condFinal(BH) or not accionParada():
conjunto_conflicto = equiparar(BC, BH)
regla = resolver(conjunto_conflicto)
nuevos_hechos = aplicar(regla, BH)
BH += nuevos_hechos
Encadenamiento hacia delante:
def raz_delante(hechos_iniciales: Hecho[], meta, BC: BaseConocimiento) -> éxito | fracaso:
BH = hechos_iniciales
conjunto_conflicto = extrae_cualquier_regla(BC)
while meta not in BH and not empty(conjunto_conflicto):
conjunto_conflicto = equiparar(antecedentes(BC), BH)
if not empty(conjunto_conflicto):
regla = resolver(conjunto_conflicto)
nuevos_hechos = aplicar(regla, BH)
BH += nuevos_hechos
if meta in BH:
return 'éxito'
else:
return 'fracaso'
Encadenamiento hacia atrás:
def raz_atras(hechos_iniciales: Hecho[], BC: BaseConocimiento) -> éxito | fracaso:
BH = hechos_iniciales
if verificar(meta, BH, BC):
return 'éxito'
else:
return 'fracaso'
Verificación de reglas:
def verificar(meta: Hecho, BH: BaseHechos, BC: BaseConocimiento) -> bool:
if meta in BH:
return True
verificado = False
conjunto_conflicto = equiparar(consecuentes(BC), meta)
while not empty(conjunto_conflicto) and not verificado:
regla = resolver(conjunto_conflicto)
conjunto_conflicto -= regla
nuevas_metas = extraer_antecedentes(regla)
verificado = True
while not empty(nuevas_metas) and verificado:
meta = seleccionar_meta(nuevas_metas)
nuevas_metas -= meta
verificado = verificar(meta, BH)
if verificado:
BH += meta
return verificado
Lógicas
Los lenguajes naturales son una representación simbólica de información, una herramienta no solo para la comunicación de ideas, sino también para el propio pensamiento.
Y a partir de esta hipótesis, también podemos decir que las máquinas también pueden hacer lo mismo: representar información mediante símbolos, manipularlos para realizar razonamientos y así poder resolver problemas.
Si embargo, no sabemos como computar el lenguaje natural, por lo que se elaboran lenguajes más sencillos que sí lo sean. Las reglas vistas antes son una forma de hacerlo. Y las lógicas son otra.
Una lógica representa de manera formal las relaciones existentes entre conceptos, objetos, propiedades, valores… Las reglas, por otro lado, se manejan de un modo mucho más laxo.
Cuando los sistemas expertos empezaron a tener éxito, se propuso combinar ambos métodos. Sin embargo la lógica proposicional tiene una mala calidad de representación, y se procedió a idear otros tipos que la ampliasen:
- Lógica proposicional: proposiciones con un valor de verdad y unos operadores lógicos.
- Lógica de predicados: crea conjuntos para representar categorías.
- Lógica difusa o Fuzzy sets: en un conjunto difuso se pueden definir grados de pertenencia. Por ejemplo, muy alto puede estar en varios rangos de alturas, dependiendo de cada uno. En general se busca que la categorización sea gradual y no con una frontera fija.
- Lógica temporal: manipulación a nivel de representación y razonamiento con hechos temporales.
- Lógicas no monótonas: permiten negar hechos que antes se consideraban ciertos. No es tan sencillo como simplemente eliminarlo, sino que es posible que dicho hecho se usase para deducir otros.
- …
Lógica proposicional
- Las proposiciones son afirmaciones verdaderas o falsas
- Se unen con operadores lógicos: $\land$ (y), $\lor$ (o), $\neg$ (no) y $\to$ (implica)
- Se usan mecanismos de razonamiento o inferencia: modus ponens, modus tollens… (lista completa)
Algunas formas de razonamiento:
- Razonamiento deductivo: A partir de una regla o características generales, deducir propiedades de ejemplos concretos.
- Razonamiento inductivo (generalización): A partir de unos ejemplos, concluyo que el resto de elementos también cumplen las mismas condiciones o características.
- Razonamiento abductivo: Busca la mejor explicación para un conjunto de hechos
Lógica de predicados
- Añade la posibilidad de usar cuantificadores: $\forall$ (para todo) y $\exists$ (existe).
- Constantes como lista de objetos: $1, \text{Magno}, \text{Manzana}, 1.4142, \ldots$
- Predicados para relacionar lo objetos
El conocimiento se representa en forma de reglas cuantificadas de forma universal.
Redes semánticas
La información se relaciona entre sí, de forma que hay procesos de recuperación más eficientes y razonamiento sobre las redes.
Permite la herencia de propiedades (creación de subcategorías), lo que es útil para hacer generalizaciones. Ya no es necesario representar todo el comportamiento; sino que conjuntos, sus subconjuntos y sus relaciones se disponen de mecanismos de representación mucho más ricos.

Ejemplo sencillo de una red semántica