Aplicaciones
actuales del Lenguaje PROLOG
- Prolog se puede utilizar para resolver, básicamente, cualquier tipo de
problema.
- Principalmente es útil en la gestión de Juegos, en Inteligencia
Artificial y Sistemas Expertos, como lenguaje especialmente pensado para
construir bases de conocimientos basados en la lógica que forman parte
importante de cualquier agente inteligente, en la construcción de
Compiladores e Intérpretes, en el Reconocimiento del Lenguaje Natural,
etc.
RFuzzy para
reconocer las emociones humanas
Investigadores de la Facultad de Informática de la Universidad Politécnica
de Madrid han desarrollado una aplicación que permite reconocer las emociones
humanas a través del estudio automatizado de la voz.
La aplicación analiza las medidas sonoras de una conversación, que se
obtienen con otro programa específico, y en base a las reglas descritas en la
nueva aplicación, es capaz de distinguir las emociones escondidas en una
oración, pudiendo determinar si una persona está triste, asustada, alegre o
nerviosa. La aplicación puede precisar, incluso si la emoción no está clara, el
porcentaje de adecuación del hablante a cada emoción.
La aplicación se basa en una nueva herramienta conocida como RFuzzy,
implementada sobre el lenguaje de programación Prolog, que es capaz de
representar y trabajar con la así llamada lógica difusa. Prolog se usa
principalmente en aplicaciones de Inteligencia Artificial y Sistemas Expertos.
RFuzzy es un soporte de programación que se diferencia de otros por su
facilidad de uso para cualquier programador y porque es muy expresivo. Permite
representar, manejar y razonar con conceptos subjetivos como “alto”, “bajo”,
“rápido”, “lento”, etc.
RFuzzy se ha utilizado para potenciar la inteligencia de los robots. Por
ejemplo: RFuzzy se ha aplicado para la programación de robots participantes en
la ligamundial de fútbol de robots (RoboCupSoccer), que se viene desarrollando
desde1996 con la finalidad de desarrollar la robótica y la Inteligencia Artificial.
Inteligencia
de los robots
Además de aplicarse para detectar emociones en las conversaciones humanas,
RFuzzy se ha utilizado asimismo para potenciar la inteligencia de los robots.
En este caso concreto, RFuzzy se ha aplicado para la programación de robots
participantes en la liga mundial de fútbol de robots (RoboCupSoccer), que se
viene desarrollando desde 1996 con la finalidad de desarrollar la robótica y la
Inteligencia Artificial. La experiencia está recogida en el libro Robot Soccer,
Inteh, Croatia, 2010, editado por Vladan Papic.
Problema de
Torres De Hanoi
El problema de las torres de Hanoi consiste en mover un conjunto de discos
de un palo a otro palo utilizando un palo auxiliar situado en medio. Las reglas
para mover los discos son las siguientes:
- No se puede mover más de un disco en cada ocasión.
- No puede quedar un disco de menor radio debajo de un disco de mayor
radio.
- Mover el conjunto de discos se puede ver como: mover N-1 discos del palo izquierdo al palo del medio, mover el disco sobrante del palo izquierdo al palo derecho y mover N-1 discos del palo del medio al palo derecho.
- hanoi(N)<-mover(N,izquierda,medio,derecha).
- mover(1,A,_,C)<-Pasar disco de A a C.
- mover(N,A,B,C)<-mover(N-1,A,C,B),
mover(1,A,C), mover(N-1,B,A,C).
Problema del Laberinto
- Necesitamos que nuestro comecocos salga de un laberinto.
- El comecocos es capaz de moverse a derecha, izquierda, arriba y abajo.
- Implementar en Prolog un programa que permita a nuestro comecocos buscar la salida de un laberinto cualquiera.
Laberinto:
El significado del laberinto que
debemos codificar es el de adyacencia deposiciones y el de accesibilidad o no
de las posiciones.
Ejemplo: una matriz de caracteres
Comecocos:
La información relevante del comecocos
a lo largo de la resolución del problema es su posición en el laberinto.
Estados:
El estado inicial será la entrada al
laberinto.
El estado final será la salida.
Transición de estados: (transiciones posibles, operadores)
Si los estados son las posiciones, una
transición de estados consiste en pasar de una posición a otra. Las posibles
acciones que podemos efectuar para pasar de un estado a otro son los
movimientos del comecocos: moverse arriba, moverse abajo, moverse a la derecha,
moverse a la izquierda
.
arriba(X1,Y1) = X1,Y2 tal que Y2 es
Y1-1
abajo(X1,Y1) = X1,Y2 tal que Y2 es
Y1+1
derecha(X1,Y1) = X2,Y1 tal que X2 es
X1+1
izquierda(X1,Y1) = X2,Y1 tal que X2 es
X1-1
Transición de estados: (restricciones)
Las restricciones nos marcan qué
estados son válidos y qué estados no lo son.
En nuestro problema, las restricciones
vienen impuestas por el laberinto: no se pueden exceder las dimensiones del
laberinto y nuestro comecocos sólo puede estar en posiciones que sean pasillo.
Por tanto, serán válidos los estados
que verifiquen:
- valido(X,Y) sii
- 0 <= X < columnas,
- 0 <= Y < filas,
- laberinto( X,Y ) = ‘pasillo’.
Consideraciones:
Atención con las restricciones que
hemos impuesto a la transición de estados
Implementación en Prolog:
Representación:
% laberintos de ejemplo
% sintaxis:
% laberinto( Num, Lab )
% Num --> número de laberinto
% Lab --> matriz bidimensional de
caracteres que representa al laberinto
% entrada( Num, X, Y )
% Num --> número de laberinto
% X --> coordenada x de la entrada
al laberinto Num
% Y --> coordenada y de la entrada
al laberinto Num
% salida( Num, X, Y )
%Num --> número de laberinto
% X --> coordenada x de la salida
del laberinto Num
% Y --> coordenada y de la salida
del laberinto Num
Implementación en Prolog:
Representación:
% Nota:
%laberinto(1,[
"####### ######",
"##### #######",
"# ### #### ###",
"# ### # ###",
"# ###### ###",
]).
entrada(1,7,0).
salida(1,1,6).
un espacio en blanco (caracter 32)
representa pasillo
un carácter distinto del blanco
representa pared
Implementación en Prolog:
Transición de estados: (transiciones posibles,
operadores)
% Operadores de búsqueda
% sintaxis:
% mover( Mov, X1, Y1, X2, Y2 )
% Mov = {arr|aba|izq|der} -->
nombre del movimiento
% X1 --> coordenada X actual
% Y1 --> coordenada Y actual
% X2 --> coordenada X de la posición
a la que se llega con el movimiento seleccionado
% Y2 --> coordenada Y de la
posición a la que se llega con el movimiento seleccionado
% Nota:
% X1,Y1 = estado actual
% {arr|aba|izq|der} = operadores
% X2,Y2 = estado siguiente
mover( arr, X1, Y1, X1, Y2 ):- Y2 is
Y1 - 1.
mover( izq, X1, Y1, X2, Y1 ):- X2 is
X1 - 1.
mover( aba, X1, Y1, X1, Y2 ):- Y2 is
Y1 + 1.
mover( der, X1, Y1, X2, Y1 ):- X2 is
X1 + 1.
Bibliografía
(s.f.).
Obtenido de http://es.scribd.com/doc/104202187/Aplicaciones-desarrolladas-en-Prolog
(s.f.).
Obtenido de http://www.tendencias21.net/Una-aplicacion-informatica-reconoce-las-emociones-por-el-analisis-de-una-conversacion_a5052.html
No hay comentarios:
Publicar un comentario