lunes, 27 de mayo de 2019

4.9 Predicados mitologicos


El siguiente ejemplo muestra como se extrae functor y aridad:
?- functor ( termino (arg(1)),Functor,Aridad).
Functor = termino
Aridad = 1
Yes

Manipulación de términos.

El predicado functor es uno de los más útiles entre la biblioteca standard Prolog.
Este predicado permite extraer el functor y la aridad de un término cualquiera.
Pero, al ser reversible, también permite construir nuevos términos a partir del functor y la aridad deseada.
Los modos de uso son:
• functor(+Termino,-Functor,-Aridad).
• functor(-Termino,+Functor,+Aridad).

Predicados meta-lógicos

Ejemplo:

Predicados de Clasificacion

Los predicados meta-lógicos permiten controlar el algoritmo de resolución facilitando la meta-programación.


    

4.8 Manipulacion de terminos


Consiste en construir programas que manipulan otros programas proporcionando una mayor expresividad al lenguaje

Predicados

Meta-Lógicos

abuelo(X,Y):-novar(X)
hombre(x), progenitor(x,z), progenitor(z,y).
abuelo(x,y):-novar(y)
progenitor(z,y), progenitor(x,z), hombre(x)
abuelo(x,y):- X es abuelo de Y
X es una variable no instanciada
Permiten controlar el algoritmo de resolución facilitando la meta-programación.
|?- var(x)
X = _
|?- X-1, var(x)
no
Es uno de los más útiles entre la biblioteca standard Prolog:

El predicado functor/3






4.7 Control de busqueda en programas logicos




El orden en que aparecen los literales dentro de una sentencia (dentro del cuerpo) o el orden en que se introducen las sentencias en el programa son importantes en PROLOG. El orden afecta tanto al correcto funcionamiento del programa, como al recorrido del árbol de llamadas, determinando, entre otras cosas, el orden en que PROLOG devuelve las soluciones a una pregunta dada. El orden de las sentencias determina el orden en que se obtienen las soluciones ya que varía el orden en que se recorren las ramas del árbol de búsqueda de soluciones. Ejemplo: A continuación se presentan dos versiones del programa "miembro de una lista". Ambas versiones tienen las mismas sentencias pero escritas en distinto orden. A ambas versiones les hacemos la misma pregunta ?miembro (X, [1,2,3]).




4.6 Programacion Logica con numeros, listas y arboles


?- 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
Es más fácil entender la forma de una estructura complicada si la escribimos como un árbol en el que el nombre es un nodo y los componentes son las ramas.

Numéricos

Arboles

Listas


Arboles
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 "|".


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 "|".

Si definimos:
masuno(X, Y): - Y is X+1.
xmasuno (X, Y): - Y = X+1.
Observaremos el siguiente comportamiento:
?- masuno (,5).
Yes
?- xmasuno(4,5)
No

Numericos
En PROLOG los objetos numéricos pueden corresponder a tipos integer o float de C.
Para realizar operaciones numéricas, se tiene el predicado is, que se comporta como una asignación en un lenguaje imperativo.
Así, el objetivo X is <expresión> será verdadero cuando X unifique con el resultado numérico de evaluar <expresión>.

Expresiones

Una representación declarativa es aquélla en la que el conocimiento está especificado, pero en la que la manera en que dicho conocimiento debe ser usado no viene dado. El más popular de los sistemas de programación lógica es el PROLOG.
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.

Se puede establecer que el lenguaje PROLOG está orientado a la Inteligencia Artificial, usando la programación lógica.

También utiliza pocos comandos en comparación con otros lenguajes de programación. Sólo hemos comenzado a explorar el poder que viene de la modelización de cálculo dentro de la lógica de predicados.



4.5 Espacios de Busqueda



Cuando se resuelve un problema, se busca la mejor solución entre un conjunto de posibles soluciones. Al conjunto de todas las posibles soluciones a un problema concreto se llama espacio de búsqueda. Cada punto en el espacio de búsqueda representa una posible solución. Cada posible solución se le puede asociar un fitness o un valor que indicará cómo de buena es la solución para el problema. Un algoritmo genético (AG) devolverá la mejor solución de entre todas las posibles que tenga en un momento dado.

Entonces parece que buscar una solución se reduce a buscar un valor extremo (mínimo o máximo) en el espacio de búsqueda. A veces el espacio de búsqueda puede ser bien definido, pero en la mayoría de las ocasiones sólo se conocen algunos puntos en el espacio de búsqueda. Cuando se usa un AG las posibles soluciones generan otras a medida que el genético evoluciona.

La resolución de un problema puede expresarse como la busqueda del extremo de una función Aquí resolvemos ese problema, este es un algorítmo genético que calcula el máximo de una función. La gráfica representa un espacio de busqueda y las líneas verticales son posibles soluciones. La línea roja es el mejor individuo de la población y las verdes el resto.

Pulsa el botón Empezar para que el genético comience, el botón Parar detendrá la ejecución, en el botón Paso a Paso se ejecutará un único paso creando una nueva población y el botón Reiniciar creará una nueva población inicial.

El problema estriba en que la búsqueda puede ser muy compleja por diversas razones, como por ejemplo no saber dónde buscar una solución o dónde empezar a buscarla. Existen muchos métodos que se usan para buscar una solución válida, pero no necesariamente obtienen la mejor solución. Algunos de estos métodos son los algoritmos de escalada, backtracking o vuelta atrás, búsqueda a ciegas y los algoritmos genéticos. Las soluciones que encuentran estos tipos de búsqueda suelen ser buenas soluciones, pero no siempre encuentran la óptima.


4.4 Consulta de una base de clausulas



Tipos de datos estructurados:
  • Átomos: Constantes y variables de cadena.
  • Listas, representadas entre [ ].
Tipos definidos por el usuario. Las reglas para definir relaciones pueden actuar como tipos de usuario.




4.3 Representación clausada del conocimiento



Representación del conocimiento es un termino para referirse a representaciones pensadas para el procesamiento por ordenadores modernos, en particular, para representaciones compuestas por objetos explícitos y de afirmaciones sobre ellos.
Representar el conocimiento mediante cláusulas permite a los ordenadores sacar conclusiones de conocimiento previamente almacenados.

Tipos de Cláusulas
Ejemplos
Enunciado 1.
Si algunos perros son mamíferos, luego todos son mamíferos.
Enunciado 2.
Todos los colibrís son aves.
Este colibrí es ave.

Conclusión:
Para que un programa experto reconozca
los enunciados, se tiene que convertir en clausulas o reglas, para que estas sean entendidas por el sistema y arroje un resultado final.
es importante mencionar que la sintaxis de las cláusulas; se debe de respetar los
()
,
_
.