martes, 4 de diciembre de 2012

Red neuronal artificial

Las redes de neuronas artificiales (denominadas habitualmente como RNA o en inglés como: "ANN"[1] ) son un paradigma de aprendizaje y procesamiento automático inspirado en la forma en que funciona el sistema nervioso de los animales. Se trata de un sistema de interconexión de neuronas en una red que colabora para producir un estímulo de salida. En inteligencia artificial es frecuente referirse a ellas como redes de neuronas o redes neuronales.

Índice

 [ocultar

 Historia

Los primeros modelos de redes neuronales datan de 1943 por los neurólogos McCulloch y Pitts. Años más tarde, en 1949, Donald Hebb desarrolló sus ideas sobre el aprendizaje neuronal, quedando reflejado en la "regla de Hebb". En 1958, Rosemblatt desarrolló el perceptrón simple, y en 1960, Widrow y Hoff desarrollaron el ADALINE, que fue la primera aplicación industrial real.
En los años siguientes, se redujo la investigación, debido a la falta de modelos de aprendizaje y el estudio de Minsky y Papert sobre las limitaciones del perceptrón. Sin embargo, en los años 80, volvieron a resurgir las RNA gracias al desarrollo de la red de Hopfield, y en especial, al algoritmo de aprendizaje de retropropagación ideado por Rumelhart y McLellan en 1986 que fue aplicado en el desarrollo de los perceptrones multicapa. [2]

 Propiedades

Perceptrón con 2 entradas.
Una red neuronal se compone de unidades llamadas neuronas. Cada neurona recibe una serie de entradas a través de interconexiones y emite una salida. Esta salida viene dada por tres funciones:
  1. Una función de propagación (también conocida como función de excitación), que por lo general consiste en el sumatorio de cada entrada multiplicada por el peso de su interconexión (valor neto). Si el peso es positivo, la conexión se denomina excitatoria; si es negativo, se denomina inhibitoria.
  2. Una función de activación, que modifica a la anterior. Puede no existir, siendo en este caso la salida la misma función de propagación.
  3. Una función de transferencia, que se aplica al valor devuelto por la función de activación. Se utiliza para acotar la salida de la neurona y generalmente viene dada por la interpretación que queramos darle a dichas salidas. Algunas de las más utilizadas son la función sigmoidea (para obtener valores en el intervalo [0,1]) y la tangente hiperbólica (para obtener valores en el intervalo [-1,1]).

Diseño y programación de una RNA (red neuronal artificial)

Con un paradigma convencional de programación en ingeniería del software, el objetivo del programador es modelar matemáticamente (con distintos grados de formalismo) el problema en cuestión y posteriormente formular una solución (programa) mediante un algoritmo codificado que tenga una serie de propiedades que permitan resolver dicho problema. En contraposición, la aproximación basada en las RNA parte de un conjunto de datos de entrada suficientemente significativo y el objetivo es conseguir que la red aprenda automáticamente las propiedades deseadas. En este sentido, el diseño de la red tiene menos que ver con cuestiones como los flujos de datos y la detección de condiciones, y más que ver con cuestiones tales como la selección del modelo de red, la de las variables a incorporar y el preprocesamiento de la información que formará el conjunto de entrenamiento. Asimismo, el proceso por el que los parámetros de la red se adecuan a la resolución de cada problema no se denomina genéricamente programación sino que se suele denominar entrenamiento neuronal.
Por ejemplo en una red que se va a aplicar al diagnóstico de imágenes médicas; durante la fase de entrenamiento el sistema recibe imágenes de tejidos que se sabe son cancerígenos y tejidos que se sabe son sanos, así como las respectivas clasificaciones de dichas imágenes. Si el entrenamiento es el adecuado, una vez concluido, el sistema podrá recibir imágenes de tejidos no clasificados y obtener su clasificación sano/no sano con un buen grado de seguridad. Las variables de entrada pueden ser desde los puntos individuales de cada imagen hasta un vector de características de las mismas que se puedan incorporar al sistema (por ejemplo, procedencia anatómica del tejido de la imagen o la edad del paciente al que se le extrajo la muestra).

 Estructura

La mayoría de los científicos coinciden en que una RNA es muy diferente en términos de estructura de un cerebro animal. Al igual que el cerebro, una RNA se compone de un conjunto masivamente paralelo de unidades de proceso muy simples y es en las conexiones entre estas unidades donde reside la inteligencia de la red. Sin embargo, en términos de escala, un cerebro es muchísimo mayor que cualquier RNA creada hasta la actualidad, y las neuronas artificiales también son más simples que su contrapartida animal.
Biológicamente, un cerebro aprende mediante la reorganización de las conexiones sinápticas entre las neuronas que lo componen. De la misma manera, las RNA tienen un gran número de procesadores virtuales interconectados que de forma simplificada simulan la funcionalidad de las neuronas biológicas. En esta simulación, la reorganización de las conexiones sinápticas biológicas se modela mediante un mecanismo de pesos, que son ajustados durante la fase de aprendizaje. En una RNA entrenada, el conjunto de los pesos determina el conocimiento de esa RNA y tiene la propiedad de resolver el problema para el que la RNA ha sido entrenada.
Por otra parte, en una RNA, además de los pesos y las conexiones, cada neurona tiene asociada una función matemática denominada función de transferencia. Dicha función genera la señal de salida de la neurona a partir de las señales de entrada. La entrada de la función es la suma de todas las señales de entrada por el peso asociado a la conexión de entrada de la señal. Algunos ejemplos de entradas son la función escalón de Heaviside, la lineal o mixta, la sigmoide y la función gaussiana, recordando que la función de transferencia es la relación entre la señal de salida y la entrada.

 Ventajas

Las redes neuronales artificiales (RNA) tienen muchas ventajas debido a que están basadas en la estructura del sistema nervioso, principalmente el cerebro.
  • Aprendizaje: Las RNA tienen la habilidad de aprender mediante una etapa que se llama etapa de aprendizaje. Esta consiste en proporcionar a la RNA datos como entrada a su vez que se le indica cuál es la salida (respuesta) esperada.
  • Auto organización: Una RNA crea su propia representación de la información en su interior, descargando al usuario de esto.
  • Tolerancia a fallos: Debido a que una RNA almacena la información de forma redundante, ésta puede seguir respondiendo de manera aceptable aun si se daña parcialmente.
  • Flexibilidad: Una RNA puede manejar cambios no importantes en la información de entrada, como señales con ruido u otros cambios en la entrada (por ejemplo si la información de entrada es la imagen de un objeto, la respuesta correspondiente no sufre cambios si la imagen cambia un poco su brillo o el objeto cambia ligeramente).
  • Tiempo real: La estructura de una RNA es paralela, por lo cual si esto es implementado con computadoras o en dispositivos electrónicos especiales, se pueden obtener respuestas en tiempo real.

 Tipología de las RNA

 Modelos

Existe una serie de modelos que aparecen en la mayoría de estudios académicos y la bibliografía especializada.

 Topología

Una primera clasificación de las redes de neuronas artificiales que se suele hacer es en función del patrón de conexiones que presenta. Así se definen tres tipos básicos de redes:
  • Dos tipos de redes de propagación hacia delante o acíclicas en las que todas las señales van desde la capa de entrada hacia la salida sin existir ciclos, ni conexiones entre neuronas de la misma capa de red neuronal y su clasificación.
  • Las redes recurrentes que presentan al menos un ciclo cerrado de activación neuronal. Ejemplos: Elman, Hopfield, máquina de Boltzmann.

 Aprendizaje

Una segunda clasificación que se suele hacer es en función del tipo de aprendizaje de que es capaz (si necesita o no un conjunto de entrenamiento supervisado). Para cada tipo de aprendizaje encontramos varios modelos propuestos por diferentes autores:

 Tipo de entrada

Finalmente también se pueden clasificar las RNAs según sean capaces de procesar información de distinto tipo en:
  • Redes analógicas: procesan datos de entrada con valores continuos y, habitualmente, acotados. Ejemplos de este tipo de redes son: Hopfield, Kohonen y las redes de aprendizaje competitivo.
  • Redes discretas: procesan datos de entrada de naturaleza discreta; habitualmente valores lógicos booleanos. Ejemplos de este segundo tipo de redes son: las máquinas de Boltzmann y Cauchy, y la red discreta de Hopfield.

Aplicaciones

Las características de las RNA las hacen bastante apropiadas para aplicaciones en las que no se dispone a priori de un modelo identificable que pueda ser programado, pero se dispone de un conjunto básico de ejemplos de entrada (previamente clasificados o no). Asimismo, son altamente robustas tanto al ruido como a la disfunción de elementos concretos y son fácilmente paralelizables.
Esto incluye problemas de clasificación y reconocimiento de patrones de voz, imágenes, señales, etc. Asimismo se han utilizado para encontrar patrones de fraude económico, hacer predicciones en el mercado financiero, hacer predicciones de tiempo atmosférico, etc.
También se pueden utilizar cuando no existen modelos matemáticos precisos o algoritmos con complejidad razonable, por ejemplo la red de Kohonen ha sido aplicada con un éxito más que razonable al clásico problema del viajante (un problema para el que no se conoce solución algorítmica de complejidad polinómica).
Otro tipo especial de redes neuronales artificiales se ha aplicado en conjunción con los algoritmos genéticos (AG) para crear controladores para robots. La disciplina que trata la evolución de redes neuronales mediante algoritmos genéticos se denomina Robótica Evolutiva. En este tipo de aplicación el genoma del AG lo constituyen los parámetros de la red (topología, algoritmo de aprendizaje, funciones de activación, etc.) y la adecuación de la red viene dada por la adecuación del comportamiento exhibido por el robot controlado (normalmente una simulación de dicho comportamiento).

Ejemplos

 Quake II Neuralbot

Un bot es un programa que simula a un jugador humano. El Neuralbot es un bot para el juego Quake II que utiliza una red neuronal artificial para decidir su comportamiento y un algoritmo genético para el aprendizaje. Es muy fácil probarlo para ver su evolución. Más información aquí [1]

 Clasificador No Sesgado de Proteínas

Es un programa que combina diversas técnicas computacionales con el objetivo de clasificar familias de proteínas. Un posible método consiste en utilizar métricas adaptativas como por ejemplo: mapas autoorganizados y algoritmos genéticos.
El problema de clasificación no sesgada basada en la expresión de las proteínas en Aminoácidos puede reducirse, conceptualmente, a lo siguiente:
  • La identificación de grupos de proteínas que compartan características comunes.
  • La determinación de las razones estructurales por las cuales las proteínas en cuestión se agrupan de la manera indicada.
  • Evitar la idea de establecer criterios de clasificación (“sesgados”) fundamentados en ideas preconcebidas para lograr su clasificación. En este sentido, hay dos asuntos que considerar:
    • Cómo lograr la caracterización de las proteínas de manera no sesgada
    • Cómo lograr lo anterior sin apelar a medidas de agrupamiento que, a su vez, impliquen algún tipo de sesgo sobre dicho agrupamiento.
Las RNA han sido aplicadas a un número en aumento de problemas en la vida real y de considerable complejidad, donde su mayor ventaja es en la solución de problemas que son bastante complejos para la tecnología actual, tratándose de problemas que no tienen una solución algorítmica o cuya solución algorítmica es demasiado compleja para ser encontrada.
En general, debido a que son parecidas al las del cerebro humano, las RNA son bien nombradas ya que son buenas para resolver problemas que el humano puede resolver pero las computadoras no. Estos problemas incluyen el reconocimiento de patrones y la predicción del tiempo. De cualquier forma, el humano tiene capacidad para el reconocimiento de patrones, pero la capacidad de las redes neuronales no se ve afectada por la fatiga, condiciones de trabajo, estado emocional, y compensaciones.
Se conocen cinco aplicaciones tecnológicas extendidas:
  1. Reconocimiento de textos manuscritos
  2. Reconocimiento del habla
  3. Simulación de centrales de producción de energía
  4. Detección de explosivos
  5. Identificación de blancos de radares
referencias.
http://es.wikipedia.org/wiki/Red_neuronal_artificial.

 

viernes, 16 de noviembre de 2012

IMAGENES DE ROBOTS

SISTEMAS EXPERTOS


1. Abstract

3. Historia de los (SE)

4. Definiciones de los (SE)

5. Aplicaciones

6. Ventajas y limitaciones

7. Arquitectura básica de los sistemas expertos
8. Conclusiones

9. Referencias bibliográficas


 ABSTRACT



El propósito de este articulo es de mostrarnos una amplia y precisa descripción de lo que son los Sistemas Expertos (SE), los cuales también son conocidos como Sistemas Basados en Conocimiento. Así mismo mostramos brevemente los orígenes, conceptos, aplicaciones, ventajas, limitaciones, y su arquitectura básica de esta área y/o campo de la Inteligencia artificial. Por otra parte en la actualidad el mercado se vuelve más competitivo, donde la administración y buen manejo de la información es fundamental para todas las empresas y/o organizaciones, las cuales si quieren sobrevivir deben de mantenerse a la vanguardia en todas y cada una de las áreas.



INTRODUCCIÓN



Se considera a alguien un experto en un problema cuando este individuo tiene conocimiento especializado sobre dicho problema. En el área de los (SE) a este tipo de conocimiento se le llama conocimiento sobre el dominio. La palabra dominio se usa para enfatizar que el conocimiento pertenece a un problema específico. [1]



Antes de la aparición del ordenador, el hombre ya se preguntaba si se le arrebataría el privilegio de razonar y pensar. En la actualidad existe un campo dentro de la inteligencia artificial al que se le atribuye esa facultad: el de los sistemas expertos (SE). Estos sistemas también son conocidos como Sistemas Basados en Conocimiento, los cuales permiten la creación de máquinas que razonan como el hombre, restringiéndose a un espacio de conocimientos limitado. En teoría pueden razonar siguiendo los pasos que seguiría un experto humano (médico, analista, empresario, etc.) para resolver un problema concreto. Este tipo de modelos de conocimiento por ordenador ofrece un extenso campo de posibilidades en resolución de problemas y en aprendizaje. Su uso se extenderá ampliamente en el futuro, debido a su importante impacto sobre los negocios y la industria. [2]



HISTORIA DE LOS (SE)



Sus inicios datan a mediados de los años sesenta. Durante esta década los investigadores Alan Newell y Herbert Simon desarrollaron un programa llamado GPS (General Problem Solver; solucionador general de problemas). Podía trabajar con criptoaritmética, con las torres de Hanoi y con otros problemas similares. Lo que no podía hacer el GPS era resolver problemas del mundo real, tales como un diagnóstico médico.



Algunos investigadores decidieron entonces cambiar por completo el enfoque del problema restringiendo su ambición a un dominio específico e intentando simular el razonamiento de un experto humano. En vez de dedicarse a computarizar la inteligencia general, se centraron en dominios de conocimiento muy concretos. De esta manera nacieron los SE.



A partir de 1965, un equipo dirigido por Edward Feigenbaum, comenzó a desarrollar SE utilizando bases de conocimiento definidas minuciosamente. Dos años más tarde se construye DENDRAL, el cual es considerado como el primer SE. La ficción de dicho SE era identificar estructuras químicas moleculares a partir de su análisis espectrográfico.



En la década de los setenta se desarrolló MYCIN para consulta y diagnóstico de infecciones de la sangre. Este sistema introdujo nuevas características: utilización de conocimiento impreciso para razonar y posibilidad de explicar el proceso de razonamiento. Lo más importante es que funcionaba de manera correcta, dando conclusiones análogas a las que un ser humano daría tras largos años de experiencia. En MYCIN aparecen claramente diferenciados motor de inferencia y base de conocimientos. Al separar esas dos partes, se puede considerar el motor de inferencias aisladamente. Esto da como resultado un sistema vacío o shell (concha). Así surgió EMYCIN (MYCIN Esencial) con el que se construyó SACON, utilizado para estructuras de ingeniería, PUFF para estudiar la función pulmonar y GUIDON para elegir tratamientos terapéuticos.



En esa época se desarrollaron también: HERSAY, que intentaba identificar la palabra hablada, y PROSPECTOR, utilizado para hallar yacimientos de minerales. De este último derivó el shell KAS (Knowledge Adquisition System).



En la década de los ochenta se ponen de moda los SE, numerosas empresas de alta tecnología investigan en este área de la inteligencia artificial, desarrollando SE para su comercialización. Se llega a la conclusión de que el éxito de un SE depende casi exclusivamente de la calidad de su base de conocimiento. El inconveniente es que codificar la pericia de un experto humano puede resultar difícil, largo y laborioso.



Un ejemplo de SE moderno es CASHVALUE, que evalúa proyectos de inversión y VATIA, que asesora acerca del impuesto sobre el valor añadido o IVA. [3]



DEFINICIONES DE LOS (SE)



Es un software que imita el comportamiento de un experto humano en la solución de un problema. Pueden almacenar conocimientos de expertos para un campo determinado y solucionar un problema mediante deducción lógica de conclusiones. [4]



Son SE aquellos programas que se realizan haciendo explicito el conocimiento en ellos, que tienen información específica de un dominio concreto y que realizan una tarea relativa a este dominio. [5]



Programas que manipulan conocimiento codificado para resolver problemas en un dominio especializado en un dominio que generalmente requiere de experiencia humana.



Programas que contienen tanto conocimiento declarativo (hechos a cerca de objetos, eventos y/o situaciones) como conocimiento de control (información a cerca de los cursos de una acción), para emular el proceso de razonamiento de los expertos humanos en un dominio en particular y/o área de experiencia. [6]



Software que incorpora conocimiento de experto sobre un dominio de aplicación dado, de manera que es capaz de resolver problemas de relativa dificultad y apoyar la toma de decisiones inteligentes en base a un proceso de razonamiento simbólico. [1]



APLICACIONES
Sus principales aplicaciones se dan en las gestiones empresariales debido a que;
a) Casi todas las empresas disponen de un ordenador que realiza las funciones básicas de tratamiento de la información: contabilidad general, decisiones financieras, gestión de la tesorería, planificación, etc.



b) Este trabajo implica manejar grandes volúmenes de información y realizar operaciones numéricas para después tomar decisiones. Esto crea un terreno ideal para la implantación de los SE.



Además los SE también se aplican en la contabilidad en apartados como: Auditoria(es el campo en el que más aplicaciones de SE se esta realizando) Fiscalidad, planificación, análisis financiero y la contabilidad financiera.



ÁREAS DE APLICACIÓN



Los SE se aplican a una gran diversidad de campos y/o áreas. A continuación se listan algunas de las principales:





Militar

Informática

Telecomunicaciones


Química

Derecho

Aeronáutica


Geología

Arqueología

Agricultura


Electrónica

Transporte

Educación


Medicina

Industria

Finanzas y Gestión




VENTAJAS
Estos programas proporcionan la capacidad de trabajar con grandes cantidades de información, que son uno de los grandes problemas que enfrenta el analista humano que puede afectar negativamente a la toma de decisiones pues el analista humano puede depurar datos que no considere relevantes, mientras un SE debido a su gran velocidad de proceso analiza toda la información incluyendo las no útiles para de esta manera aportar una decisión más sólida.



LIMITACIONES
Es evidente que para actualizar se necesita de reprogramación de estos (tal vez este sea una de sus limitaciones más acentuadas) otra de sus limitaciones puede ser el elevado costo en dinero y tiempo, además que estos programas son poco flexibles a cambios y de difícil acceso a información no estructurada. [7]



Debido a la escasez de expertos humanos en determinadas áreas, los SE pueden almacenar su conocimiento para cuando sea necesario poder aplicarlo. Así mismo los SE pueden ser utilizados por personas no especializadas para resolver problemas. Además si una persona utiliza con frecuencia un SE aprenderá de el.



Por otra parte la inteligencia artificial no ha podido desarrollar sistemas que sean capaces de resolver problemas de manera general, de aplicar el sentido común para resolver situaciones complejas ni de controlar situaciones ambiguas.



El futuro de los SE da vueltas por la cabeza de cada persona, siempre que el campo elegido tenga la necesidad y/o presencia de un experto para la obtención de cualquier tipo de beneficio. [8]



ARQUITECTURA BÁSICA DE LOS SISTEMAS EXPERTOS



Base de conocimientos. Es la parte del sistema experto que contiene el conocimiento sobre el dominio. hay que obtener el conocimiento del experto y codificarlo en la base de conocimientos. Una forma clásica de representar el conocimiento en un sistema experto son lar reglas. Una regla es una estructura condicional que relaciona lógicamente la información contenida en la parte del antecedente con otra información contenida en la parte del consecuente.



Base de hechos (Memoria de trabajo). Contiene los hechos sobre un problema que se han descubierto durante una consulta. Durante una consulta con el sistema experto, el usuario introduce la información del problema actual en la base de hechos. El sistema empareja esta información con el conocimiento disponible en la base de conocimientos para deducir nuevos hechos.



Motor de inferencia. El sistema experto modela el proceso de razonamiento humano con un módulo conocido como el motor de inferencia. Dicho motor de inferencia trabaja con la información contenida en la base de conocimientos y la base de hechos para deducir nuevos hechos. Contrasta los hechos particulares de la base de hechos con el conocimiento contenido en la base de conocimientos para obtener conclusiones acerca del problema.



Subsistema de explicación. Una característica de los sistemas expertos es su habilidad para explicar su razonamiento. Usando el módulo del subsistema de explicación, un sistema experto puede proporcionar una explicación al usuario de por qué está haciendo una pregunta y cómo ha llegado a una conclusión. Este módulo proporciona beneficios tanto al diseñador del sistema como al usuario. El diseñador puede usarlo para detectar errores y el usuario se beneficia de la transparencia del sistema.



Interfaz de usuario. La interacción entre un sistema experto y un usuario se realiza en lenguaje natural. También es altamente interactiva y sigue el patrón de la conversación entre seres humanos. Para conducir este proceso de manera aceptable para el usuario es especialmente importante el diseño del interfaz de usuario. Un requerimiento básico del interfaz es la habilidad de hacer preguntas. Para obtener información fiable del usuario hay que poner especial cuidado en el diseño de las cuestiones. Esto puede requerir diseñar el interfaz usando menús o gráficos. [1]



CONCLUSIONES



Actualmente el duro, difícil y cambiante mercado competitivo se vuelve más complejo por la gran diversidad de información que se ven obligados a almacenar y analizar, razón por la cual las empresas se ven en la necesidad de recurrir a poderosas y/o robustas herramientas o sistemas que les sirvan de soporte a la hora de tomar decisiones. De esta forma estos inteligentes, precisos y eficientes sistemas son adoptados por más organizaciones, en las cuales se convierten y/o transforman en una importante estrategia de negocio.



Por otra parte es importante mencionar que estos seguirán siendo usados en los todos y cada una de las áreas y/o campos donde los expertos humanos sean escasos. Por consecuencia de lo anterior estos sistemas son utilizados por personas no especializadas, por lo cual el uso frecuente de los (SE) les produce y/o genera conocimiento a los usuarios.



REFERENCIAS BIBLIOGRAFICAS



[1] Viejo Hernando Diego (2003). Sistemas expertos. Consultado en 06, 04, 2004 en http://www.divulga-ia.com/cursos/cursos.xml?numero=2&nombre=2003-9-26a&numLecc=1.



[2] Samper Márquez Juan José (2004). Introducción a los sistemas expertos. Consultado en 06, 03, 2004 en http://www.redcientifica.com/doc/doc199908210001.html.



[3] Samper Juan (2003). Sistemas expertos. El conocimiento al poder. Consultado en 06, 03, 2004 en http://www.psycologia.com/articulos/ar-jsamper01.htm.



[4] Criado Briz José Mario (2002). Introducción a los sistemas expertos. Consultado en 06, 05, 2004 en http://ingenieroseninformatica.org/recursos/tutoriales/sist_exp/cap1.php.



[5] Wikipedia (2004). Sistema experto. Consultado en 06, 03, 2004 en http://es.wikipedia.org/wiki/Sistema_experto.



[6] Castro Marcel (2002). Sistemas expertos. Consultado en 06, 04, 2004 en http://strix.ciens.ucv.ve/~iartific/Material/PP_Sistemas_Expertos.pdf.



[7] Félix Justo (2004). Aplicaciones, ventajas y limitaciones de los sistemas expertos. Consultado en 06, 04, 2004 en http://efelix.iespana.es/efelix/expertaplicaciones.htm.



[8] Montes Cerra Maria Clara (2003). Sistemas expertos. Consultado en 06, 05, 2004 en http://dis.eafit.edu.co/labs/labgic/ARTICULOS_%20PUBLICAR/Sistemas%20expertos.doc.







Investigación realizada por: ALMANZA




CLASES DE INTELIGENCIA ARTIFICIAL


EN LA UNSXX PASAMOS LAS CLASES DE INTELIGENCIA ARTIFICIAL AVANZADO CONOCEMOS LOS LENGUAJES DE PROGRAMACIÓN ACTUALES, PARA PROGRAMAR EN LOS ROBOT.
 
VISITA A:
 
 
 

CLASES DE INTELIGENCIA ARTIFICIAL

martes, 25 de septiembre de 2012

LENGUAJE PROLOG

UN NUEVO LENGUAJE DE PROGRAMACION EN INTELIGENCIA ARTIFICIAL

El Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique,[1] es un lenguaje de programación lógico e interpretado, bastante conocido en el medio de investigación en Inteligencia Artificial.


Contenido

 [ocultar

[editar] Historia

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 profesores Alain Colmerauer y Philippe Roussel. Nació de un proyecto que no tenía como objetivo la implementación de un lenguaje de programación, sino el procesamiento 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[2] y apareciendo la versión definitiva en 1972.[3] 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,[5] 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[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.

[editar] Vuelta atrás (backtracking)

En los lenguajes de programación antes mencionados, las instrucciones se ejecutan normalmente en orden secuencial, es decir, una a continuación de otra, en el mismo orden en que están escritas, que sólo varía cuando se alcanza una instrucción de control (un bucle, una instrucción condicional o una transferencia).
Los programas en Prolog se componen de cláusulas de Horn que constituyen reglas del tipo "modus ponendo ponens", es decir, "Si es verdad el antecedente, entonces es verdad el consecuente". No obstante, la forma de escribir las cláusulas de Horn es al contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente. El antecedente puede ser una conjunción de condiciones que se denomina secuencia de objetivos. Cada objetivo se separa con una coma y puede considerarse similar a una instrucción o llamada a procedimiento de los lenguajes imperativos. En Prolog no existen instrucciones de control. Su ejecución se basa en dos conceptos: la unificación y el backtracking.
Gracias a la unificación, cada objetivo determina un subconjunto de cláusulas susceptibles de ser ejecutadas. Cada una de ellas se denomina punto de elección. Prolog selecciona el primer punto de elección y sigue ejecutando el programa hasta determinar si el objetivo es verdadero o falso.
En caso de ser falso entra en juego el backtracking, que consiste en deshacer todo lo ejecutado situando el programa en el mismo estado en el que estaba justo antes de llegar al punto de elección. Entonces se toma el siguiente punto de elección que estaba pendiente y se repite de nuevo el proceso. Todos los objetivos terminan su ejecución bien en éxito ("verdadero"), bien en fracaso ("falso").

[editar] Programación en Prolog

Existen dos tipos de cláusulas: Hechos y Reglas. Una regla es del tipo:
Cabeza :- Cuerpo.
y se lee como "La cabeza es verdad si el cuerpo es verdad". El cuerpo de una regla consiste en llamadas a predicados, que son llamados los objetivos de las reglas. El Predicado ,/2 (es decir, un operador de aridad 2 (que recibe 2 argumentos) y de nombre , ) denota conjunción de objetivos, y el operador ;/2 denota disyunción. Conjunciones y disyunciones pueden sólo aparecer en el cuerpo, no en la cabeza de la regla. En realidad la disyunción no es un operador básico o predefinido, sino que está meta-programado así:
';' (A,_) :- A.
 
';' (_,B) :- B.
Las cláusulas sin cuerpo (es decir, antecedente) son llamados hechos porque siempre son ciertos. Un ejemplo de un hecho es:
gato(tom).
que es equivalente a la regla:
gato(tom) :- true.
El predicado predefinido true/0 siempre es verdad.
Dado el hecho anterior, se puede preguntar:
¿ es tom un gato ?
?- gato(tom).  
Yes
¿ que cosas son gatos ?
?- gato(X).  
X = tom
Debido a la naturaleza relacional de muchos predicados, pueden ser usados revertidos sus argumentos. Por ejemplo, length/2 puede ser usado para determinar el tamaño (longitud) de una lista: length([a,b,c], L), así como para generar un esqueleto de lista para un largo dado (length(X, 5)). Similarmente, append/3 puede ser usado también para unir o anexar dos listas: append([a,b], [c,d], X) , así como para dividir una lista en dos partes: append(X, Y, [a,b,c,d]). Todo depende de qué argumentos sean variables libres y cuáles sean instanciados. En analogía con la programación imperativa, las variables libres son argumentos de salida y el resto son argumentos de entrada. Pero en Prolog, a diferencia de los lenguajes imperativos, dicho rol es intercambiable en la mayoría de los predicados. Esta característica se denomina reversibilidad, y las combinaciones válidas de argumentos de salida o entrada se denomina modos de uso. Por ejemplo, el predicado length/2 es reversible y tiene tres modos de uso: los dos argumentos instanciados, el primer argumento instanciado pero el otro no, y viceversa. El modo de uso con los dos argumentos sin instanciar no tiene mucho sentido, pero podría ser admitido según algunas implementaciones, en tal caso, generaría todas los esqueletos de lista de todas las longitudes posibles...
Por esta razón, una biblioteca relativamente pequeña de predicados basta para muchos programas en Prolog. Todos los predicados pueden también ser usados para realizar pruebas unitarias: las consultas pueden ser incrustados en programas y permitir pruebas automáticas de regresión en tiempo de compilación.
Como un lenguaje de propósito general, Prolog también posee varios predicados predefinidos para interacción con el sistema operativo, como entrada/salida, gráficos y comunicaciones de datos. Estos predicados no tienen un significado relacional y son sólo útiles por los efectos laterales que exhiben en el sistema. Por ejemplo, el predicado write/1 muestra un término en la pantalla, pero no tiene relevancia su valor de verdad o falsedad.

[editar] Expresiones

Prolog cuenta con operadores para la unificación y comparación, sea con evaluación o sea simbólica, como los siguientes:
  • X is Y %unificación con evaluación.
  • X = Y  %unificación simbólica
  • X=:=Y  %comparación con evaluación
  • X == Y %comparación simbólica.
?- X is 3+5.
   X = 8
 
?- X = 3+5.
   X = 3+5
 
?- 3+5 =:= 2+6.
   yes
 
?- 3+5 == 2+6.
   no
 
?- 3+5 == 3+5.
   yes

[editar] Listas

La representación de hechos simples no es lo común en la clasificación de elementos, sino que se agrupan los elementos de un mismo tipo en una lista.
Las listas son colecciones de elementos en Prolog. Una lista se divide en dos partes: Cabeza. Es el primer elemento de la lista. Cola. Es una lista con el resto de los elementos de la lista. La cabeza y la cola de una lista se separan con el símbolo "|".

[editar] Ejemplos de código Prolog

[editar] Ejemplo simple

%%
%% declaraciones
%%
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela').
padrede('carlos', 'debora').
 
% A es hijo de B si B es padre de A
hijode(A,B) :- padrede(B,A).
% A es abuelo de B si A es padre de C y C es padre B
abuelode(A,B) :- 
   padrede(A,C), 
   padrede(C,B).
% A y B son hermanos si el padre de A es también el padre de B y si A y B no son lo mismo
hermanode(A,B) :- 
   padrede(C,A) , 
   padrede(C,B), 
   A \== B.        
 
% A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B
familiarde(A,B) :- 
   padrede(A,B).
familiarde(A,B) :-
   hijode(A,B). 
familiarde(A,B) :- 
   hermanode(A,B).
%%
%% consultas
%%
% juan es hermano de marcela?
?- hermanode('juan', 'marcela').
yes
 
% carlos es hermano de juan?
?- hermanode('carlos', 'juan').
no
 
% pablo es abuelo de maria?
?- abuelode('pablo', 'maria').
yes
 
% maria es abuela de pablo?
?- abuelode('maria', 'pablo').
no

[editar] Factorial de un número

% La sintaxis es factorial(N, F) -> Factorial de N es F (el resultado se guarda en F)
factorial(0, 1).
factorial(N, F) :- N>0, N1 is N - 1, factorial(N1, F1), F is N * F1.
 
%el factorial se llama recursivamente dejando el resultado en F

[editar] Usos de Listas en Prolog

[editar] Creación y consulta de listas

plantas([manzana, naranja, limon, espinaca, gardenia, alfalfa,pino]). 
 
lista([1,2,3]).
 
?-lista([H|T]).
   H=1 
   T=[2,3]
 
?-lista([H,J|T]).
   H=1
   J=2
   T=[3]

[editar] Longitud de una lista

% Si queremos hallar la longitud de una lista.
% La longitud de una lista vacia es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.
 
longitud([],0).
longitud([_|T],N):-longitud(T,N0), N is N0 + 1.
 
?- longitud([a,b,c],L).
   L = 3
?- longitud([a,b,c],4).
   No

[editar] Búsqueda de un elemento

% Si queremos determinar si un elemento pertenece a una lista.
% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si se encuentra en la cola de la lista.
 
pertenece(X,[X|_]) :- !.
pertenece(X,[_|R]):- pertenece(X,R). 
 
?- pertenece(b,[a,b,c]).
   Yes
?- pertenece(b,[a,[b,c]]).
   No
?- pertenece([b,c],[a,[b,c]]).
   Yes

[editar] Eliminar elemento de una lista

% Si queremos eliminar un elemento de la lista.
% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista 
%     como parte de la respuesta y continuamos eliminando X de la cola T.
elimina(X,[X|T],T).
elimina(X,[H|T],[H|T1]):- elimina(X,T,T1).
 
?- elimina(1,[1,2,3,4],R).
   R = [2,3,4]
?- elimina(1,R,[2,3]).
   R = [1, 2, 3]  
   R = [2, 1, 3]  
   R = [2, 3, 1]

[editar] Concatenar listas

% Si queremos concatenar dos listas lista. 
% Concatenar una lista vacia con L es L.
% Concatenar X|L1 con L2 es poner el primer 
% elemento de la primera lista (X) más la 
% concatenación del resto de la lista (L1) con L2
 
concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).
 
?- concatenar([1,2],[3,4],R).
R = [1, 2, 3, 4].

[editar] Comprobar si una lista es la inversa de otra

% Si queremos calcular la inversa de una lista. 
% La inversa de una lista vacia es una lista vacia.
% La inversa de H|T es la inversa de T concatenada con H.
 
inversa([],[]).
inversa([H|T],L):-  inversa(T,R),  concatenar(R,[H],L).
 
?- inversa([a,b,c,d],[d,c,b,a]).
   Yes/Si
% Utilizando un parametro acumulador.
 
inver(L1,L2):-inver(L1,L2,[]).
 
inver([],L,L).
inver([H|T],L,S):-inver(T,L,[H|S]).
 
?- inver([a,b,c,d],[d,c,b,a]).
   Yes

[editar] Referencias

  1. Colmerauer, Alain y Roussel, Philippe. La naissance de Prolog, julio 1992
  2. BERGIN, Thomas J. y GIBSON, Richard G., History of Programming Languages II, New York, ACM Press, Addison-Wesley, 1996, ISBN 0-201-89502-1
  3. Kowalski, R. A.. The early years of logic programming. 
  4. El lenguaje PROLOG, artículo en el periódico ABC del 12 de octubre de 1986
  5. Aplicaciones de la Inteligencia Artificial en la Actividad Empresarial, la Ciencia y la Industria, de Wendy B. Rauch-Hindin, página 644 y siguientes, ISBN 84-87189-07-5, en Google Books.
  6. A falta de una especificación formal del Prolog de Edimburgo se ha utilizado sobre todo como referencia el DEC-10 PROLOG Manual de Bowen (1982) o el Programming in Prolog de Clocksin y Mellish.

[editar] Véase también

 

 

http://es.wikipedia.org/wiki/Prolog