miércoles, 4 de junio de 2014

PRACTICANDO CON PROLOG UNIDAD DOS: SEGUNDA PARTE

UNIDAD DOS: SINTEXIS Y SIGNIFICADO DE LOS PROGRAMAS


Significado procedural


El significado procedural especifica el cómo contesta Prolog a las preguntas. Responder
a una pregunta significa tratar de satisfacer una lista de metas. Estas pueden satisfacerse
si las variables que existen en las metas pueden instanciarse de tal modo que las metas se
sigan lógicamente del programa. Así el significado procedural de Prolog es un
procedimiento para ejecutar una lista de metas con respecto a un programa dado.
Ejecutar las metas significa tratar de satisfacerlas.
Llamemos a este procedimiento 'ejecuta':










las entradas y salidas a este procedimiento son :
entrada : un programa y una lista de metas.
salida : un indicador de éxito / falla y una instanciación particular de las variables.

el significado de las dos salidas es como sigue :

(1). El indicador de éxito/falla es 'yes' si las metas son satisfactibles y 'no' si ocurre lo contrario. Decimos que 'yes' señala una terminación exitosa y 'no' una falla.

(2). Una instanciación de las variables se produce solamente en el caso de una terminación exitosa; en el caso de una falla no hay instanciación.

Un ejemplo es el siguiente:








Es el codigo que se utiliza para mostrar el significado procedual






















Muestra consultas las descripciones verdaderas y falsas.




















Bibliografia:
APUNTES DE PROLOG
Edgar Altamirano Carmona    
Universisda Autónoma De Guerrero, 2014

PRACTICANDO CON PROLOG UNIDAD DOS

SINTEXIS Y SIGNIFICADO DE LOS PROGRAMAS


Tipos básicos de datos.

Prolog reconoce el tipo de un objeto por su sintaxis (en Prolog no es necesario declarar el tipo de un dato) :


Átomos.
Se pueden construir de tres formas:
1). Cadenas de letras, dígitos y el símbolo de subrayado (_), pero comenzando siempre con una letra minúscula.
Ejemplos :
ana nil x25 x_25 x_25 AB x_ x_y a_b_c
2). Cadenas de caracteres especiales.
Ejemplos: <---> ===> ... .:. ::=
3). Cadenas de caracteres encerrados en comillas simples (').
Ejemplos: 'Tomas' 'Juan_Hernandez' 'Jose Lopez Lopez'

Números.
Pueden ser enteros ó reales :
Ejemplos: 1 -97 3.141592 -1.2 0

Variables.
Son Cadenas de letras, dígitos y el símbolo de subrayado ( _ ) que comienzan siempre con una letra mayúscula ó un símbolo de subrayado.
Ejemplos: X Nombre_1 _x23 _55

Estructuras.
Son objetos que tienen varios componentes.
Ejemplo: fecha( 20, agosto, 1992)
fecha recibe el nombre de functor; En este caso todos sus componentes son constantes pero pueden ser variables ó incluso estructuras. Aunque las estructuras tienen varios componentes, en los programas Prolog se tratan como objetos únicos. Es decir, en Prolog, todos los objetos son términos.
Ejemplo: agosto y fecha( 20, agosto, 1992)


Matching (empatamiento).


La operación más importante sobre los términos es la de matching (empatamiento).
Dados dos términos cualesquiera decimos que "empatan" si se cumple lo siguiente :
(1). Son idénticos; ó,
(2). Las variables en ambos términos pueden instanciarse a objetos de tal modo que después
de la sustitución de las variables por estos objetos los términos puedan ser idénticos.


Significado declarativo.


Los programas Prolog pueden entenderse de dos maneras: declarativa y proceduralmente.

Significado Declarativo.

El significado declarativo de los programas determina si una meta dada es cierta, y si es el caso, para qué valores de las variables es cierta.
Para definir de manera más precisa el significado declarativo, necesitamos introducir antes el concepto de "instancia" de una cláusula.
Una instancia de una cláusula C es la cláusula C con cada una de sus variables sustituidas por algún término. Una "variante" de una cláusula C es una instancia de la cláusula C tal que cada variable se sustituye por otra variable.

El significado declarativo de los programas determina si una meta dada es cierta, y si es el caso, para qué valores de las variables es cierta.
Para definir de manera más precisa el significado declarativo, necesitamos introducir antes el concepto de "instancia" de una cláusula.
Una instancia de una cláusula C es la cláusula C con cada una de sus variables sustituidas por algún término. Una "variante" de una cláusula C es una instancia de la cláusula C tal que cada variable se sustituye por otra variable.

Ahora algo de practica...




Este programa muestra lo que es el significado declarativo.

















Con las siguientes que se hacen preguntas se pretende observar  las clausulas y verificación del el uso de la ",".
Una coma entre metas denota una conjunción de metas: todas tienen que ser ciertas.
 Prolog acepta además la disyunción de metas : cualquiera de las metas en una disyunción tiene que ser verdadera. La disyunción se indica con el símbolo de punto y coma (;).














BIBLIOGRAFIA
APUNTES DE PROLOG
Edgar Altamirano Carmona    
Universisda Autónoma De Guerrero, 2014

martes, 3 de junio de 2014

"PRACTICANDO CON PROLOG UNIDAD UNO"

"Mi árbol familiar"


Para comenzar a entender prolog en esta practica comenzaré explicando mi árbol genealógico que está conformado de la siguiente manera: Donde progenitor, abuelo, abuela, tío, tía, hermano, hermana, hombre y mujer son relaciones; Los nombres que se mencionan son argumentos.


Su servidora:
Estrella

Abuelos paternos:
-Oralia
-Julian

Abuelos maternos:
-Rosa
-Crisoforo

Mis padres:
-Silvia
-Jose

Hermanos paternos
-Jhonatan
-María
-Yari
-Celia

Hermanos maternos
-Carlos
-Yolver
-Blanca
-Yaris
-Alma

Tia:
Cristina

Nota: En el caso de mis hermanos paternos y mantenernos, tengo dos hermanas una que se llama Yari hija de mi Papá y otra que se llama Yaris hija de mi mamá, lo aclaro para al momento de hacer las pruebas no piensen que es un error.


Comienza la practica...






Muestro mi definición de relaciones en mi árbol familiar; En este caso muestra si es hombre o mujer.














Se emplea la relación de progenitor, abuelo, abuela, hermano, hermana, tío y tia.
















Para mi primera consulta pido que se muestren los progenitores de cada uno:
?-progenitor(X,Y),progenitor(X,Y).











Las siguientes consultas están enumeradas del 1 al 15, preguntando es este apartado y en la imagen se muestra el resultado.

1.-Mostrar mis padres.
 ?- progenitor(X,estrella).

2.-Pregunto si Yaris es mi hermana
  ?-hermana(yaris,estrella).

3.-Pregunto si Silvia es mi hermano, como lo pueden observar el resultado es falso porque Silvia en realidad es mi mamá.
?- hermano(silvia,estrella).

4.-Para mostrar mis hermanos lo hice de esta manera.
?- hermano(Y,estrella).

5.-Pido que se muestren mis abuelos
?- abuelo(X,estrella).

6.-Pido que se muestren mis abuelas
?- abuela(X,estrella).





7.-Pregunto si mi tía es cristina
?- tia(cristina,estrella)

8.-Muestra quienes son hijas de crisoforo mi abuelo.
?- progenitor(crisoforo,Y).

9.-Pregunto quienes son los padres de mi mamá.
?- progenitor(Y,silvia).

10.-Pregunto quienes son los padres de mi papá.
?- progenitor(Y,jose).

11.-Me muestra que Silvia (mi mamá) es progenitora de los que aparecen en el la consulta 11.
?- progenitor(silvia,Y).

12.-Me muestra que Jose (mi papá) es progenitor de los que aparecen en el la consulta 12.
?- progenitor(Jose,Y).

13.-En este caso pregunto de quién soy progenitor, el resultado es falso porque responde a que no tengo descendencia.
?- progenitor(estrella,Y).

14.-Pregunto si Yolver es mi hermano
?-hermano(yolver,estrella).

15.-Pregunto si julian es mi tío, como verán es falso porque julian es mi abuelo.



Esto es todo sobre prolog unidad uno, espero les sirva la practica que eh hecho con mi árbol familiar.
Seguiremos trabajando en mas ejemplos, así que esperen la siguiente unidad.

domingo, 4 de mayo de 2014

PROLOG


PROLOG



Prolog es un lenguaje de programación creado para representar y utilizar el conocimiento que se tiene sobre un determinado dominio. Más exactamente, el dominio es un conjunto de objetos y el conocimiento se representa por un conjunto de relaciones que describen las propiedades de los objetos y sus interrelaciones. Un conjunto de reglas que describa estas propiedades y estas relaciones es un programa PROLOG. Una definición más accesible para el usuario común sería:

Prolog es un lenguaje de programación que es usado para resolver problemas que envuelven objetos y las relaciones entre ellos. Permite ejecutar estatutos que no son otra cosa que oraciones de un lenguaje lógico elemental particular de cláusulas. Prolog por su naturaleza muestra una habilidad para describir gramáticas, en particular gramáticas libres de contexto.

Un programa Prolog está formado por una secuencia de enunciados (cláusulas): hechos, reglas y variables.

Dejo esto link para que comprendan màs sobre prolog contiene ejemplos que espero les sirva...

http://gpd.sip.ucm.es/jaime/pl/prolog.pdf

viernes, 21 de marzo de 2014

ABECEDARIO



LA MANERA DE ENSEÑAR EL ABECEDARIO AHORA



Heuristica y el problema del viajero


Heurística


La palabra heurística significa hallar o inventar, en disciplina científica se aplica a cualquier ciencia e incluye la elaboración de cambios auxiliares, principios, reglas, estrategias  y programas que faciliten resolver tareas de cualquier tipo.

Según Horst Müller:



 Los procedimientos heurísticos son formas de trabajo y de pensamiento que apoyan la realización consciente de actividades mentales exigentes.
Los procedimientos heurísticos como método científico pueden dividirse en principios, reglas y estrategias.

  1. Principios heurísticos: Constituyen sugerencias para encontrar (directamente) la idea de solución; posibilita determinar, por tanto, a la vez, los medios y la vía de solución. Dentro de estos principios se destacan la analogía y la reducción.

  1. Reglas heurísticas: Actúan como impulsos generales dentro del proceso de búsqueda y ayudan a encontrar, especialmente, los medios para resolver los problemas.
Las Reglas heurísticas que más se emplean son:
  1. Separar lo dado de lo buscado.
  2. Confeccionar figuras de análisis: esquemas, tablas, mapas, etc.
  3. Representar magnitudes dadas y buscadas con variables.
  4. Determinar si se tienen fórmulas adecuadas.
  5. Utilizar números (estructuras más simples) en lugar de datos.
  6. Reformular el problema.

  1. Estrategias heurísticas: Se comportan como recursos organizativos del proceso de resolución, que contribuyen especialmente a determinar la vía de solución del problema abordado. Existen dos estrategias:
  2. El trabajo hacia adelante: se parte de lo dado para realizar las reflexiones que han de conducir a la solución del problema.
  3. El trabajo hacia atrás: se examina primeramente lo que se busca y, apoyándose de los conocimientos que se tienen, se analizan posibles resultados intermedios de lo que se puede deducir lo buscado, hasta llegar a los dados.

En computación, dos objetivos fundamentales son encontrar algoritmos con buenos tiempos de ejecución y buenas soluciones, usualmente las óptimas.
Una heurística es un algoritmo que abandona uno o ambos objetivos; por ejemplo, normalmente encuentran buenas soluciones, aunque no hay pruebas de que la solución no pueda ser arbitrariamente errónea en algunos casos; o se ejecuta razonablemente rápido, aunque no existe tampoco prueba de que siempre será así. Las heurísticas generalmente son usadas cuando no existe una solución óptima bajo las restricciones dadas tiempo, espacio, etc.


El Problema Del Agente Viajero
 


“Un vendedor tiene una lista de ciudades cada una de las cuales debe visitar solamente una vez; existen carreteras directas entre cada par de ciudades de la lista. Se debe encontrar la ruta que el vendedor debería seguir para que, siguiendo el camino más corto posible, visitara todas las ciudades, comenzando por cualquiera de ellas y volviendo a la misma. Un ejemplo de éste tipo de problemas para seis ciudades se plantea en la figura 2.6.



En principio se puede resolver éste problema explorando el árbol de todos los caminos posibles y eligiendo aquél que tenga la longitud mínima; pero, si existen n ciudades, el número de caminos diferentes entre ellas es (n-1)!, esto significa que el tiempo requerido para resolver el problema es proporcional a n!. Por lo tanto, si tenemos once ciudades, (11-1)! = 10*9*8*7*6*5*4*3*2*1 = 3, 628,000 rutas son posibles, es decir, se trata de un problema típico de explosión combinatoria en el que es útil aplicar técnicas heurísticas.
Una técnica heurística de propósito general que es útil para resolver problemas combinatorios es el 'algoritmo del vecino más próximo', que trabaja seleccionando la alternativa más cercana que aún no ha sido visitada y así sucesivamente hasta recorrer todos los nodos y retornar al punto de partida:
1. Seleccionar arbitrariamente una ciudad de partida.
2. Para seleccionar la siguiente ciudad, analizar todas las ciudades que aún no se han visitado y seleccionar aquélla que sea la más cercana a la ciudad actual; ir a ella en el siguiente paso.
3. Repetir el paso dos hasta que se hayan visitado todas las ciudades. éste algoritmo se ejecuta en un tiempo proporcional al cuadrado de n lo que representa una mejora significativa sobre n!.” (Edgar Altamirano Carmona 2014, p.11, 12)


El algoritmo del agente viajero se puede representar de la siguiente manera:

Definir el número de nodos, su posición y el costo por cada arista (i, j) donde i = ciudad 1 y j = ciudad 2
Elegir el nodo inicial i
Hacer
Si el nodo más cercano no se ha visitado
Visitar nodo j
Actualizar lista de nodos visitados
Costo_total = costo_total + costoij
Nodo i = nodo j
Hasta haber visitado todos los nodos


Conclusión:

Por heurística entendemos una estrategia, método, criterio o truco usado para hacer más sencilla la solución de problemas difíciles. El conocimiento heurístico es un tipo especial de conocimiento usado por los humanos para resolver problemas complejos.
En el área de computación su objetivo primordial es encontrar algoritmos con buenos tiempos de ejecución y que de buenas soluciones, preferentemente óptimas.
En el caso del problema del agente viajero se debe encontrar la ruta más corta que sea posible, es ahí donde entra la heurística porque le da la solución más óptima.

Bibliografía:

APUNTES DE INTELIGENCIA ARTIFICIAL
Edgar Altamirano Carmona    
Universisda Autónoma De Guerrero, 2014

ISC. Patricia Horta Rosado
Inteligencia Artificial (n.d.). Evaluando las Fuentes Electrónicas. Consultado el 17 de marzo del 2014. , página web  Instituto Tecnológico de Veracruz. http://ia.comeze.com/subtemas/un1/1.7.html


martes, 18 de marzo de 2014

Sistemas De Producción


Sistemas De Producción

Un sistema de producción busca convertir a la computadora en una máquina que pueda resolver problemas específicos.


Un sistema de producción proporciona una estructura que facilita la descripción y la ejecución de un proceso de búsqueda.

Un sistema de producción consiste de:

Un conjunto de facilidades para la definición de reglas.
Mecanismos para acceder a una o más bases de conocimientos y datos.
Una estrategia de control que especifica el orden en el que las reglas son procesadas, y la forma de resolver los conflictos que pueden aparecer cuando varias reglas coinciden simultáneamente.
Un mecanismo que se encarga de ir aplicando las reglas.

“El algoritmo básico del aplicador de reglas puede escribirse en forma no determinística como sigue:

Algoritmo sisprod.
1. [Establecer la base de datos inicial.]
DATOS <--- base de datos inicial;
2. [Aplicar reglas hasta que se satisfaga alguna condición de terminación
del problema (éxito ó fracaso)]
while DATOS no satisfaga la condición de terminación del problema
{
seleccionar alguna regla R del conjunto de reglas, tal que
pueda ser aplicada a DATOS;
DATOS <--- resultado de aplicar R a DATOS;
}
3. [Fin]
presentar los resultados.
end.” (Edgar Altamirano Carmona 2014, p.10)



Conclusión:

En mi opinión el sistema de producción busca que la maquina pueda resolver problemas específicos, bajo algoritmos que se le implementen.
Así bien teniendo reglas que se prueban hasta encontrar una secuencia que cumplan una condición determinada.


Bibliografía:

APUNTES DE INTELIGENCIA ARTIFICIAL
Edgar Altamirano Carmona    
Universidad Autónoma De Guerrero, 2014