PROLOG es un lenguaje de programación lógico e interpretado usado
habitualmente en el campo de la Inteligencia artificial.
Prolog permite describir estructuras de
datos, sus relaciones y objetivos por ser un lenguaje declarativo; y
el proceso por el cual ejecuta las tareas no se establece de forma explícita en
el programa sino que se determina por el proceso de traducción del
lenguaje. Lenguaje Prolog tiene una estructura de programación orientada a dar
soluciones a problemas del área de aplicación de la
Inteligencia Artificial mediante estructuras de programación orientadas a
la resolución de problemas de una manera no-clásica.
Siendo la Informática una ciencia que
busca brindar soluciones al problema de procesamiento de información
para la toma de decisiones, en el momento temporal de la historia que nos toca
vivir, los Sistemas Inteligentes van ganando terreno día a día
en esta Sociedad de Información, cada vez más tecnificada y dependiente.
Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique, es un lenguaje
de programación lógico e interpretado usado
habitualmente en el campo de la Inteligencia artificial.
Lenguaje de programación lógico e
interpretado (Prolog). La programación
lógica es un paradigma de los lenguajes de programación en
el cual los programas se consideran como una serie de
aserciones lógicas. De esta forma, el conocimiento se representa mediante
reglas, tratándose de sistemas declarativos
Antecedentes
Se
trata de un lenguaje de programación ideado a principios de los años
70 en la Universidad de Aix-Marseille I (Marsella, Francia) por
los estudiantes Alain Colmerauer y Philippe Roussel. Nació de un
proyecto que no tenía como objetivo la traducción de un lenguaje de
programación, sino la clasificación algorítmica de lenguajes naturales. Alain
Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje
natural y Jean Trudel y Philippe Roussel en la parte de deducción e inferencia
del sistema. Interesado por el método de resolución SL, Trudel persuadió a
Robert Kowalski para que se uniera al proyecto, dando lugar a una versión
preliminar del lenguaje Prolog a finales de 1971 y apareciendo la versión
definitiva en 1972. Esta primera versión de Prolog fue
programada en ALGOL W.
Inicialmente se trataba de un lenguaje
totalmente interpretado hasta que, en 1983, David H.D. Warren desarrolló
un compilador capaz de traducir Prolog en un conjunto de instrucciones de
una máquina abstracta denominada Warren Abstract Machine, o
abreviadamente, WAM. Desde entonces Prolog es un lenguaje
semi-interpretado.
Si bien en un principio se trataba de un
lenguaje de uso reducido, la aparición de intérpretes del mismo para microordenadores de
8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits
(ej: Turbo Prolog de Borland, entre otros muchos) a lo
largo de la década de 1980 contribuyó notablemente a su popularización.4 Otro importante factor en su difusión fue la
adopción del mismo para el desarrollo del proyecto de la quinta generación
de computadoras a principios de la década de los 80,5en cuyo contexto se desarrolló la
implementación paralelizada del lenguaje llamada KL1 y del
que deriva parte del desarrollo moderno de Prolog.
Las
primeras versiones del lenguaje diferían, en sus diferentes implementaciones,
en muchos aspectos de sus sintaxis, empleándose mayormente como forma normalizada
el dialecto propuesto por la Universidad de Edimburgo,6 hasta que en 1995 se estableció un estándar ISO
(ISO/IEC 13211-1), llamado ISO-Prolog.
Prolog
se enmarca en el paradigma de los lenguajes lógicos y declarativos,
lo que lo diferencia enormemente de otros lenguajes más populares tales
como Fortran, Pascal, C o Java.
Si bien en un principio se trataba de un lenguaje
de uso reducido, la aparición de intérpretes del mismo para microordenadores de
8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits (ej: Turbo PROLOG
de Borland, entre otros muchos) a lo largo de la década de 1980 contribuyó
notablemente a su popularización.Otro importante factor en su difusión fue la adopción
del mismo para el desarrollo del proyecto de la quinta generación de
computadoras a principios de la década de los 1980, en cuyo contexto se
desarrolló la implementación paralelizada del lenguaje llamada KL1 y del que
deriva parte del desarrollo moderno de Prolog. Las primeras versiones del
lenguaje diferían, en sus diferentes implementaciones, en muchos aspectos de
sus sintaxis, empleándose mayormente como forma normalizada el dialecto
propuesto por la Universidad de Edimburgo , hasta que en 1995 se
estableció un estándar ISO (ISO/IEC 13211-1), llamado ISO-Prolog.
Entorno de desarrollo Prolog
Prolog es un lenguaje de programación
seminterpretado. Su funcionamiento es muy similar a Java. El código fuente se
compila a un código de byte el cuál se interpreta en una máquina virtual
denominada Warren Abstract Machine (comúnmente denominada WAM).
Por eso, un entorno de desarrollo Prolog se compone
de:
Un compilador: Transforma
el código fuente en código de byte. A diferencia de Java, no existe un Standard
al respecto. Por eso, el código de byte generado por un entorno de desarrollo
no tiene por que funcionar en el intérprete de otro entorno.
Un intérprete: Ejecuta
el código de byte. Un shell o top-level. Se trata
de una utilidad que permite probar los programas, depurarlos, etc. Su
funcionamiento es similar a los interfaces de línea de comando de los sistemas
operativos.
Una biblioteca de
utilidades: Estas bibliotecas son, en general, muy amplias. Muchos entornos
incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten
funcionalidades básicas como manipular cadenas, entrada/salida, etc.
Generalmente,
los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la
programación con restricciones, concurrente, orientada a objetos, etc. Sería
injusto no mencionar aquí el entorno de desarrollo más popular: SICStus Prolog,
si bien, se trata de un entorno de desarrollo comercial (no gratuito).
SICStus,
CIAO Prolog, y posiblemente otros más, ofrecen entornos integrados generalmente
basados en Emacs que resultan muy fáciles de usar. CIAO Prolog además ofrece un
auto documentador similar al existente para Java además de un preprocesador de
programas. Prácticamente todos ellos son multiplataforma.
Aplicaciones Actuales Del Lenguaje PROLOG
Prolog se puede utilizar para resolver,
básicamente, cualquier tipo de problema.
Principalmente es útil en la gestión de Juegos, en
Inteligencia Artificial y Sistemas Expertos, como lenguaje especialmente
pensado para construir bases de conocimientos basados en la lógica que forman
parte importante de cualquier agente inteligente, en la construcción de
Compiladores e Intérpretes, en el Reconocimiento del Lenguaje Natural, etc.
Ventajas y desventajas de la Programación Lógica
Ventajas
La
habilidad de PROLOG para calcular de forma procedural es una de las ventajas
específicas que tiene el lenguaje. Como consecuencia esto anima al programador
a considerar el significado declarativo de los programas de forma relativamente
independiente de su significado procedural. Es decir, las ventajas de la forma
declarativa de este lenguaje son claras (es más fácil pensar las soluciones y
muchos detalles procedurales son resueltos automáticamente por el propio
lenguaje) y podemos aprovecharlas.
Una ventaja
desde el punto de vista del usuario es la facilidad para programar ya que se
pueden escribir programas rápidamente, con pocos errores originando programas
claramente legibles, aun si no se conoce muy bien el lenguaje.
No hay
que pensar demasiado en la solución del problema, ya que Prolog infiere sus
respuestas basándose en las reglas declaradas dentro del programa. 4.
Modularidad: cada predicado (procedimiento) puede ser ejecutado, validado y
examinado independiente e individualmente. Prolog no tiene variables globales,
ni asignación. Cada relación está auto contenida, lo que permite una mayor
modularidad, portabilidad y reusabilidad de relaciones entre programas. 5.
Polimorfismo: se trata de un lenguaje de programación sin tipos, lo que un alto
nivel de abstracción e independencia de los datos (objetos).
En
Prolog, se puede representar incluso los mismos programas Prolog como
estructuras.
Prolog
utiliza un mecanismo de búsqueda independiente de la base de hechos. Aunque
pueda parecer algo retorcido, es una buena estrategia puesto que garantiza el
proceso de todas las posibilidades. Es útil para el programador conocer
dicho mecanismo a la hora de depurar y optimizar los programas. 8. Manejo
dinámico y automático de memoria.
En prolog se utiliza notación prefija e infija
mientras que en Lisp solo utiliza notación prefija.
Desventajas
La resolución automática no siempre es eficiente,
por lo que eventualmente se podría dar una respuesta incorrecta a una consulta.
2. Poco eficientes. 3. Poco utilizado en aplicaciones reales.
Prolog algunas veces es incapaz de reconocer que un
problema es (para su propio conocimiento) inaplicable o insuficiente. Si el
programa no contiene suficiente información para contestar una consulta, es
incapaz de reconocerlo y responde no. En esta situación sería más eficiente
conocer que la respuesta no es negativa, sino que no es posible inferir un
resultado.
(ES, siglas del término Expert System) es un sistema de información
basado en el conocimiento que usa su conocimiento de un área de aplicación
compleja y específica a fin de actuar como un consultor experto para los
usuarios finales. Los sistemas expertos proporcionan respuestas sobre un área
problemática muy específica al hacer inferencias semejantes a las humanas sobre
los conocimientos obtenidos en una base de conocimientos especializados.
Los sistemas expertos forman parte de la ciencia de la computación y
dentro de ésta se
ubican en la rama de la inteligencia artificial.
¿Qué es un sistema experto?
Es
una rama de la Inteligencia
artificial; son sistemas informáticos que simulan
el proceso de aprendizaje, de memorización, de razonamiento, de
comunicación y de acción en consecuencia de un experto humano en cualquier rama
de la ciencia.
Los sistemas expertos se pueden considerar como
el primer producto verdaderamente operacional de la inteligencia artificial.
Son programas de ordenador diseñados para actuar como un especialista humano en
un dominio particular o área de conocimiento. En este sentido, pueden
considerarse como intermediarios entre el experto humano, que transmite su
conocimiento al sistema, y el usuario que lo utiliza para resolver un problema
con la eficacia del especialista. El sistema experto utilizará para ello el
conocimiento que tenga almacenado y algunos métodos de inferencia.
Características
Para que un sistema actúe como un
verdadero experto, es deseable que reúna, en lo posible, lo más importante de
las características de un experto humano, esto es:
Habilidad para adquirir conocimiento.
Fiabilidad, para poder confiar en sus
resultados o apreciaciones.
Solidez en el dominio de su
conocimiento.
Capacidad para resolver problemas.
Estas características le permiten almacenar datos y conocimiento, sacar
conclusiones lógicas, tomar decisiones, aprender de la experiencia y los datos
existentes, comunicarse con expertos humanos, explicar el porqué de las
decisiones tomadas y realizar acciones como consecuencia de todo lo anterior.
Técnicamente un sistema experto,
contiene una base de conocimientos que incluye la experiencia acumulada de expertos
humanos y un conjunto de reglas para aplicar ésta base de conocimientos en una
situación particular que se le indica al programa. Cada vez el sistema se
mejora con adiciones a la base de conocimientos o al conjunto de reglas.
Componentes de un sistema experto
Separan conocimientos (reglas y
hechos) y el procesamiento; se le añade un interface de usuario y un componente
explicativo; los siguientes componentes pueden estar estructurados de formas
muy variadas.
Base de conocimientos: Contiene el
conocimiento de los hechos y las experiencias de los expertos en un dominio
determinado
Mecanismo de inferencia: Puede
simular la estrategia de solución de un experto
Componente explicativo: Explica al
usuario la estrategia de solución encontrada y el porqué de las decisiones
tomadas
Interface de usuario: Sirve para que
este pueda realizar una consulta en un lenguaje lo más natural posible
Componente de adquisición: Ofrece
ayuda a la estructuración e implementación del conocimiento en la base de conocimientos
Tipos de sistemas expertos
Existen tres tipos de sistemas
expertos:
Basados en reglas: Aplicando reglas
heurísticas apoyadas generalmente en lógica difusa para su evaluación y
aplicación.
Basados en casos CBR (Case Based
Reasoning): Aplicando el razonamiento basado en casos, donde la solución a un
problema similar planteado con anterioridad se adapta al nuevo problema.
Basados en redes: Aplicando redes
bayesianas, basadas en estadística y el teorema de Bayes.
Ventajas
Producción
y productividad mayores. Pueden trabajar más rápido que lo humanos. Están
disponibles ininterrumpidamente de día y noche, ofreciendo siempre su máximo
desempeño. Pueden duplicarse ilimitadamente, i.e. tener tantos de ellos como se
requieran.
Mayor
calidad: Dan la probabilidad de aumentar la calidad proporcionando asesoría
consistente y reduciendo las tasas de error.
Operación
en entornos peligrosos. Muchas tareas requieren que los seres humanos operen en
entornos hostiles y peligrosos.
Captación
de experiencia escasa y su dimensión. Uno de los principales beneficios de los
sistemas expertos es su facilidad de trasmitir experiencia a través de
fronteras internacionales.
Siempre
se ajustan a las normas establecidas y son consistentes en su desempeño, i.e.
no desarrollan apreciaciones subjetivas, tendenciosas, irracionales o
emocionales.
Confiabilidad.
Los sistemas expertos son confiables. No padece de olvido, fatiga, dolor o
comete errores de cálculo.
No
requiere un sueldo, promociones, seguros médicos, incapacidades.
Accesibilidad
al conocimiento y escritorios de vida. Hacen accesible el conocimiento (y la
información) a mucha gente en diversos lugares. Siempre están dispuestos a dar
explicaciones, asistir o enseñar a la gente, así como a aprender.
Pueden
tener una vida de servicio ilimitada. Funciones incrementadas de otros sistemas
expertos. La integración de un sistema experto con otros sistemas expertos
hacen que estos últimos se vuelvan más eficientes, los sistemas integrados
abarcan más aplicaciones, trabajan más rápido y producen resultados de mayor
calidad.
Capacidad
para trabajar con información incompleta o inconcreta. En contraste con los
sistemas de cómputo convencionales, un sistema experto puede trabajar con
información incompleta al igual que los expertos humanos.
Impartición
de capacitación. Es factible que un sistema experto facilite la capacitación.
El personal nuevo que trabaja con un sistema experto se vuelve más
experimentado. La fusión de explicación puede servir como un dispositivo de enseñanza
y de ese modo puede efectuar apuntes que tal vez se inserten en la base de
conocimiento.
Mejoramiento
de las funciones para resolver problemas. Un sistema experto mejora la solución
de problemas permitiendo la integración de juicios de expertos de primera línea
en el análisis. De este modo, un sistema experto tiene la posibilidades
resolver problemas cuyo enlace y conocimiento supera a los de cualquier
individuo.
Reducción
del tiempo para la toma de decisiones. Con el empleo de la recomendación del
sistema, un ser humano puede tomar decisiones mucho más rápido.
Reducción
del tiempo fuera de servicio. Muchos sistemas expertos operacionales se emplean
para diagnosticar malos funcionamientos y prescribir reparaciones.
DESVENTAJAS
Tienen
una noción muy limitada acerca del contexto de problema, i.e. no pueden
percibir todas las cosas que un experto humano puede apreciar de un situación.
Pueden
existir decisiones que sólo son de competencia para un ser humano y no una
máquina.
No
saben cómo subsanar sus limitaciones, e.g. no son capaces de trabajar en equipo
o investigar algo nuevo.
Son
muy costosos de desarrollar y mantener.
Tareas
que realiza un Sistema Experto Monitorización.
La monitorización es
un caso particular de la interpretación, y consiste en la comparación continua
de los valores de las señales o datos de entrada y unos valores que actúan como
criterios de normalidad o estándares. Se trata de que el programa pueda determinar
en cada momento el estado de funcionamiento de sistemas complejos,
anticipándose a los posibles incidentes que pudieran acontecer
Un
sistema es un conjunto de partes o elementos organizados y
relacionados que interactúan entre sí para lograr un objetivo. Los sistemas
reciben datos, energía o materia del ambiente (entrada) y proveen información,
energía o materia (salida).
Cada sistema puede ser estudiado con el objetivo
de comprender el funcionamiento del mismo, descubrir sus límites/fronteras
visibles y/o no visibles, entender el objetivo del mismo y cómo interactúa con
otros sistemas externos.
Características de los sistemas
Según su naturaleza o constitución: Un sistema puede ser físico o concreto (una
computadora, un televisor, un humano) o puede ser puede ser abstracto o conceptual (un
software, una ciudad, una institución).
Cada sistema existe
dentro de otro más grande, por lo tanto un sistema puede estar formado por subsistema y elementos, y a la vez puede
ser parte de un supersistema (suprasistema).
¿Qué es un sistema informático?
Un sistema informático es un sistema
de información que está informatizado. No todos los sistemas de información son
sistemas informáticos, pero todos los sistemas informáticos son sistemas de
información. Por lo tanto se puede decir que un sistema informático es un
subconjunto de un sistema de información.
Sistemas en informática
En informática existen gran cantidad de sistemas:
Sistema operativo.
Sistema experto
Sistema informático
Aplicación o software
Arquitectura de sistemas
Un
sistema informático es el conjunto constituido por los elementos físicos y
lógicos (software) necesarios para captar información, almacenarla y procesarla,
realizar operaciones con ella.
En un sistema
informático, la información es introducida a través de los periféricos de entrada,
luego es procesada y mostrada por los periféricos de salida.