domingo, 17 de mayo de 2015

CARACTERISTICAS DE 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 paridad 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 realizarpruebas 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 predicadowrite/1 muestra un término en la pantalla, pero no tiene relevancia su valor de verdad o falsedad.
PROLOG

El Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique,1 es un lenguaje para programar artefactos electrónicos mediante el paradigma lógico con técnicas de producción final interpretada. Es bastante conocido en el área de la Ingeniería Informática para investigación en Inteligencia Artificial.

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 yPhilippe 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 19712 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.
Arbolo de Búsqueda

Representación de un conjunto de estados nos permite mostrar los estados a través de nodos.

También es representado por punteros.

Conformado por:

· Nodo Raíz: estado Inicial

· Expansión: es la generación de los nodos siguientes.

· Nodo hoja: cuando ya no se puede expandirse

· Estado Meta: cuando ya hayamos encontrado el estado meta entonces podremos marcar como terminado.

El estado meta puede ser implícito o explícito.
Técnicas de búsqueda para los agentes

Búsquedas Ciegas: Busca la primer solución sin importar que tan óptima sea; no detecta si se está aproximando o alejando de la solución. No es capaz de encontrar una solución aceptable en caso de que no exista o sea demasiado costoso encontrar la solución óptima.

1. Exhaustiva

2. Aleatoria (Genera-y-Prueba)

3. Por Profundidad (Depth-First)

4. Por Amplitud (Breath-First)

5. Costo Uniforme

6. Limitada por Profundidad

7. Profundización Iterativa

8. Bidireccional



Búsquedas Heurísticas: Busca soluciones aceptables; reduce el espacio de búsqueda y es capaz de determinar su proximidad a una solución y la calidad de la misma utilizando conocimiento a priori

1. Busqueda Tacaña (Greedy Search)

2. Búsqueda A*

3. Templado Simulado

4. Búsqueda Tabú

5. Búsqueda Basada en Reestricciones





Pasos o Elementos para definir un problema en un agente para la solución de problemas.

Agentes para la solución de problemas (Metas), basado en metas, tiene algoritmos de búsqueda, el esqueleto es:


• Formulación del Problema


• Formulación de Metas


• Búsqueda (Algoritmos) para llegar del Estado Inicial al estado de meta


• Solución Conocimiento


y tipos de problemas

Considere el siguiente ejemplo: El mundo de la aspiradora. En este mundo hay dos posibles ubicaciones en ellas puede o no puede haber mugre y el agente se encuentra en una de las dos. El mundo puede asumir 8 posibles estados. Son tres las acciones que el agente puede emprender en el mundo de la aspiradora. La meta es eliminar toda la mugre. Problemas bien definidos y soluciones


• Problema: Un problema en realidad es un conjunto de información que el agente utiliza para decidir lo que va a hacer. 

• Estado inicial: Es donde el agente sabe que allí es en el que se encuentra.

• Operador: Denota la descripción de una acción que nos servirá para alcanzar un estado.

• Espacio de estado: Es el conjunto de todos los estados que pueden alcanzarse a partir del estado inicial mediante cualquier secuencia de acciones.

• Ruta: Es cualquier secuencia de acciones que me permiten pasar de un estado a otro.