viernes, 13 de junio de 2014

Prolog Ejercicio 4: El Mono y la Banana (Solución de Problemas)

El problema del mono y la banana se utiliza como un ejemplo sencillo de solución de problemas. El siguiente programa en Prolog mostrará como se pueden utilizar los mecanismos de 'matching' y 'backtracking'.

Utilizaremos la siguiente versión del problema:
  1. Existe un mono en la puerta de un cuarto.
  2. Enmedio del cuarto cuelga una banana del techo.
  3. El mono está hambriento y desea capturar la banana pero no puede alcanzarla desde el piso.
  4. En la ventana del cuarto hay una caja que el mono puede usar.
El mono puede realizar solamente las siguientes acciones:
  1. Caminar sobre el piso
  2. Subir a la caja
  3. Empujar la caja (Si el mono está junto a la caja)
  4. Agarrar la banana (Si el mono está sobre la caja y bajo la banana).
¿Cómo puede el mono llegar a capturar la banana?

Análisis del problema.
Una tarea importante en programación es encontrar una representación del problema en términos del lenguaje de programación utilizado.
En este caso podemos pensar del 'mundo del mono' en términos de 'estados' que cambian con el tiempo. El estado actual se determina por la posición actual de los objetos.
Por ejemplo, el estado inicial del mundo está determinado por:

1). El mono está en la puerta.
2). El mono está sobre el piso.
3). La caja está en la ventana.
4). El mono no tiene la banana.

El estado final es una situación en que el mono tiene la banana, es decir, cualquier estado en cuyo componente último sea : estado( _, _, _, silatiene)

Las transiciones permitidas que cambian el mundo de un estado a otro son
las siguientes :
Agarrar la banana.
Subir a la caja.
Empujar la caja.
Caminar en el cuarto.

No todas las transiciones son posibles en cada estado posible del mundo del mono. Por ejemplo, la transición 'agarrar la banana' es solamente posible si el mono está sobre la caja y bajo la banana y si no tiene todavía la banana. Estas transiciones ó reglas se pueden formalizar en Prolog como una relación de tres componentes que llamaremos 'mover':

mover( Estado1, M, Estado2) 

Los tres argumentos de la relación especifican un movimiento tal que:
Estado1 ----- M -----> Estado2

'Estado1' es el estado antes del movimiento 'M'; 'M' es el movimiento realizado, y 'Estado2' es el estado del mundo del mono después de haberse realizado el movimiento 'M'.

Podemos expresar el hecho de que el mono estando sobre el piso puede caminar de la posición P1 a cualquier posición P2. El mono puede realizar esta acción sin importar la posición de la caja y si tiene ó no la banana:

          mover( estado( P1, sobreelpiso, B, H),
          caminar( P1, P2 ),
          estado( P2, sobreelpiso, B, H)).

El programa completo es el siguiente:


Consideremos la siguiente pregunta al programa anterior:
?- puedetener( estado( enlapuerta,sobreelpiso,enlaventana,nolatiene)).
Prolog contestará: 'yes'.


El proceso llevado a cabo por Prolog para alcanzar ésta respuesta involucra una serie de búsquedas de movimientos válidos entre una serie de movimientos alternativos posibles. En algún punto de la búsqueda existirá un movimiento equivocado y válido que conducirá a una hoja del árbol de búsquedas, en tal situación, un proceso de 'backtracking' (vuelta atrás) se llevará a cabo para continuar con el proceso.

Árbol de búsqueda para el problema del mono y la banana. El proceso de backtracking se realiza una sola vez. Las búsquedas se realizan de arriba a abajo y de izquierda a derecha.

Prolog Ejercicio 3: Significado Procedural

Significado Procedural de un Programa Prolog

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.


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 procedural determina cómo se vá a obtener esta salida, es decir, como evalúa Prolog sucesivamente las relaciones definidas en el programa.   Ejemplo.  En el siguiente ejemplo se hace una traza de la ejecución para ilustrar el significado procedural de Prolog :


Pregunta: 

Traza de la ejecución. Lista inicial de metas : oscuro(X), enorme(X). Examina el programa de arriba hacia abajo buscando una cláusula cuya cabeza empate con la primera meta : oscuro(X). Se encuentra la cláusula 7 : oscuro( Z) :- negro( Z).   Se reemplaza la primera meta con el cuerpo instanciado de la cláusula 7, dando una nueva lista de metas :  negro(X), enorme(X).  Examina el programa para encontrar un empatamiento de negro(X). Se encuentra la cláusula 5: negro( gato). Esta cláusula no tiene cuerpo, así que la lista de metas, luego de instanciarse se convierte en : enorme(gato).
Examina el programa para buscar la meta enorme(gato), no se encuentra ninguna cláusula. Por lo tanto se realiza un proceso de backtracking al paso 3) y se elimina la instanciación X = gato. Ahora la lista de metas es de nuevo:
negro(X), enorme(X).

Se continúa examinando el programa a partir de la cláusula 5. No se encuentra ninguna cláusula. Por lo tanto se realiza un proceso de backtracking nuevamente al paso (2) y se continúa examinando a partir de la cláusula 7. Se encuentra la cláusula 8:
oscuro(Z) :- cafe(Z).

Se reemplaza la primera meta en la lista de metas por cafe(X), dando:
cafe(X), enorme(X)
 Examina el programa buscando empatar cafe(X), encuentra cafe(oso). Esta cláusula no tiene cuerpo, así que la lista de metas es ahora: enorme(oso).
Examina el programa y encuentra la cláusula enorme(oso). Esta cláusula no tiene cuerpo, así que la lista de metas se queda vacía. Esto indica una terminación exitosa y la instanciación correspondiente a la variable queda como: X=oso.

Prolog Ejercicio 2: Significado Declarativo


 Significados de un programa Prolog

Los programas Prolog pueden entenderse de dos maneras: declarativa y proceduralmente. Considere la cláusula :          P :- Q, R.          donde P, Q y R tienen la sintaxis de términos.

Algunas interpretaciones declarativas de esta cláusula son :
  • P es cierta si Q y R son ambas ciertas.
  • De Q y R se sigue P.
Dos interpretaciones procedurales de la misma cláusula son :
  • Para resolver el problema P, primero se resuelve el subproblema Q y entonces el subproblema R.
  • Para satisfacer P, primero se debe satisfacer Q y entonces R.
Así, las diferencias entre el significado declarativo y procedural es de que en la segunda interpretación no solamente se definen las relaciones lógicas entre la cabeza de la cláusula y las metas en el cuerpo de la cláusula sino además el orden en que las metas deben procesarse.

Significado Declarativo

En un lenguaje declarativo puro, sería de esperar que el orden en el que aparecen los hechos y las reglas en la base fuera independiente de los datos, sin embargo en PROLOG no es así.

El significado declarativo tiene que ver sólo con las relaciones definidas por el programa. De esta manera, el significado declarativo determina cuál será la salida del programa.

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.

Los aspectos declarativos de los programas son, habitualmente, más fáciles de entender que los procedurales. Esta es la principal razón por la que el programador debe concentrarse en el significado declarativo y evitar distraerse por los detalles de cómo se ejecutan los programas.

Ejercicios.

1. Considere el siguiente programa:


¿Cómo contestará Prolog las siguientes preguntas? Cuando sean posibles varias respuestas, dé al menos dos de ellas.

(a). ?- f( s(1), A).
(b). ?- f( s(s(1)), dos).
(c). ?- f( s(s(s(s(s(s(1)))))), C).
(d). ?- f( D, tres).


Fuente: http://mural.uv.es/mijuanlo/PracticasPROLOG.pdf

Prolog Ejercicio 1: Árbol Familiar




¿Como crear un Árbol Genealógico en Prolog?

 Se debe escribir el código utilizando el siguiente formato y siguiendo las reglas que marca el software.
Para el ejemplo de arriba tendremos el siguiente código:


Ahora comenzaremos a realizar preguntas al programa siguiendo la sintaxis definida:

1.- ¿Quién es mi papá?
2.- ¿Quién es mi mamá?
3.- ¿Quién es mi abuelo?
4.- ¿Quién es mi abuela?
5.- ¿Quién es mi hermana?


1.- ¿Quién es mi tío?
2.- ¿Quién es mi tía?
3.- ¿Es hijo René de Darío?
4.- ¿Es hija Guillermina de Darío?
5.- ¿Es hermano René de Guillermina?
6.- ¿Es hermana Socorro de Cornelio?
7. -¿Quiénes son nuestros abuelos?


Podemos realizar más combinaciones de preguntas al Prolog utilizando éste código, lo dejaré por aquí para que hagan sus consultas, observen la sintaxis del programa y les pueda servir de algo.
__________________________________________________________________________________

__________________________________________________________________________________

lunes, 9 de junio de 2014

Descarga e Instalación de Prolog

En este apartado veremos la forma de descargar e instalar SWI-Prolog, un software gratuito del cual hemos hablado antes:

1.- Vamos a este enlace: http://www.swi-prolog.org/download/stable y elegimos en la tabla la versión de Prolog que es compatible con nuestro sistema, en mi caso fué de 64 bits (Segunda opción), si tu sistema operativo es de 32 bits, elige la primera.



2.- Se descarga un archivo de aproximadamente 13 mb, lo ejecutamos, si la pc pide permiso para ejecutar el archivo, damos que sí.


  Presionamos: I Agree

 Presionamos Next

 Ora vez Next

Presionamos Install

Una vez que halla terminado, presionamos Finiseh y Abrimos Prolog desde Todos los Programas.

Nos aparecerá una venana así:

¿Cómo cargar un Archivo en Prolog?

Vamos al Menú: File, después Consult y Examinamos en la PC el archivo que deseamos consultar. Listo.



Heurística



¿Qué es la Heurísica?

Es la ciencia que estudia los procesos de decisión respecto a un campo de conocimiento concreto, como son las estrategias cognitivas. Su contrapartida formal en computación es el algoritmo. 

La palabra heurística proviene de la palabra griega heuriskein que significa descubrir, encontrar. 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 este caso el adjetivo heurístico significa medio para descubrir.
Debido a la existencia de algunos problemas importantes con un gran interés práctico difíciles de resolver, comienzan a surgir algoritmos capaces de ofrecer posibles soluciones que aunque no consiguen el resultado óptimo, si que se acercan en un tiempo de cálculo razonable. Estos algoritmos están basados en el conocimiento heurístico y por lo tanto reciben el nombre de algoritmos heurísticos.

Por lo general, los algoritmos heurísticos encuentran buenas soluciones, aunque a veces no hay pruebas de que la solución pueda hallarse en un tiempo razonablemente corto o incluso de que no pueda ser errónea. Frecuentemente pueden encontrarse casos particulares del problema en los que la heurística obtendrá resultados muy malos o que tarde demasiado en encontrar una solución.

Un método heurístico es un conjunto de pasos que deben realizarse para identificar en el menor tiempo posible una solución de alta calidad para un determinado problema. 

Al principio esta forma de resolver problemas no fue bien vista en los círculos académicos, debido fundamentalmente a su escaso rigor matemático. Sin embargo, gracias a su interés práctico para solucionar problemas reales fue abriendo poco a poco las puertas de los métodos heurísticos, sobre todo a partir de los años 60. Actualmente las versiones matemáticas de métodos heurísticos están creciendo en su rango de aplicaciones, así como en su variedad de enfoques. 

Nuevas técnicas heurísticas son utilizadas a diario por científicos de computación, investigadores operativos y profesionales, para resolver problemas que antes eran demasiado complejos o grandes para las anteriores generaciones de este tipo de algoritmos. 

Ejemplo: Problema del Viajante

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

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 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': 

Paso 1. Seleccionar un nodo inicial.
Paso 2. Identificar al nodo más cercano al último agregado,
siempre que no haya sido agregado.
Paso 3. Repetir el paso 2 hasta incluir todos los nodos.
 

Fuente:
Revista: Hiperenciclopédica de divulgación del Saber
Segunda Época, Año IX
Vol. 8, Num. 2: Abril - Junio de 2014

domingo, 4 de mayo de 2014

¿Qué es Prolog?



Prolog es un lenguaje para programar artefactos electrónicos con técnicas de producción final interpretada. Es conocido en el área de la Ingeniería Informática para investigación en Inteligencia Artificial. Su nombre proviene de las palabras francesas "PROgrammation en LOGique".


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.

*Nota: Backtracking es una estrategia para encontrar soluciones a problemas que satisfacen restricciones.

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 "verdadero", bien en "falso".


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".
 
Las cláusulas sin cuerpo (es decir, sin 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.


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.


Ejemplos:


?- 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


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

Ejemplo de Listas:

%% Declaraciones 
% 
padrede('juan', 'maria'). % juan es padre de maria 
padrede('pablo', 'juan'). % pablo es padre de juan 
padrede('pablo', 'marcela'). % pablo es padre de marcela 
padrede('carlos', 'debora'). % carlos es padre de 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 =/= B 
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

martes, 25 de marzo de 2014

Sistemas de Producción

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.

Dentro de esta definición general de sistema de producción, se incluyen:
  • Lenguajes básicos para sistemas de producción (LISP, CLIPS, PROLOG). También se los conoce como lenguajes de Inteligencia Artificial.
  • Sistemas híbridos y sistemas vacíos (shells) para producción de sistemas basados en conocimientos (VP-Expert, Expert Teach, Personal Consultant, Intelligence Compiler, EXSYS).
  • Arquitecturas generales para resolución de problemas (máquinas LISP, máquinas PROLOG). 
Características De Los Sistemas De Producción.
  • Un sistema de producción, al igual que los problemas, puede ser descrito por un conjunto de características que permiten visualizar la mejor forma en que puede ser implementado.
  • Un sistema de producción se dice que es mono tónico si la aplicación de un regla nunca evita que más tarde se pueda aplicar otra regla que también pudo ser aplicada al momento en que la primera fue seleccionada.
  • Un sistema de producción es parcialmente conmutativo si existe un conjunto de reglas que al aplicarse en una secuencia particular transforma un estado A en otro B, y si con la aplicación de cualquier permutación posible de dichas reglas se puede lograr el mismo resultado.
  • Un sistema de producción es conmutativo, si es mono tónico y parcialmente conmutativo.

Resolución De Problemas En Inteligencia Artificial. 
      En general, podemos afirmar que un problema consiste en:
  • Una descripción de la situación de la que se parte;
  • Una descripción de la situación a la que se quiere llegar;
  • Una descripción de los medios de que disponemos para alcanzar nuestro objetivo.
En el contexto de la Informática, a partir de un problema, se intenta construir un sistema que lo resuelva.
Resumidamente, las acciones para construir un sistema que resuelva un problema serían:
Definir el problema con precisión (especificación del problema), habitualmente a partir de un enunciado del problema expresado en lenguaje natural: de qué se parte; cuál es el objetivo.
  • Analizar el problema: información para elegir las técnicas.
  • Aislar y representar el conocimiento necesario para resolver el problema.
  • Elegir la mejor técnica que resuelva el problema y aplicarla al problema particular.
Un sistema de producción consiste en:
Una base de datos/hechos/conocimiento con información sobre el problema;
Un conjunto de reglas (operadores);
Una estrategia de control;
Un aplicador de reglas: ciclo de reconocimiento-actuación.
Las representación mediante formalismos lógicos puede verse de forma procedimental
Describimos cuales son los pasos para resolver un problema como una cadena de deducciones
La representación se basa en dos elementos:
Hechos: Proposiciones o Predicados
Reglas: Formulas condicionales donde el consecuente habitualmente está formado por un predicado atómico o una acción.
Analogía con búsqueda en espacio de estados
Hechos = Estado del problema
Reglas = Operadores de búsqueda

Las Técnicas De Solución De Problemas En IA.
En general, incorporan un proceso de búsqueda. Todo proceso de búsqueda puede ser visualizado como el recorrido por un árbol en el que cada nodo representa un estado y cada rama representa las relaciones entre los estados cuyos nodos conecta.
En general, las reglas contienen en forma implícita el árbol, y se genera en forma explícita sólo aquellas partes que se decide explorar. Las principales diferencias que pueden aparecer en las diferentes técnicas de búsqueda, son:
La dirección en la cual se conduce la búsqueda (hacia adelante o hacia atrás).
La estrategia de control, o forma de seleccionar las reglas que pueden ser aplicables. Los principales requerimientos de una buena estrategia de control son: que cause desplazamiento en el espacio de estado; y, que sea sistemático.
La forma de representar cada nodo del proceso de búsqueda (representación del conocimiento).
Muchas veces, tratar el proceso como búsqueda en un grafo en lugar de una búsqueda en un árbol, puede reducir el esfuerzo que se gasta en explorar senderos, esencialmente iguales, varias veces. Sin embargo, los requisitos asociados, son:
Cada vez que se genere un nodo se debe chequear para ver si ha sido generado antes.
Se deben introducir procedimientos especiales para que la búsqueda no quede atrapada en algún lazo.

sábado, 8 de marzo de 2014

La IA en la Solución de Problemas: Espacio de Estados


    
Muchos de los problemas que pueden ser resueltos aplicando técnicas de inteligencia artificial se modelan definiendo las configuraciones posibles del problema estudiado. El problema se plantea en términos de encontrar una configuración objetivo a partir de una configuración inicial dada, aplicando transformaciones válidas según el modelo del problema. La respuesta, es la secuencia de transformaciones cuya aplicación sucesiva lleva a la configuración deseada.
 
     Los ejemplos más característicos de esta categoría de problemas son los juegos. En un juego, las configuraciones del universo corresponden directamente a las configuraciones del tablero. Cada configuración, es un estado que puede ser esquematizado gráficamente y representado en forma simbólica. Las transformaciones permitidas corresponden a las reglas o movidas del juego, formalizadas como transiciones de estado.
 
     Entonces, para plantear formalmente un problema, se requiere precisar una representación simbólica de los estados y definir reglas del tipo condición - acción para cada una de las transiciones válidas dentro del universo modelado. La acción de una regla indica como modificar el estado actual para generar un nuevo estado. La condición impone restricciones sobre la aplicabilidad de la regla según el estado actual, el estado generado o la historia completa del proceso de solución.
 
      El espacio de estados de un juego es un grafo cuyos nodos representan las configuraciones alcanzables (los estados válidos) y cuyos arcos explicitan las movidas posibles (las transiciones de estado). En principio, se puede construir cualquier espacio de estados partiendo del estado inicial, aplicando cada una de las reglas para generar los sucesores inmediatos, y así sucesivamente con cada uno de los nuevos estados generados (en la práctica, los espacios de estados suelen ser demasiado grandes para explicitarlos por completo).

      Cuando un problema se puede representar mediante un espacio de estados, la solución computacional corresponde a encontrar un camino desde el estado inicial a un estado objetivo.

Ejemplo:

     Un arriero se encuentra en el borde de un rio llevando un puma, una cabra y una lechuga. Debe cruzar a la otra orilla por medio de un bote con capacidad para dos (el arriero y alguna de sus pertenencias). La dificultad es que si el puma se queda solo con la cabra la devorará, y lo mismo sucederá si la cabra se queda sola con la lechuga. ¿Cómo cruzar sin perder ninguna pertenencia?
 
Representación de las configuraciones del universo del problema:
     Basta precisar la situación antes o después de cruzar. El arriero y cada una de sus pertenencias tienen que estar en alguna de las dos orillas. La representación del estado debe entonces indicar en que lado se encuentra cada uno de ellos. Para esto se puede utilizar un término simbólico con la siguiente sintáxis: estado(A,P,C,L), en que A, P, C y L son variables que representan, respectivamente, la posición del arriero, el puma, la cabra y la lechuga. Las variables pueden tomar dos valores: i y d, que simbolizan respectivamente el borde izquierdo y el borde derecho del rio. Por convención se elige partir en el borde izquierdo. El estado inicial es entonces estado(i,i,i,i). El estado objetivo es estado(d,d,d,d).
 
Definición de las reglas de transición:
     El arriero tiene cuatro acciones posibles: cruzar solo, cruzar con el puma, cruzar con la cabra y cruzar con la lechuga. Estas acciones están condicionadas a que ambos pasajeros del bote estén en la misma orilla y a que no queden solos el puma con la cabra o la cabra con la lechuga. El estado resultante de una acción se determina intercambiando los valores i y d para los pasajeros del bote.
 
Generación del Espacio de Estados:
     En este ejemplo se puede explicitar todo el espacio de estados (el número de configuraciones está acotado por:
estado movidas
cruza solo con puma con cabra con lechuga
estado(i,i,i,i) problema problema estado(d,i,d,i) problema
estado(d,i,d,i) estado(i,i,d,i) imposible estado(i,i,i,i) imposible
estado(i,i,d,i) estado(d,i,d,i) estado(d,d,d,i) imposible estado(d,i,d,d)
estado(d,d,d,i) problema estado(i,i,d,i) estado(i,d,i,i) imposible
estado(d,i,d,d) problema imposible estado(i,i,i,d) estado(i,i,d,i)
estado(i,d,i,i) problema imposible estado(d,d,d,i) estado(d,d,i,d)
estado(i,i,i,d) problema estado(d,d,i,d) estado(d,i,d,d) imposible
estado(d,d,i,d) estado(i,d,i,d) estado(i,i,i,d) imposible estado(i,d,i,i)
estado(i,d,i,d) estado(d,d,i,d) imposible estado(d,d,d,d) imposible
estado(d,d,d,d) problema problema estado(i,d,i,d) problema

Este espacio de estados también se puede representar mediante un grafo equivalente.
 
Solución del Problema:
     El camino que pasa por la siguiente secuencia de estados es una solución del problema:
estado(i,i,i,i)
cruza con cabra
estado(d,i,d,i)
cruza solo
estado(i,i,d,i)
cruza con puma
estado(d,d,d,i)
cruza con cabra
estado(i,d,i,i)
cruza con lechuga
estado(d,d,i,d)
cruza solo
estado(i,d,i,d)
cruza con cabra
estado(d,d,d,d)

Fuente: http://users.dcc.uchile.cl/~abassi/52a/material/c5.html

viernes, 7 de marzo de 2014

Introducción a la Inteligencia Artificial


Como en toda ciencia, para aprenderla, es necesario saber sobre qué estamos hablando, por eso en este primer post, hablaremos acerca de lo que nuestro Blog se refiere:

¿Que es Inteligencia? Es la capacidad de relacionar conocimientos que poseemos para resolver una determinada situación. Si indagamos en la etimología de la palabra, encontramos en su origen latino inteligere, compuesta de intus (entre) y legere (escoger). Por lo que deducimos que ser inteligente es saber elegir la mejor opción entre las que se nos brinda para resolver un problema.

¿Qué es Artificial? Se refiere a un producto de la actividad humana, como sinónimo de "Hecho por el Hombre". También se utiliza en el sentido de "falso", ya que pretende ser o mostrar algo que no es, como un sustituto de lo natural. Pero debemos ampliar la definición y decir que lo artificial no sólo es producido por el ser humano, sino que "artificial" es todo aquello producido por la actividad de seres inteligentes.

Inteligencia Artificial (IA): Ees un área multidisciplinaria que, a través de ciencias, tales comoinformática, la lógica y la filosofía, estudia la creación y diseño de entidades capaces de razonar por si mismas utilizando como paradigma la inteligencia humana.

Tan general y amplio como eso, es que reúne varios campos (robótica, sistemas expertos, por ejemplo),  los cuales tienen en común la creación de máquinas que pueden pensar. En ciencias de la computación se denomina inteligencia artificial a la capacidad de razonar de un agente no vivo. 

"Es la ciencia e ingenio de hacer máquinas inteligentes, especialmente programas de cómputo inteligentes" - John McCarthy, 1956

jueves, 6 de marzo de 2014

¡Bienvenido(a)!

Hola! Bienvenido(a) a mi Blog!
En éste sitio encontrarás información relacionada con Inteligencia Artificial, abajo te comparto mi workspace para cualquier actividad en la que pueda ayudarte:


Espero que encuentres aquí alguna información que te sea útil.
Saludos!