La teoría
de la retroalimentación en mecanismos, como por
ejemplo un termostato que regula la temperatura en
una casa, tuvo mucha influencia. Esto aún no era
propiamente Inteligencia Artificial. Se hizo mucho en
traducciones (Andrew Booth y Warren Weaver), lo que sembró
la semilla hacia el entendimiento del lenguaje
natural.
En el año 1955 Herbert Simon, el físico
Allen Newell y J.C. Shaw, programador de la RAND Corp. y
compañero de Newell, desarrolla el primer lenguaje de
programación orientado a la resolución de
problemas de la Inteligencia Artificial, el IPL-11. Un año
más tarde estos tres científicos desarrollan el
primer programa de
Inteligencia Artificial al que llamaron Logic Theorist, el
cual era capaz de demostrar teoremas matemáticos,
representando cada problema como un modelo de
árbol, en el que se seguían ramas en busca de la
solución correcta, que resultó crucial. Este
programa demostró 38 de los 52 teoremas del segundo
capítulo de Principia Mathematica de Russel y
Whitehead.
En 1956, con la ahora famosa conferencia de
Dartmouth, organizada por John McCarthy y en la cual se
utilizó el nombre de inteligencia artificial para este
nuevo campo, se separó la Inteligencia Artificial de la
ciencia del
computador, como tal. Se estableció como conclusión
fundamental la posibilidad de simular inteligencia humana en una
máquina.
En 1957 Newell y Simon continúan su trabajo con
el desarrollo del General Problems Solver (GPS). GPS era un
sistema orientado
a la resolución de problemas; a diferencia del Logic
Theorist, el cual se orientó a la demostración
de teoremas matemáticos, GPS no estaba programado para
resolver problemas de un determinado tipo, razón a la cual
debe su nombre. Resuelve una gran cantidad de problemas de
sentido común, como una extensión del principio de
retroalimentación de Wiener.
Diversos centros de investigación se
establecieron, entre los más relevantes están, la
Universidad
Carnegie Mellon, el Massachusetts Institute of Technologie (MIT),
encabezado por Marvin Minsky, la Universidad de Standford e IBM.
Los temas fundamentales eran el desarrollo de heurísticas
y el aprendizaje
de máquinas.
En 1957 McCarthy desarrolló el lenguaje
LISP. La IBM contrató un equipo para la
investigación en esa área y el gobierno de USA
aportó dinero al MIT
también para investigación en 1963.
A finales de los años 50 y comienzos de la
década del 60 se desarrolla un programa orientado a
la lectura de
oraciones en inglés
y la extracción de conclusiones a partir de su
interpretación, al cual su autor, Robert K. Lindsay,
denomina "Sad Sam". Este podía leer oraciones del tipo
"Jim es hermano de John" y "La madre de Jim es Mary", a partir de
ella el sistema concluía que Mary debía ser
también la madre de John. Este sistema representó
un enorme paso de avance en la simulación
de inteligencia humana por una máquina, pues era capaz de
tomar una pieza de información, interpretarla, relacionarla
con información anteriormente almacenada, analizarla y
sacar conclusiones lógicas.
En el mismo período de tiempo hay
trabajos importantes de Herbert Gelernter, de IBM, quien
desarrolla un "Demostrador Automático de Teoremas de la
Geometría", Alex Bernstein desarrolla un
programa para el juego de
ajedrez que se considera el antecedente para "Deep
Blue".
En 1961 se desarrolla SAINT (Simbolic Automatic
INTegrator) por James Slagle el cual se orienta a la
demostración simbólica en el área del
álgebra.
En 1964 Bertrand Raphael construye el sistema SIR
(Semantic Information Retrieval) el cual era capaz de comprender
oraciones en inglés.
A continuación un ejemplo, traducido, de
interacción entre SIR y un usuario:
Usuario: Todos somos personas
SIR: Comprendo
Usuario: Un dedo es una parte de la
mano
SIR: Comprendo
Usuario: Cada persona tiene dos
manos
SIR: La oración anterior es ambigua. Por
favor reconstrúyala.
Usuario: En cada persona hay dos manos
SIR: Comprendo
Usuario: ¿Cuantos dedos tiene
John?
SIR: La oración anterior es ambigua, pero
asumo que TIENE significa TIENE COMO PARTES. No se si los dedos
forman parte de John.
Usuario: John es un chico
SIR: Comprendo
Usuario: ¿Cuántos dedos tiene
John?
SIR: La oración anterior es ambigua, pero
asumo que TIENE significa TIENE COMO PARTES,
¿cuántos dedos por mano?.
Usuario: Cada mano tiene cinco dedos.
SIR: Comprendo
Usuario: ¿Cuántos dedos tiene
John?
SIR: La respuesta es diez.
En la década del 60 se comienza en el MIT el
estudio de la visión artificial, lo cual implica no solo
captar imágenes a
través de una cámara, sino también la
comprensión, de lo que estas imágenes
representan.
Un resultado importante en este trabajo lo constituye el
"mundo de micro-bloques", en el cual un robot era capaz de
percibir un conjunto de bloques sobre una mesa, moverlos y
apilarlos; el éxito
se debió a los investigadores Larry Roberts, Gerald
Sussman, Adolfo Guzman, Max Clowes, David Huffman, David Waltz,
Patrick Winston, y Berthold Horn.
Posteriormente se obtuvieron resultados importantes
entre ellos el de mayor resonancia fue el sistema SCHRDLU de
Terry Winograd, pues permitía interrogar y dar
órdenes a un robot que se movía dentro de un mundo
de bloques.
A continuación mostramos un ejemplo
traducido:
Usuario: Toma un bloque
rojo.
SCHRDLU: Ok.
Usuario: Busca un bloque más
pequeño que el que tienes y ponlo dentro de la
caja.
SCHRDLU: Asumo que PONLO se refiere al bloque
más pequeño que el que tengo.
Usuario: ¿Qué contiene la
caja?
SCHRDLU: La pirámide azul y el bloque
azul.
Usuario: ¿Qué sostiene a la
pirámide?
SCHRDLU: La caja.
Usuario: ¿Cuántos bloques no
están sobre la mesa?
SCHRDLU: Cuatro.
Usuario: ¿Es al menos uno de ellos
más estrecho que aquel que te dije que
recogieras?
SCHRDLU: Sí, el cubo rojo.
Usuario: ¿Lo sostiene algo?
SCHRDLU: Sí, la mesa.
Usuario: ¿Puede la mesa recoger
bloques?
SCHRDLU: No.
Usuario: La pirámide azul es
mía.
SCHRDLU: Comprendo.
Usuario: Todos los bloques que no son rojos son
míos, pero no poseo nada que sostenga una
pirámide.
SCHRDLU: Comprendo.
Usuario: ¿Poseo una caja?
SCHRDLU: No
Usuario: ¿Poseo algo de la
caja?
SCHRDLU: Si, dos cosas: El bloque azul y la
pirámide azul.
Aunque parezca impresionante la capacidad del sistema
para razonar y ejecutar acciones, no
se debe perder de vista el hecho que el robot se mueve en un
mundo muy simple de figuras geométricas, y que las
relaciones entre ellas son muy limitadas. En el mundo real
existen tantos objetos diferentes y relaciones entre ellos, que
tratar de llevar este sistema a un entorno real resulta
prácticamente imposible.
En los primeros años de la década del 60
Frank Rosemblatt desarrolla, en la Universidad de Cornell, un
modelo de la mente humana a través de una red neuronal y produce un
primer resultado al cual llama perceptrón. Este sistema
era una extensión del modelo matemático concebido
por McCullock y Pitts para las neuronas, y funcionaba
basándose en el principio de "disparar" o activar neuronas
a partir de un valor de
entrada el cual modifica un peso asociado a la neurona, si el
peso resultante sobrepasa un cierto umbral la neurona se dispara
y pasa la señal a aquellas con las que está
conectada. Al final, en la última capa de neuronas,
aquellas que se activen definirán un patrón el cual
sirve para clasificar la entrada inicial.
Este trabajo constituye la base de las redes neuronales de hoy en
día, sin embargo a raíz de su desarrollo
sufrió fuertes críticas por parte de Marvin
Minsky
y Seymour Papert lo cual provocó que la
mayoría de los investigadores interesados en el tema lo
abandonarán, y este no se retomara hasta los años
80.
En 1965-70, comenzaron a aparecer los programas
expertos, que predicen la probabilidad de
una solución bajo un set de condiciones, entre esos
proyectos
estuvo: DENDRAL, que asistía a químicos en estructuras
químicas complejas euclidianas; MACSYMA, producto que
asistía a ingenieros y científicos en la
solución de ecuaciones
matemáticas complejas, etc.
En la década 1970-80, creció el uso de
sistemas expertos, muchas veces diseñados para
aplicaciones médicas y para problemas realmente muy
complejos como MYCIN, que asistió a médicos en el
diagnóstico y tratamiento de infecciones en la sangre. Otros
son: R1/XCON, PIP, ABEL, CASNET, PUFF, INTERNIST/CADUCEUS, etc.
Algunos permanecen hasta hoy.
De 1975 en adelante, comienza la era de los lenguajes
expertos (shells) como EMYCIN, EXPERT, OPSS, etc. para luego
tratar de que éstos sean más amigables y
funcionales.
Las definiciones de Inteligencia Artificial son muchas,
pero podría decirse que son programas que realizan tareas
que si fueran hechas por humanos se considerarían
inteligentes.
Estos programas obviamente corren en un computador y se
usan, como por ejemplo, en control robótico,
comprensión de lenguajes naturales, procesamiento de
imágenes basado en conocimientos previos, estrategias de
juegos, etc. reproduciendo la experiencia que un humano
adquiriría y de la forma en que un humano lo
haría.
Para clasificar las máquinas como "pensantes", es
necesario definir qué es inteligencia y qué grado
de inteligencia implica resolver problemas matemáticos
complejos, hacer generalizaciones o relaciones, percibir y
comprender. Los estudios en las áreas del aprendizaje, del
lenguaje y de la percepción
sensorial han ayudado a los científicos a definir a una
máquina inteligente. Importantes desafíos han sido
tratar de imitar el comportamiento
del cerebro humano,
con millones de neuronas y extrema complejidad.
Características de la Inteligencia
Artificial.
- Una característica fundamental que
distingue a los métodos de Inteligencia Artificial de los métodos
numéricos es el uso de símbolos no
matemáticos, aunque no es suficiente para distinguirlo
completamente. Otros tipos de programas
como los compiladores y sistemas
de bases de
datos, también procesan símbolos y no se
considera que usen técnicas de Inteligencia
Artificial.Las conclusiones de un programa declarativo no son
fijas y son determinadas parcialmente por las conclusiones
intermedias alcanzadas durante las consideraciones al
problema específico. Los lenguajes orientados al
objeto comparten esta propiedad
y se han caracterizado por su afinidad con la Inteligencia
Artificial. - El comportamiento de los programas no es descrito
explícitamente por el algoritmo.
La secuencia de pasos seguidos por el programa es
influenciado por el problema particular presente. El programa
especifica cómo encontrar la secuencia de pasos
necesarios para resolver un problema dado (programa
declarativo). En contraste con los programas que no son de
Inteligencia Artificial, que siguen un algoritmo definido, que
especifica, explícitamente, cómo encontrar las
variables de
salida para cualquier variable dada de entrada (programa de
procedimiento). - El razonamiento basado en el
conocimiento, implica que estos programas incorporan
factores y relaciones del mundo real y del ámbito del
conocimiento
en que ellos operan. Al contrario de los programas para
propósito específico, como los de contabilidad
y cálculos científicos; los programas de
Inteligencia Artificial pueden distinguir entre el programa de
razonamiento o motor de
inferencia y base de conocimientos dándole la capacidad
de explicar discrepancias entre ellas. - Aplicabilidad a datos y
problemas
mal estructurados, sin las técnicas de Inteligencia
Artificial los programas no pueden trabajar con este tipo de
problemas. Un ejemplo es la resolución de conflictos
en tareas orientadas a metas como en planificación, o el diagnóstico de tareas en un sistema del
mundo real: con poca información, con una solución
cercana y no necesariamente exacta.
La Inteligencia Artificial incluye varios campos de
desarrollo
tales como: la robótica,
usada principalmente en el campo industrial; comprensión
de lenguajes y traducción; visión en máquinas
que distinguen formas y que se usan en líneas de
ensamblaje; reconocimiento de palabras y aprendizaje de
máquinas; sistemas computacionales expertos.
Los sistemas
expertos, que reproducen el comportamiento humano en un
estrecho ámbito del conocimiento, son programas tan
variados como los que diagnostican infecciones en la sangre e indican
un tratamiento, los que interpretan datos sismológicos en
exploración geológica y los que configuran
complejos equipos de alta tecnología.
Tales tareas reducen costos, reducen
riesgos en la
manipulación humana en áreas peligrosas, mejoran el
desempeño del personal
inexperto, y mejoran el control de
calidad sobre todo en el ámbito comercial.
Diferentes teorías:
- Construir réplicas de la compleja red neuronal del cerebro humano
(bottom-up). - Intentar imitar el comportamiento del cerebro humano
con un computador
(top-down).
Diferentes metodologías:
- La lógica difusa: permite tomar decisiones
bajo condiciones de incerteza. - Redes neuronales: esta tecnología es poderosa
en ciertas tareas como la clasificación y el
reconocimiento de patrones. Está basada en el concepto de
"aprender" por agregación de un gran número de
muy simples elementos.
Este modelo
considera que una neurona puede
ser representada por una unidad binaria: a cada instante su
estado puede
ser activo o inactivo. La interacción entre las neuronas
se lleva a cabo a través de sinapsis. Según el
signo, la sinapsis es excitadora o inhibidora.
El perceptrón está constituido por las
entradas provenientes de fuentes
externas, las conexiones y la salida. En realidad un
perceptrón es una Red Neuronal lo
más simple posible, es aquella donde no existen capas
ocultas.
Para cada configuración de los estados de las
neuronas de entrada (estímulo) la respuesta del
perceptrón obedece a la siguiente dinámica: se suman los potenciales
sinápticos y se comparan con un umbral de
activación. Esta suma ponderada es también llamada
campo. Si el campo es mayor que un umbral, la respuesta de la
neurona es activa, si no, es inactiva.
Con una arquitectura tan
simple como la del perceptrón no se puede realizar
más que una clase de funciones
"booleanas" muy simples, llamadas linealmente separables. Son las
funciones en las cuales los estados de entrada con salida
positiva pueden ser separados de aquellos a salida negativa por
un hiperplano. Un hiperplano es el conjunto de puntos en el
espacio de estados de entrada, que satisfacen una ecuación
lineal. En dos dimensiones, es una recta, en tres dimensiones un
plano, etc.
Si se quieren realizar funciones más complejas
con Redes
Neuronales, es necesario intercalar neuronas entre las capas
de entradas y de salida, llamadas neuronas ocultas. Una red
multicapas puede ser definida como un conjunto de
perceptrones, ligados entre si por sinapsis y dispuestos en
capas siguiendo diversas arquitecturas. Una de las arquitecturas
más comúnmente usada es llamada feedforward:
con conexiones de la entrada a las capas ocultas y de
éstas hacia la salida.
El funcionamiento de una Red Neuronal es gobernado por
reglas de propagación de actividades y de
actualización de los estados.
I.1. Objetivos de
la Investigación en Inteligencia
Artificial.
Los investigadores en inteligencia artificial se
concentran principalmente en los sistemas expertos, la
resolución de problemas, el control
automático, las bases de datos inteligentes y la ingeniería del software (diseños de
entornos de programación inteligente).
Otros investigadores están trabajando en el reto
del reconocimiento de patrones donde se espera un rápido
progreso en este campo que abarca la comprensión y la
síntesis del habla, el proceso de
imágenes y la visión
artificial.
Finalmente, la fundamental investigación sobre la
representación del conocimiento, la
conceptualización cognoscitiva y la comprensión del
lenguaje
natural.
Uno de los principales objetivos de los investigadores
en inteligencia artificial es la reproducción automática del
razonamiento humano.
El razonamiento de un jugador de ajedrez no
siempre es el mismo que el de un directivo que se pregunta la
viabilidad de fabricar un nuevo producto. Un
niño jugando con bloques de madera en una
mesa no tiene idea de la complejidad del razonamiento necesario
para llevar a cabo la construcción de una pirámide, e
intentar que un robot hiciera lo mismo que el niño
requeriría un largo programa de computador.
Formas de considerar situaciones complejas
son:
- deducción, que permite obtener conclusiones de
reglas cuyas premisas hemos comprobado - inducción que produce reglas a partir de
observaciones parciales.
Estos dos tipos principales pueden utilizarse de un modo
analítico (el razonamiento se divide en submódulos
que son más difíciles de manejar, o de un modo
sintético (inverso del proceso anterior, juntando
elementos que se separaron anteriormente).
La inducción puede tener lugar cuando se
comparan situaciones que son casi similares, con
parámetros desconocidos en una situación dada
asignándole los valores
que tienen ya en una situación de referencia; este es un
razonamiento por analogía.
Los métodos para razonar son variados. La
iteración significa repetir la misma secuencia de
razonamiento hasta que se alcance una condición de final;
la recursión consiste en una forma particular del
razonamiento que se llama a sí misma, como aquellas
muñecas rusas que están unas dentro de otras, hasta
llegar a un problema simple que es fácil de
resolver.
Las estrategias para
el razonamiento pueden hacer uso de la especialización, la
reducción al absurdo, de la eliminación de caminos
poco prometedores y de la reducción de las
diferencias.
En todos los casos, la
organización jerárquica del conocimiento y la
segmentación de los problemas son
métodos que se emplean siempre al intentar resolver un
problema complejo.
La función
asignada a los sistemas expertos es la de razonar.
I.2.
Símbolos vs. Métodos
Numéricos.
El primer período de la Inteligencia Artificial,
llamado sub-simbólico, data de aproximadamente 1950 a
1965. Este período utilizó representaciones
numéricas (o sub-simbólicas) del conocimiento.
Aunque la mayor parte de los libros de
Inteligencia Artificial enfatizan el trabajo
realizado por Rosenblatt y Widrow con redes neuronales durante
este período, la realidad es que otra importante escuela
sub-simbólica data también de la misma época
y estos son los algoritmos
evolutivos.
La escuela clásica dentro de la Inteligencia
Artificial, utiliza representaciones simbólicas basadas en
un número finito de primitivas y de reglas para la
manipulación de símbolos. El período
simbólico se considera aproximadamente comprendido entre
1962 y 1975, seguido por un período dominado por los
sistemas basados en el conocimiento de 1976 a 1988. Sin embargo,
en este segundo período las representaciones
simbólicas (por ejemplo, redes semánticas,
lógica de predicados, etc.) siguieron siendo parte central
de dichos sistemas.
La Programación Lógica tiene sus
orígenes más cercanos en los trabajos de J. A.
Robinson que propone en 1965 una regla de inferencia a la que
llama resolución, mediante la cual la demostración
de un teorema puede ser llevada a cabo de manera
automática.
En la actualidad, la Inteligencia Artificial empieza a
extender sus áreas de investigación en diversas
direcciones y trata de integrar diferentes métodos en
sistemas a gran escala, tratando
de explotar al máximo las ventajas de cada
esquema.
La resolución es una regla que se aplica sobre
cierto tipo de fórmulas del Cálculo de
Predicados de Primer Orden, llamadas cláusulas y la
demostración de teoremas bajo esta regla de inferencia se
lleva a cabo por reducción al absurdo.
Otros trabajos importantes de esa época que
influyeron en la programación lógica, fueron los de
Loveland, Kowalski y Green, que diseña un probador de
teoremas que extrae de la prueba el valor de las
variables para las cuales el teorema es válido.
Estos mecanismos de prueba fueron trabajados con mucho
entusiasmo durante una época, pero, por su ineficiencia,
fueron relegados hasta el nacimiento de Prolog, que surge en 1971
en la Universidad de
Marsella, Francia.
Actualmente, la programación lógica ha
despertado un creciente interés
que va mucho más allá del campo de la Inteligencia
Artificial y sus aplicaciones. Los japoneses, con sus proyectos de
máquinas de la quinta generación, dieron un gran
impulso a este paradigma de
programación.
La Lógica de Primer Orden, es uno de los
formalismos más utilizados para representar conocimiento
en Inteligencia Artificial. La Lógica cuenta con un
lenguaje formal mediante el cual es posible representar
fórmulas llamadas axiomas, que permiten describir
fragmentos del conocimiento y, además consta de un
conjunto de reglas de inferencia que aplicadas a los axiomas,
permiten derivar nuevo conocimiento.
El Alfabeto del Lenguaje de la Lógica de
Primer Orden contiene dos tipos de
símbolos:
- Símbolos lógicos, entre los que se
encuentran los símbolos de constantes proposicionales
true y false; los símbolos de operadores proposicionales
para la negación, la conjunción, la
disyunción y las implicaciones (=>, <=); los
símbolos de operadores de cuantificación como el
cuantificador universal; el cuantificador existencial; y los
símbolos auxiliares de escritura
como corchetes [,], paréntesis (,) y coma. - Símbolos no lógicos, agrupados en el
conjunto de símbolos constantes; el conjunto de
símbolos de variables individuales; el conjunto de
símbolos de funciones n-arias; y el conjunto de
símbolos de relaciones n-arias.
A partir de estos símbolos se construyen las
expresiones válidas en el Lenguaje de
Primer Orden: los términos y las
fórmulas.
Un término es cualquiera de las
tres expresiones siguientes: una constante, por ejemplo, el
número "100", la palabra "alfredo" y la letra "c"; o una
variable, por ejemplo, "X" o bien una expresión de la
forma "f(t1,…,tn)" donde "f" es un símbolo de
función n-aria y t1,…,tn son términos. Ejemplos
de funciones son: f(100,X), padre(Y) y sucesor(X).
Las fórmulas atómicas o elementales
son expresiones de la forma R(t1,…,tn) donde R es un
símbolo de relación n-aria y t1,…,tn son
términos.
Ejemplos de fórmulas son:
positivo(3),not(igual(4,doble(2))),
recetar(X,aspirina)<=tiene(X,fiebre),
tiene(X,cefalea).
Esta última establece una regla que dice que, si
X tiene fiebre y cefalea (dolor de cabeza), X debe tomar una
aspirina.
El Lenguaje de Primer Orden posee un amplio poder de
expresión, los términos permiten nombrar los
objetos del universo,
mientras que las fórmulas permiten afirmar o negar
propiedades de éstos o bien establecen las relaciones
entre los objetos del universo.
Puede decirse que la Programación Lógica
utiliza la Lógica de Primer Orden como lenguaje de
programación. Prolog es un ejemplo de lenguaje basado
en la Lógica de Primer Orden y aunque toma su nombre de
este término ("PROgramming in LOGic"), no abarca toda la
riqueza de la Lógica de Primer Orden para resolver
problemas, pues está restringido al uso de cierta clase de
fórmulas denominadas cláusulas definidas o
cláusulas de Horn.
Un programa lógico está formado por un
conjunto finito de cláusulas de programa que son hechos o
reglas. Por ejemplo:
padre(luis,miguel). hecho
padre(miguel,jose). hecho
padre(jose,juan). hecho
abuelo(X,Y):-padre(X,Z), padre(Z,Y). regla
Este programa está formado por cuatro
cláusulas de programa, las tres primeras son del tipo
hecho y definen la relación padre/2 y la cuarta una regla
que define la relación abuelo/2. Nótese el uso de
las variables X,Y y Z en esta cláusula, las cuales
permiten definir de manera general en Prolog la relación
"ser abuelo de", pues la lectura
declarativa de dicha cláusula es la siguiente: "Para
cualesquiera X,Y,Z se cumple que: X abuelo de Y, si X padre de Z
y Z padre de Y".
En Prolog es posible hacer preguntas sobre objetos y
relaciones del dominio y estas
preguntas se formulan como objetivos o metas, que son evaluadas
por el intérprete de Prolog utilizando su mecanismo de
inferencia interno, el cual determina si la meta a
demostrar es una consecuencia lógica del programa,
aplicando reglas de deducción para obtener la
respuesta.
Por ejemplo, del programa anterior, utilizando la
cláusula de tipo meta ?abuelo(X,juan), para
preguntar ¿quién es el abuelo de Juan? o bien
¿quiénes son los abuelos de Juan?, es posible
deducir que Luis es abuelo de Juan, aunque implícitamente
no existe en el programa ningún hecho que así lo
afirme.
En este caso la ejecución del programa, para
dicha meta, arrojaría como resultado que
X=luis.
El método de
deducción utilizado por Prolog, para dar respuesta a los
objetivos planteados, se basa en el uso de una única regla
de inferencia: el Principio de Resolución.
Los primeros trabajos de prueba automática de
teoremas utilizaban la resolución, aplicada a
cláusulas cualesquiera, pero el problema de las
deducciones con cláusulas generales es el gran
número de combinaciones posibles para llevar a cabo las
resoluciones.
Por ello Prolog restringe el conjunto de
cláusulas, lo que le permite llevar a cabo una prueba
dirigida y, en la mayoría de los casos, con un universo de
posibilidades explorable en tiempo de
ejecución.
Realmente, en Prolog se hace uso de una estrategia de
refinamiento de dicho principio, denominada
Resolución-SLD, la cual se aplica a cláusulas
definidas.
Cuando una tarea se realiza por medio de un algoritmo
perfectamente definido de almacenamiento,
clasificación o cálculo, lo puede hacer un
computador. Este concepto de algoritmo, secuencial, fijo y de
determinadas operaciones, es
incapaz de manejar problemas donde el camino del razonamiento es
variable y donde deben afrontarse situaciones diversas sin haber
sido especificadas.
La Inteligencia Artificial hace uso de un tipo de
lenguaje diferente como es el caso de LISP y PROLOG.
En 1932, Cannon visualizó la evolución natural como un proceso de
aprendizaje. Alan Turing reconoció, en 1950, que debe
haber una conexión obvia entre el aprendizaje de
máquina y la evolución, y señaló que
se podrían desarrollar programas para jugar ajedrez usando
esta técnica. Campbell conjeturó en 1960 que en
todos los procesos que
llevan a la expansión del conocimiento, se involucra un
proceso ciego de variación y supervivencia
selectiva.
Los primeros intentos de aplicar de manera formal la
teoría
de la evolución, a problemas prácticos de
ingeniería, apareció en las áreas de control
de procesos estadísticos, aprendizaje de máquina y
optimización de funciones. Tal vez el primer intento serio
de este tipo se dio en el trabajo que realizaron Box y sus
colegas en 1957, en el desarrollo de una técnica que
denominaron operación evolutiva, la cual se aplicó
a una planta de manufactura, y
que se implanto sobre la base de los votos de un comité de
jefes técnicos. Bajo este esquema, la calidad del
producto avanzaba a través de mutaciones aleatorias y la
selección era determinada por el
comité.
Por su parte, Friedberg intentó, en 1958, hacer
que un programa en lenguaje máquina se mejorara a
sí mismo, seleccionando instrucciones que se asociaran
más frecuentemente con un resultado exitoso. Aunque
Friedberg nunca mencionó explícitamente estar
simulando la evolución natural, esa es la
interpretación más comúnmente aceptada de su
trabajo, y a pesar de que tuvo cierto éxito
evolucionando manipuladores de bits y determinando las
interconexiones de una caja negra de 1400 terminales, la comunidad de
Inteligencia Artificial de la época prestó poca
atención a su trabajo. Por ejemplo, Minsky
lo criticó duramente, argumentando que una búsqueda
puramente aleatoria era mucho mejor que el algoritmo de
Friedberg.
El trabajo de Bremermann, en 1958, se enfocó
más a la optimización, introduciendo el importante
manejo de un valor de aptitud, y definiendo a un individuo como
una cadena de símbolos binarios (unos y ceros). Bremermann
advirtió, acertadamente, que la mutación jugaba un
papel
importante en la evolución, pues impedía el
estancamiento en mínimos locales. Aunque muchas de sus
ideas se usan hoy en día, Bremermann cometió el
error de tratar de optimizar funciones lineales y convexas,
obteniendo resultados decepcionantes, pues sus algoritmos
evolutivos tenían que ser complementados con otras
heurísticas para converger en una solución. Hoy
sabemos que los algoritmos evolutivos difícilmente pueden
competir con las técnicas tradicionales de
optimización en esos dominios.
Barricelli ofreció, en 1954, una de las primeras
simulaciones que usaba principios
evolutivos, utilizando los mismos procedimientos
generales que se usan hoy en día en la disciplina
conocida como vida artificial. Sin embargo, en este trabajo,
así como el que Reed realizó posteriormente en
1967, se concluyó que la cruza no parecía mejorar
la velocidad de
la adaptación selectiva, y el operador primordial era la
mutación.
Fue Fogel el que introdujo la primera técnica
evolutiva que realmente funcionó más o menos dentro
de los lineamientos actuales de la computación evolutiva. Su
programación evolutiva consistía en hacer
evolucionar autómatas de estados finitos por medio de
mutaciones. Fogel introdujo los importantes conceptos de población y selección, y aunque las
revisiones iniciales de su trabajo fueron favorables, algunos
investigadores, como Solomonoff, enfatizaron que el método
de Fogel no debía verse en su estado actual (en 1966) como
algo particularmente útil para resolver problemas, a
excepción de los más simples posibles. Solomonoff
vio a la programación evolutiva como una especie de
búsqueda escalando la colina modelada mediante
autómatas, y otros investigadores como Holland, Kieras,
Rada y Lenat compartieron esa opinión.
Otra técnica evolutiva dirigida particularmente a
la optimización de funciones continuas de alta complejidad
se desarrolló en Alemania, en
1965, por Rechenberg y Schwefel. Esta técnica, llamada
estrategia evolutiva, se utilizó inicialmente para
resolver problemas de ingeniería que desafiaban a los
métodos de optimización tradicionales, como el
gradiente conjugado, y se basa en la modificación
sistemática de un vector de números reales
(representando las variables de decisión del problema)
mediante operadores probabilísticos, usando ciertos
criterios para decidir en qué dirección dirigir la búsqueda. La
estrategia evolutiva utiliza como operador principal a la
mutación, y en su versión más reciente usa
la cruza como operador secundario.
Aunque el australiano Fraser propuso, desde fines de los
50, un procedimiento muy similar al que John Holland llamó
planes evolutivos a fines de los 60, es al segundo al que se le
suele atribuir la creación de la técnica que se
conoce como algoritmo genético, a raíz de que
Holland publicara el libro
"Adaptation in Natural and Artificial Systems" en
1975.
La principal diferencia del algoritmo genético
con las técnicas antes mencionadas, es que utiliza la
cruza como operador principal y a la mutación como
operador secundario (e incluso opcional). El algoritmo
genético, al igual que las redes neuronales, funciona como
una caja negra que recibe ciertas entradas y produce (tras una
cantidad de tiempo indeterminada) las salidas deseadas. Sin
embargo, a diferencia de éstas, los algoritmos
genéticos no necesitan entrenarse con ejemplos de
ningún tipo, sino que son capaces de generar sus propios
ejemplos y contraejemplos que guíen la evolución a
partir de poblaciones iniciales totalmente aleatorias.
Los mecanismos de selección del más apto y
de reproducción sexual del algoritmo genético, son
los encargados de preservar las características más
adecuadas de cada individuo a fin de hacer converger a la
población en soluciones
óptimas.
Los algoritmos genéticos se distinguen
también por no quedar atrapados fácilmente en
mínimos locales, como la mayor parte de las
técnicas de búsqueda clásicas, además
de usar operadores probabilísticos más robustos que
los operadores determinísticos, que las otras
técnicas suelen usar.
No obstante, siendo una heurística, tampoco
pueden garantizar encontrar siempre la solución
óptima, si bien la experiencia acumulada hasta la fecha
parece demostrar que, cuando se utilizan apropiadamente, pueden
proporcionar soluciones muy aceptables y, en la mayoría de
los casos, superiores a las encontradas con otras técnicas
de búsqueda y optimización.
Aunque aún atacados por algunos sectores de la
comunidad de Inteligencia Artificial, los algoritmos
genéticos, al igual que las redes neuronales, se han ido
ganando poco a poco, y sobre la base de la efectividad de sus
resultados en aplicaciones prácticas, el reconocimiento de
los investigadores como una técnica efectiva en problemas
de gran complejidad, como lo demuestra un número creciente
de conferencias y publicaciones especializadas alrededor del
mundo, en los últimos años.
I.4. Base de
Conocimiento. Sistemas Basados en Conocimiento.
Los métodos generales desarrollados para la
resolución de problemas y técnicas de
búsqueda al inicio de la era de la Inteligencia Artificial
demostraron no ser suficientes para resolver los problemas
orientados a las aplicaciones, ni fueron capaces de satisfacer
los difíciles requerimientos de la
investigación.
A este conjunto de métodos, procedimientos y
técnicas, se lo conoce como Inteligencia
Artificial Débil. La principal conclusión
que se derivó de este trabajo inicial fue que los
problemas difíciles sólo podrían ser
resueltos con la ayuda del conocimiento específico acerca
del dominio del problema.
La aplicación de estas ideas dio lugar al
desarrollo de los denominados Sistemas Basados en Conocimiento
(Knowledge Based Systems) y al aparecimiento de la
Ingeniería Cognoscitiva, como una rama de la Inteligencia
Artificial, que estudia los sistemas basados en el conocimiento.
La definición de un sistema basado en conocimiento puede
ser la siguiente:
Es un sistema computarizado capaz de resolver
problemas en el dominio en el cual posee conocimiento
específico.
La solución es esencialmente la misma que hubiera
dado un ser humano confrontado con idéntico problema,
aunque no necesariamente el proceso seguido por ambos puede ser
igual.
El simple concepto dado, puede causar confusión
ya que muchos sistemas basados en programas convencionales
podrían ser incorrectamente categorizados como sistemas
basados en conocimiento. Esta inconsistencia puede ser aclarada,
sobre la base de tres conceptos fundamentales que distinguen a
los sistemas basados en conocimiento de los programas
algorítmicos convencionales y de los programas generales
basados en búsqueda:
Inteligencia Artificial débil.
- Primero, la separación del conocimiento y el
modo en que es usado. - Segundo, la naturaleza del
conocimiento empleado (heurística antes que
algorítmica). - Tercero, El uso de conocimiento específico de
un determinado dominio.
Las características principales
son:
- amplia difusión del conocimiento
- fácil modificación
- respuestas coherentes
- disponibilidad casi completa
- conservación del conocimiento
- capacidad de resolver problemas disponiendo de
información incompleta - capacidad de explicar los resultados y la forma de
obtenerlos
Los principales problemas asociados a este
método son:
- las soluciones no siempre son las mejores o
correctas - conocimiento limitado frente al dominio de un
experto - carecen del sentido común o criterio que puede
tener un experto - es difícil extraer todo el conocimiento que
maneja un experto.
I.4.1 Experiencia, Habilidades y
Conocimiento.
Los tipos de experiencia que son de interés en
los sistemas basados en conocimiento, pueden ser clasificados en
tres categorías: asociativa, motora y
teórica.
Los sistemas basados en conocimiento son excelentes para
representar conocimiento asociativo. Este tipo de
experiencia refleja la habilidad heurística o el
conocimiento que es adquirido mayoritariamente, a través
de la observación.
Puede ser que no se comprenda exactamente lo que ocurre
al interior de un sistema (caja negra), pero se pueden asociar
entradas o estímulos con salidas o respuestas, para
resolver problemas que han sido previamente conocidos.
La experiencia motora es más física que cognitiva.
La habilidad se adquiere fundamentalmente a través del
ejercicio y la práctica física constante. Los
sistemas basados en conocimiento no pueden emular
fácilmente este tipo de experiencia, principalmente por la
limitada capacidad de la tecnología
robótica.
La experiencia teórica y el conocimiento
profundo permite que los humanos puedan resolver problemas que no
se han visto antes, es decir, no existe una posibilidad
asociativa. El conocimiento teórico y profundo se adquiere
a través de estudio y entrenamiento
formal, así como por medio de la resolución directa
de problemas.
Debido a su naturaleza teórica, este conocimiento
se puede olvidar fácilmente, a no ser que se use en forma
continua. Al momento, los sistemas convencionales basados en
conocimiento tienen muchas dificultades para duplicar este tipo
de experiencia. Sin embargo, los Sistemas de Razonamiento
Basado en Modelos representan un notable intento de
encapsular este conocimiento profundo y razonar con
él.
Estructura de los Sistemas Basados en
Conocimiento.
La arquitectura de un sistema basado en conocimiento de
alguna manera refleja la estructura
cognitiva y los procesos humanos. La primera parte es la memoria de
largo plazo, en la que guarda los hechos (Base de Hechos) y los
conocimientos (Base de Conocimientos) acerca del dominio en el
que tiene experiencia.
Estructura de un sistema basado en
conocimiento
La segunda parte es el sistema que realiza la
función de razonamiento para resolver problemas (Motor
de Inferencia). Finalmente, la tercera parte la conforman las
unidades de entrada y salida que permiten la
comunicación entre el sistema y su entorno.
La representación del conocimiento determina el
desarrollo de un sistema experto e influye en las estrategias de
control. Es muy versátil, hay muchas formas de hacerlo y
es complicada la elección. Generalmente la elección
está basada en la intuición o en las especiales
circunstancias del problema.
La primera fase es la adquisición del
conocimiento desde un experto y depende de la cantidad y de su
adecuada representación. Se deben conocer los límites,
pues sólo llegan hasta donde son capaces de resolver un
problema. Esto implica, que tiene que circunscribirse a un
dominio homogéneo.
El lenguaje de programación debe ser adecuado, se
usan principalmente el LISP y PROLOG, que difieren de los
lenguajes clásicos en que sus reglas (que también
contienen hechos) entran masivamente, y que el programa, es
decir, el motor de inferencia, encontrará el camino a
través de reglas.
Por otra parte, la programación procedural
consiste en una cuidadosa descripción de los algoritmos que marcan el
camino de los diferentes procedimientos y funciones en los
programas.
Estos dos modos de programación son
teóricamente iguales, pero en la práctica
difieren.
La programación declarativa es un tipo de
programación implantada en los sistemas expertos y por
ciertos lenguajes. La principal diferencia es que en la
declarativa las reglas se formulan independientemente de su
secuencia de aplicación. El modo en que se ejecutan las
reglas corresponde al motor de inferencia y es independiente de
las reglas en sí mismas. En la programación
procedural, las reglas se implantan y ejecutan en un orden
establecido.
Las ventajas en los sistemas expertos es la modularidad,
no hay un solo camino para responder a un problema y son
fáciles de leer, lo que simplifica comprobar su
consistencia.
La representación del conocimiento es esencial en
inteligencia artificial y es la base de la construcción de
un sistema experto.
Fases en la adquisición del
conocimiento:
- identificación del problema.
- Estructuración del conocimiento.
- La arquitectura del sistema y la maqueta.
- El prototipo y terminación del
sistema.
Tecnología de los Sistemas Basados en
Conocimiento.
Desde el punto de vista tecnológico, los Sistemas
Basados en Conocimiento pueden presentar varias formas de
aplicación:
- Aislada: un Sistema Basado en Conocimiento
único se relaciona con el entorno. - Integrada: varios Sistemas Basados en
Conocimiento conectados a bases de conocimiento comunes. Tipo
Front-End cuando todos los hechos y datos están
físicamente en la base común. Tipo
Back-End cuando los hechos y datos necesarios que no
estén en las bases comunes, pueden obtenerse de otros
SBC. - Embebida: un Sistema Basado en Conocimiento
está integrado con otros sistemas y no se lo
distingue.
Un motor de inferencia interpreta y evalúa los
hechos en la base de conocimientos para proveer una respuesta.
Este debe ser independiente del conocimiento y de los hechos. Se
puede caracterizar por:
El lenguaje en que ha sido escrito.
- La velocidad de trabajo: Inferencias /
segundo. - Las estrategias de búsqueda de
soluciones:
No Ordenada: aleatoria, heurística.
Ordenada: Encadenamiento hacia adelante (guiado
por los datos, deductivo), encadenamiento hacia
atrás (guiado por los objetivos,
inductivo).
- La forma en que elige el conocimiento.
- La posibilidad de incorporar
metaconocimiento. - El tipo de lógica que emplea en el
razonamiento:
Booleana, trivalente, multivalente, difusa.
Monotónica o no monotónica.
Atemporal o temporal.
Lógica de orden 0, orden 0+, orden
1.
- El método que utiliza para la evaluación del conocimiento incompleto o
incierto:
Determinístico.
Probabilístico.
Aproximado.
Difuso.
En un sistema experto, dado un estado particular de la
base de datos,
se deben reconocer las reglas aplicables y esto se llama filtrado
o identificación de patrones, operación
especialmente larga, ya que muchos sistemas realizan una
preselección de las reglas antes de que comience la
identificación propiamente tal. Es decir, se considera un
subconjunto de reglas y entre éstas, las aplicables. Esto,
es lo que se llama restricción.
Adicionalmente puede existir una Base de Datos con
información puntual sobre problemas específicos
anteriormente resueltos por el sistema, y que se usa como
información adicional en el proceso de
inferencia.
Una vez que las reglas han sido reconocidas deben ser
elegidas, dependiendo de la estrategia de control, que es la
selección.
Una vez que las regla han sido elegida ha de
ejecutarse.
Al módulo central del sistema experto que maneja
estas tres operaciones se le denomina motor de inferencia o
intérprete de reglas. Hay diversos tipos de motores de
inferencia según los métodos con que se manejan las
tres operaciones precedentes.
Identificación de patrones.
Esta operación determina cuáles son las
reglas potencialmente aplicables en un estado dado de la base de
datos.
Hay ciertos métodos típicos para resolver
problemas mediante Inteligencia Artificial como:
descomposición de problemas, inferencia deductiva,
deducción lógica, etc.
No es necesario que la búsqueda se aplique a
todas las reglas, el sistema de control puede decidir
cuáles no son necesarias a ese nivel.
El filtrado significa tener el conocimiento para
encontrar las reglas cuya precondición se satisfaga. Se
debe comparar por tanto la precondición con la base de
datos. Si es una regla deductiva "si premisa entonces
conclusión", la parte a ser probada de la regla, se llama
disparador o activador (tigger) es siempre una fórmula
bien formada ya sea de lógica proposicional o de
lógica de primer orden. Puede aplicarse a cualquier
hecho.
El único lenguaje que está totalmente
basado en el cálculo de predicados es el
PROLOG.
Los procesos de identificación de patrones pueden
mejorarse examinando, dentro del activador de cada regla, primero
los predicados con más restricciones, es decir, los que
tienen el menor número de variables libres. Otra forma de
proceder es que, para cada regla o parte de su activador, se
guarda en la memoria el
resultado de las posibles unificaciones para cada parte del
activador. Después de cada ciclo del motor de inferencia,
esta memoria se actualiza y se denomina filtrado por
propagación.
Ejecución de las reglas.
Después de la fase de filtrado, cuando una regla
está reconocida como aplicable, teniendo en cuenta la base
de datos existente, solo resta ejecutarla. Si hay varias posibles
reglas, la elección la realiza la estrategia de
control.
La conclusión de la regla tiene por objeto
modificar la base de conocimiento, creando, modificando o
suprimiendo un hecho.
La fase de restricción.
En un sistema dirigido por los datos, el filtrado
consiste en retener todas las reglas cuyas premisas son
verdaderas teniendo en cuenta los hechos (verdaderos) presentes
en la base de datos. Este sistema funciona en encadenamiento
hacia delante.
Si el sistema es a la vez dirigido por los datos y por
los objetivos, se denomina mixto.
La restricción también puede estar
especificado explícitamente por el experto para utilizar
reglas dentro de las reglas, es decir, meta reglas. Indica
qué grupo de
reglas debe ser retenido, por prioridad, o definir un orden en
los subconjuntos de las reglas.
El conocimiento puede organizarse en forma de red como
en las redes semánticas utilizadas en el análisis sintáctico del lenguaje. Su
posición dentro de la red dirige las restricciones
utilizando heurísticas. Esta formulación es
particularmente eficiente si se establece válidamente una
organización jerárquica del
conocimiento, en este caso existiría una taxonomía
de los hechos.
Otro modo de gobernar las restricciones es organizar las
reglas en paquetes o esquemas, lo que genera una estructura de
árbol en reglas, lo que es una ventaja.
Todos estos modos dependen de la forma en que
está representado el conocimiento.
La fase de selección.
Como después de las fases anteriores quedan
varias reglas se debe seleccionar una y luego de procesada el
programa debe saber dónde volver.
Cuando hay una o más reglas, se usan dos
estrategias:
– La búsqueda en anchura, que elige una,
generalmente la primera y se van ejecutando por turno antes de
comprobar que se ha alcanzado la condición final. Si no es
así se inicia otro ciclo del motor de inferencia. Este
tipo de búsqueda es exhaustiva y la usa el sistema experto
MYCIN.
- Otra estrategia es la de elegir una regla entre las
aplicables por medio de una heurística, procesarla y
modificar la base de datos. Si no se alcanza la
condición final, comienza otro ciclo del motor de
inferencia. Es por lo tanto, una estrategia en
profundidad.
Cada una de las estrategias pueden ser irrevocables o
avanzar por prueba y error.
Muchos sistemas efectúan marcha atrás, si
no hay regla aplicable, pero si el sistema está bajo un
control irrevocable se detendrá.
Visto en la práctica, las reglas poseen la
siguiente estructura:
SI (CONJUNTO_DE_PREMISAS) ENTONCES
CONSECUENCIA
o bien:
(CONJUNTO_DE_PREMISAS) CONSECUENCIA
El CONJUNTO_DE_PREMISAS contiene las cláusulas, o
simplemente condiciones, que deben cumplirse para que la regla
pueda ejecutarse, y la CONSECUENCIA representa el
resultado de la ejecución de dicha regla.
Un ejemplo sencillo que ilustra cómo representar
conocimiento a través de reglas:
Afirmación:
Todos los catedráticos son
doctores.
Representación Lógica – Matemática:
Para ver la fórmula seleccione la
opción "Descargar" del menú superior
En esta representación la variable x constituye
el conjunto de todas las personas posibles, CATEDRÁTICO
representa la relación "SER CATEDRÁTICO" y DOCTOR
la de "SER DOCTOR". De esta manera la regla anterior representa
el hecho: Para toda persona x, Si x
es catedrático entonces x es doctor.
Representación en SE:
Para ver la fórmula seleccione la
opción "Descargar" del menú superior
o bien:
SI (x ES CATEDRÁTICO) ENTONCES (x ES
DOCTOR)
En este caso CATEDRÁTICO y DOCTOR representan de
nuevo relaciones que deben estar representadas sobre el
sistema.
¿Cómo representar estas nuevas
relaciones?:
Como todo sistema informático los SE pueden
operar sobre un conjunto finito de elementos, para esto es
necesario definir el universo de
trabajo dentro del cual probaremos nuestras reglas. Sobre esta
base la definición de la relación SER
CATEDRÁTICO o CATEDRÁTICO, según sea la
representación usada, debe hacerse puntualmente para cada
individuo del universo, por ejemplo:
CATEDRÁTICO("Mario Pérez")
CATEDRÁTICO("Manuel Fernández")
CATEDRÁTICO("Maria González")
Los componentes de la relación SER DOCTOR se
deducen a partir de la relación SER CATEDRÄTICO y la
regla anterior, por lo que no es necesario una
representación o definición
explícita.
La inferencia o extracción de
conclusiones:
Para extraer una conclusión, o inferencia, se
hace necesario, antes que nada, saber el objetivo a
satisfacer, o problema a resolver. Este problema se plantea en
forma de objetivo que se toma por el Motor de Inferencia el cual
a través de la activación y encadenamiento de
reglas trata de llegar a una solución. Al seguir con el
ejemplo:
Objetivo:
"Es Mario Pérez Doctor"?
Solución:
Al aplicar la regla: SI (x ES CATEDRÁTICO)
ENTONCES (x ES DOCTOR)
Se debe chequear, como precondición de
activación, el cumplimiento de la
relación:
CATEDRÁTICO("Mario Pérez")
Se debe chequear la base de Axiomas o
Afirmaciones:
CATEDRÁTICO("Mario Pérez") existe en la
base de axiomas, por lo que la precondición es
verdadera.
Se dispara la consecuencia y se llega a la
conclusión que Mario Pérez es doctor.
Encadenamientos de reglas:
Existen dos mecanismos fundamentales de encadenamiento
de reglas:
1. Encadenamiento hacia delante:
Se produce cuando el objetivo propuesto al sistema hace
que se ejecute una regla, y la conclusión obtenida permite
que se ejecute otra, y así sucesivamente hasta llegar a
una respuesta, positiva o negativa. El punto final se detecta
cuando no se pueden producir más encadenamientos, por
ejemplo cuando se llega a un axioma.
Por ejemplo:
(1). SI (x ES JEFE_DPTO) ENTONCES (x ES
CATEDRÁTICO)
(2). CATEDRÁTICO("Mario Pérez")
(3). CATEDRÁTICO("Manuel Fernandez")
(4). CATEDRÁTICO("Maria Gonzalez")
Al evaluar el objetivo: "Mario Pérez es
Jefe_Dpto"?, se dispara la regla (1), la cual a su vez se
encadena con la (2), en este momento no se pueden producir
más encadenamientos pues la regla (2) es un axioma.
Llegado a este punto el Motor de Inferencia retrocede y da una
respuesta positiva a la pregunta.
- Encadenamiento hacia atrás:
Consiste en, dado un objetivo, buscar una regla que
permita establecer dicha conclusión, el proceso se repite
hasta encadenar con la regla cuya conclusión satisfaga el
objetivo propuesto, o se detecte que dicho problema no se puede
resolver positivamente. Por ejemplo para averiguar si "Mario
Pérez es doctor" se busca un regla que tenga esta
afirmación en sus consecuencias. Analizando las reglas
anteriores vemos que la regla:
(5). SI (x ES CATEDRÁTICO) ENTONCES (x ES
DOCTOR)
Satisface estas condiciones; siguiendo esta regla hacia
atrás tenemos que buscar una nueva que permita validar si
"Mario Pérez" es catedrático, lo cual se hace con
el axioma (2).
Los encadenamientos constituyen, de esta manera, una de
las herramientas
fundamentales del Motor de Inferencia; el Lenguaje PROLOG
solamente soporta el encadenamiento hacia atrás, el cual
constituye el más frecuentemente implementado.
- Sistemas
Expertos como Sistemas de
Información Orientados al Servicio.
En la Conferencia de
Dartmouth en 1956 donde Newell, Shaw y Simon presentaron sus
programas para demostrar las proposiciones lógicas
(Logical Theorist). La expresión de Inteligencia
Artificial la inventó en aquel mismo año John
McCarthy.
En 1959-60, aparece un programa demostrador de teoremas
basado en la lógica proposicional (General Problem Solver,
por Newell, Shaw y Simon).
La década comprendida entre 1960-70 vio sentar
los principios básicos de la investigación en las
estructuras en
árbol así como el movimiento de
ideas empleadas actualmente en la resolución de problemas
y los sistemas expertos. Los textos de Newell y Simon (1972) y
Nillson (1971) marcan el final de este periodo.
Los principales métodos de búsqueda en
estructuras en árbol, que todavía se emplean hoy en
los programas de sistemas expertos, estaban ya disponibles en
esos años.
Las primeras aplicaciones se hicieron en problemas
fáciles de describir, pero complejos de resolver, como por
ejemplo: juego de
ajedrez y demostración de teoremas
matemáticos.
Los sistemas expertos orientados al servicio derivaron
de la necesidad de resolver problemas cada vez más
complejos, con poca información estructurada y con
resultados probables, donde uno de los caminos era encontrar la
mejor solución a un problema, no necesariamente la
única posible.
Los hechos para una base de conocimiento deben ser
adquiridos a partir de experiencias humanas a través de
entrevistas y
observaciones. Este conocimiento es usualmente representada en la
forma de reglas "if-then" (reglas de producción): " si alguna condición
es verdadera, entonces la siguiente inferencia puede ser hecha (o
alguna acción tomada)". La base de conocimientos de un
sistema experto mejor incluye miles de reglas. Un factor de
probabilidad
es con frecuencia unido a las conclusiones de cada regla de
producción, porque la conclusión no es una
certeza.
Por ejemplo, un sistema para el diagnóstico de
enfermedades del
ojo debe indicar, basado en información que apoye esto, un
90% de probabilidad de que una persona tiene glaucoma, y este
puede también listar conclusiones con más bajas
posibilidades.
Un sistema experto puede desplegar la secuencia de
reglas a través de las cuales éste llega a su
conclusión. Trazar el flujo ayuda al usuario para apreciar
la credibilidad de su recomendación y es útil como
una herramienta de aprendizaje para estudiantes.
Los expertos humanos frecuentemente emplean las reglas
heurísticas, o "regla del pulgar", además de la
simple producción de reglas. Por ejemplo, un administrador de
crédito
puede saber que un solicitante con una historia pobre de
crédito, con un registro limpio
desde que adquirió un nuevo empleo, puede
actualmente ser un buen sujeto de crédito.
Los sistemas expertos han incorporado tales reglas
heurísticas e incrementándolas tienen la habilidad
de aprender a partir de la experiencia. Sin embargo, los sistemas
expertos son más bien soporte o apoyo más que
reemplazos para los expertos humanos.
II.1. Definición y
Antecedentes.
Los sistemas de información proveen apoyo para
las operaciones o servicios que
organizaciones
realizan para la sociedad. Los
sistemas son orientados verticalmente a sectores
específicos e industrias, ej.
Manufactura, servicios financieros, publicidad,
educación,
salud y
entretenimiento. Más que dirección administrativa y
funciones
administrativas, ellos apoyan actividades y procesos que son
la razón para una existencia organizacional (en muchos
casos, algún tipo de actividad manufacturera o el
desarrollo de servicios.
Los sistemas de este tipo varían enormemente,
pero ellos tienden a caer dentro de tres tipos principales:
manufactura, transacciones y Sistemas Expertos.
La meta conceptual de la industria
moderna es la manufactura integrada por computador (CIM).
Involucra diseño
y desarrollo de ingeniería, manufactura, marketing y
ventas, y todo
el campo de soporte y servicios.
El diseño asistido por computador (CAD) fue
aplicado primero en la industria electrónica. Hoy ellos dan forma a las
técnicas de modelación tridimensional para dibujo y
manipulación de objetos sólidos en una pantalla y
para derivar éstos a programas de diseño de piezas
y conjuntos,
modelación estructural y térmica,
fabricación en máquinas CNC (control
numérico).
Una vez que un producto es diseñado, su proceso
de producción puede ser delineado usando sistemas de
planificación de procesos asistidos por computador (CAPP)
que ayuden a seleccionar secuencias de operaciones y condiciones
de maquinado. Los modelos del
sistema de manufactura pueden ser simulado por computadores antes
de que sean construidos. Las funciones básicas de la
manufacturación: maquinado, formado, unión,
ensamble e inspección, son apoyados por el sistema de
manufactura asistida por computador (CAM) y sistemas de manejo de
material automatizado. El sistema de control de inventario busca
mantener un óptimo stock de partes y materiales
para controlar el movimiento del inventario, predecir los
requerimientos e iniciar procedimientos de órdenes de
compra.
La sofisticación tecnológica de los
sistemas de información de manufactura es impresionante y
esto incluye incrementadamente aplicaciones robóticas,
visión de computador y sistemas expertos. Lo central en el
concepto de CIM es una base de datos integrada que apoya a las
empresas
manufactureras y es conectada a otras bases de datos
administrativas.
En organizaciones de servicio no-manufacturero el tipo
de sistemas de información que prevalece es el que apoya
los procesos de transacción.
Transacciones son sets de entradas discretas,
suministradas por usuarios en impredecibles intervalos, los
cuales llaman a la base de datos buscando, analizando y
modificando. El procesador
evalúa el requerimiento y ejecuta éste
inmediatamente. Partes de la función de procesamiento
pueden ser llevadas a un terminal inteligente que distribuye el
requerimiento en la carga computacional. El tiempo de respuesta
(el lapso de tiempo entre el final de un requerimiento y el
comienzo de la respuesta) es una característica importante
de este tipo de sistema de teleproceso en tiempo real.
Los sistemas de transacción por teleproceso
constituyen la base de las industrias de servicio tales como
bancarios, seguros, seguridad,
transporte y
bibliotecas.
Ellos están reemplazando el piso del mayor intercambio
comercial de stock del mundo, conectando la más amplia
vía de telecomunicaciones en línea en un mercado
financiero global. De nuevo, lo central en un sistema de
transacción es su base de datos integrada.
El foco del sistema es el recipiente de servicios
más que el operador del sistema. Debido a esto, un agente
viajero local es capaz de planear un itinerario completo de un
viajero: incluyendo las reservaciones en aerolíneas,
hoteles, arriendo de autos,
programas culturales y deportivos, e incluso restaurantes, en
cualquier continente y ajustar éstos al programa y
presupuesto
del viajero.
II.2. Componentes: software de interfaz, base de
datos, programa computacional.
Una relativamente nueva categoría de sistemas de
información orientada al servicio es el sistema experto,
llamado así porque su base de datos guarda una
descripción de habilidades en la toma de
decisiones de experiencias humanas en un estrecho dominio de
procedimientos, tales como interpretación médica de
imagen,
impuestos,
diseño de piping, configuración de hardware en un sistema de
computadores, equipamiento para reparar malfuncionamientos o, en
la preparación de cerveza.
La motivación
para construir sistemas expertos es el deseo de replicar el
escaso, in estructurado y quizás el pobremente documentado
conocimiento empírico de especialistas que de este modo
puede ser rápidamente usado por otros.
Un programa computacional que usa inteligencia
artificial resuelve problemas en un dominio especializado que
ordinariamente requiere experiencia humana.
El primer sistema experto fue desarrollado en 1965 por
Edward Feigenbaum y Joshua Lederberg de la Universidad de
Standford en California, USA. Dendral fue diseñado para
analizar componentes químicos.
Los sistemas expertos ahora tienen aplicaciones
comerciales en campos tan diversos como diagnóstico
médico, ingeniería petrolera e inversión financiera.
Para realizar tareas de aparente inteligencia, un
sistema experto recurre a tres componentes: un software de
interfaz, una base de conocimiento y un motor de
inferencia.
1) El software de interfaz, mediante el cual el
usuario formula preguntas a éste, el sistema experto
solicita más información desde el usuario y
éste le explica al usuario el proceso de razonamiento
empleado para llegar a una respuesta.
2) La base de datos, llamada la base de
conocimiento que consiste de axiomas (hechos) y reglas para hacer
inferencias a partir de esos hechos acerca del dominio del
sistema.
En el transcurso de las tres décadas pasadas, la
tecnología para soportar el desarrollo de aplicaciones
intensivas de datos tuvo una evolución de cuatro
generaciones, sistemas de archivos,
sistemas de bases de datos jerárquicos, sistemas de bases
de datos en red y sistemas de bases de datos relacionales. En
todos los casos, la transición de una generación a
otra, ha sido motivada por la necesidad de minimizar los costos
de desarrollo (que escalan rápidamente), así como
los de mantenimiento
y mejora de programas de aplicación.
Los sistemas convencionales (relacionales y
prerrelacionales) han servido para satisfacer las necesidades de
aplicaciones del ambiente para
el cual fueron diseñadas, es decir, de procesamiento de
datos en negocios,
tales como control de inventario, nóminas,
cuentas por
cobrar, etc. Sin embargo, tan pronto como esta
tecnología abandonó los laboratorios de
investigación y registró su marca en el
mercado, serias limitaciones comenzaron a ser
expuestas.
Una variedad de aplicaciones comenzó a ser
identificada como difícil para implantarse con el uso de
sistemas de bases de datos relacionales. Estas nuevas
aplicaciones incluyen diseño asistido por computador,
ingeniería
de software, gestión
y administración de procesos (CAD, CAE, CASE
y CAM), sistemas basados en conocimiento (sistemas expertos y
"shell" para sistemas expertos), sistemas multimedia que
manejan imágenes, gráficas, voz y documentos
textuales; modelos estadísticos y científicos y
análisis de programas, y sistemas de información
geográfica, entre otras.
Con este nuevo esquema se presentan algunas dificultades
atribuibles al modelo de datos que es una representación
lógica de datos, relaciones e interacción entre los
datos . Un lenguaje de base de datos es una sintaxis para
representar un modelo y operaciones con una semántica
definida sobre el modelo de datos.
Las aplicaciones requieren, muchas veces: a) facilidades
para modelar y manejar entidades anidadas complejas (tales como
diseño de objetos y documentos compuestos); b) un conjunto
sofisticado de tipos de datos,
por ejemplo, tipos de datos definidos por el usuario, y tipos
grandes pero sin estructura (tales como imágenes, audio y
documentos textuales); c) representación de conceptos
semánticos (tales como relaciones de generalización
y agregación); d) el concepto de evolución temporal
de datos (por ejemplo, dimensión temporal de datos y
mantener versiones de datos); etc.
Por otra parte, también se presentan importantes
dificultades que no están relacionadas con el modelo de
datos. Algunas de estas aplicaciones requieren de cómputo
altamente intensivo, con un gran volumen de datos
en memoria residente, e imponen demandas de ejecución que
no pueden reunir los sistemas administradores de datos
relacionales y de datos prerrelacionales. El ambiente de algunas
de las aplicaciones también requiere de transacciones de
larga duración (por ejemplo, el objeto es tan grande que
su actualización toma mucho tiempo), transacciones
interactivas y cooperativas.
Existen dos razones principales por las que la metodología orientada a objetos es un
sólido fundamento para la nueva generación de
tecnología de base de datos.
Primero, un modelo de datos orientado a objetos puede
representar no solamente los datos, las relaciones y la
interacción de datos de modelos de datos convencionales,
sino también permite encapsular los datos y programas que
operan datos con un protocolo
definido y proporcionan una estructura uniforme para el trato de
tipos de datos arbitrarios definidos por el usuario. Algunas
relaciones en el modelo de datos, que son difíciles en
sistemas de bases de datos convencionales, son inherentes a un
modelo de datos basados en objetos.
Una segunda razón, es que a través de la
noción de encapsulamiento y herencia, esta
metodología está fundamentalmente diseñada
para reducir la dificultad de desarrollo y evolución de
sistemas complejos de "software". Esto fue, precisamente, la meta
que motivó a la tecnología de administración
de datos, a transformar sistemas de archivos hacia sistemas de
bases de datos relacionales.
Un modelo de datos orientado a objetos satisface el
objetivo de facilitar el diseño y desarrollo de bases de
datos complejas, sofisticadas y muy grandes.
Pero, muchos de los productos
comerciales comunes poseen distintos grados de calidad en cuanto
a desempeño y funcionalidad. Con frecuencia, los proveedores
ofrecen solamente motores (máquinas) de Bases de Datos con
interfaces propietarias para desarrollo de aplicaciones por los
programadores; la inclusión de herramientas de desarrollo
está comenzando a surgir.
Segundo, la fuerza de un
modelo de datos orientado a objetos es también su
debilidad. La riqueza de este modelo hace posible la
generación de unos más complejos y sus relaciones
con las aplicaciones de procesamiento de datos, introducen
aspectos complejos que el usuario debe manejar.
Tercero, no obstante el alto grado de desarrollo y
experimentación en lenguajes de
programación orientados a objetos y aplicaciones,
todavía no hay un consenso en la industria sobre la
semántica de su paradigma que vaya más allá
de un conjunto de conceptos de alto nivel sobre la programación
orientada a objetos, por lo que aún no existen
estándares en esta tecnología.
3) El programa computacional, llamado el motor de
inferencia, ejecuta el proceso de hacer inferencias, interpreta y
evalúa los hechos en la base de conocimiento para proveer
una respuesta.
La base de conocimiento es una estructura de reglas
conectadas que aplica experiencias humanas, con frecuencia
intuitivas, en la solución de problemas.
El proceso de adquisición de tal conocimiento
típicamente tiene tres fases:
- Un análisis funcional del ambiente, usuarios,
y las tareas desarrolladas por el experto. - Identificación de los conceptos del dominio de
experiencias y su clasificación de acuerdo a varias
relaciones. - Una entrevista,
por técnicas humanas o automatizadas del o los expertos
en el tema.
Los resultados de estos pasos son traducidos en una
llamada producción de reglas (de la forma "si la
condición x existe, entonces la acción y
sigue) y es guardado en la base de conocimiento.
Cadenas de producción de reglas forman las bases
para las capacidades deductivas automatizadas del sistema experto
y para su capacidad para explicar sus acciones a los
usuarios.
Los sistemas expertos son una variedad comercial de una
clase de programas computacionales llamados sistemas basados en
conocimiento. El conocimiento en sistemas expertos es altamente
in estructurado, esto es, el proceso de solucionar problemas de
un dominio no es manifiesto. Y es establecido
explícitamente en relaciones o deductivamente inferidos
desde la cadena de proposiciones.
Dado que cada condición que puede ser encontrada
puede ser descrita por una regla, los sistemas expertos basados
en reglas no pueden manejar eventos no
anticipados, pero pueden evolucionar con el uso, y permanece
limitado a un estrecho dominio de problemas.
Otra variante de sistemas expertos, uno que no posee
esta limitación, emplea una base de conocimiento que
consiste de descripciones estructuradas de situaciones, de
problemas del mundo real y de decisiones actualmente hechas por
expertos humanos.
En medicina, por
ejemplo, el registro de un paciente contiene descripciones de
datos personales, exámenes físicos y de laboratorio,
diagnóstico clínico, tratamiento propuesto, y los
resultados de tales tratamientos.
Dada una gran base de datos con tales registros en una
especialidad médica, el médico puede indagar acerca
de eventos análogos a los relacionados con el paciente.
Esto en contraste con el sistema que idealmente intenta
reemplazar al ser humano, ya que en casos como estos sólo
podría usarse este tipo de conocimiento como una
herramienta que ayuda en la toma de decisiones.
El software requerido para este tipo de sistemas se ha
ido complicando con el tiempo ya que su desarrollo demanda
tiempo, un buen equipo de programadores y un buen producto
final.
Se percibe este trabajo como una tarea para el
ingeniero y consiste de:
- Identificación y análisis de los
requerimientos del usuario. - Desarrollo de las especificaciones del sistema
(software y hardware). - Diseño del software.
- Implementación
- Testeo
- Mantención
Tareas típicas para sistemas expertos involucran
clasificación, diagnóstico, monitoreo,
diseño, inventario y planificación para esfuerzos
especializados.
II.2.1. Tecnologías
Involucradas.
Lenguajes de
Programación
En principio, cualquier lenguaje de programación
puede ser utilizado. Siendo así de amplio el espectro en
el cual se puede escoger un lenguaje para programar un sistema
experto. Atendiendo a la forma de estructurar sus instrucciones,
se los puede dividir en:
IMPERATIVOS: PASCAL,
C/C++.
FUNCIONALES: LISP.
DECLARATIVOS: PROLOG, CHIP, OPS5.
ORIENTADOS A OBJETOS: SmallTalk, Hypercard,
CLOS.
Tradicionalmente LISP y PROLOG han sido los
lenguajes que se han utilizado para la programación de
sistemas expertos.
Estos lenguajes ofrecen características
especialmente diseñadas para manejar problemas
generalmente encontrados en Inteligencia Artificial. Por este
motivo se los conoce como lenguajes de inteligencia
Artificial.
Una de las principales características que
comparten los lenguajes LISP y PROLOG, como consecuencia de su
respectiva estructura, es que pueden ser utilizados para escribir
programas capaces de examinar a otros programas, incluyendo a
ellos mismos. Esta capacidad se requiere, por ejemplo, para hacer
que el programa explique sus conclusiones.
Esto sólo puede hacerse si el programa tiene la
capacidad de examinar su propio modo de
operación.
Lisp
Su nombre se deriva de LISt Processor. LISP fue el
primer lenguaje para procesamiento simbólico. John
McCarthy lo desarrolló en 1958, en el Instituto de
Tecnología de Massachusetts (MIT), inicialmente como un
lenguaje de programación con el cual los investigadores
pudieran implementar eficientemente programas de computadora
capaces de razonar.
Rápidamente LISP se hizo popular por su capacidad
de manipular símbolos y fue escogido para el desarrollo de
muchos sistemas de Inteligencia Artificial.
Actualmente, LISP es utilizado en varios dominios que
incluyen la escritura de compiladores, sistemas para
diseño VLSI, sistemas para diseño mecánico
asistido por computadora (AUTOCAD),
animaciones gráficas y sistemas basados en
conocimiento.
Prolog
PROgramming in LOGic (PROLOG), es otro de los lenguajes
de programación ampliamente utilizados en IA. PROLOG fue
desarrollado en Francia, en 1973 por Alain Colmenauer y su equipo
de investigación en la Universidad de
Marseilles.
Inicialmente fue utilizado para el procesamiento de
lenguaje natural, pero posteriormente se popularizó entre
los desarrolladores de aplicaciones de IA por su capacidad de
manipulación simbólica. Utilizando los resultados
del grupo francés, Robert Kowalski de la Universidad de
Edimburgo, en Escocia, desarrolló la teoría de la
programación lógica. La sintaxis propuesta por
Edimburgo, se considera el estándar de facto del
PROLOG.
A partir de 1981 tuvo una importante difusión en
todo el mundo, especialmente porque los japoneses decidieron
utilizar PROLOG para el desarrollo de sus sistemas de
computación de quinta generación. Actualmente
existen varios dialectos del PROLOG para diferentes
plataformas.
OPS5
Official Production System 5 (OPS5), es un lenguaje para
ingeniería cognoscitiva que soporta el método de
representación del conocimiento en forma de
reglas.
Incorpora un módulo unificador, un
intérprete que incluye un mecanismo de encadenamiento
progresivo, y herramientas para edición y
depuración de los programas.
OPS5 es un miembro de la familia de
lenguajes de programación desarrollados en la Universidad
Carnegie – Mellon. Varias compañías han
desarrollado implementaciones comerciales de OPS5, para
diferentes plataformas.
Sistemas de Desarrollo
Históricamente, los primeros Sistemas Basados en
Conocimiento fueron desarrollados utilizando lenguajes de
programación como el LISP y el PROLOG. A medida que el
desarrollo de Sistemas Basados en Conocimiento iba aumentado en
cantidad y complejidad, la comunidad científica
comenzó a buscar formas de desarrollar los sistemas en
menor tiempo y con menor esfuerzo.
Esto dio lugar al aparecimiento, en primer lugar a
sistemas vacíos como el EMYCIN, a los que denominó
shells, ya que ofrecen toda la arquitectura de un Sistema Basado
en Conocimiento a la que hay que incorporar la base de
conocimientos.
Posteriormente ingresaron al mercado otras herramientas
que incorporaron, además de opciones de
representación del conocimiento, esquemas de inferencia y
control. Estas herramientas tomaron el nombre de Entornos de
Desarrollo de Sistemas Basados en Conocimiento.
A continuación se dan algunos ejemplos de
sistemas comerciales:
Página anterior | Volver al principio del trabajo | Página siguiente |