INTELIGENCIA EN REDES DE COMUNICACIONES · Java, diseño e implementación de un agente, búsqueda,...
Transcript of INTELIGENCIA EN REDES DE COMUNICACIONES · Java, diseño e implementación de un agente, búsqueda,...
INTELIGENCIA EN REDES DE
COMUNICACIONES
Trabajos de la asignatura
Curso 11-12
Departamento de Ingeniería Telemática
Universidad Carlos III de Madrid
- i -
INTELIGENCIA EN REDES DE COMUNICACIONES
Trabajos de la asignatura
Curso 11-12
Julio Villena Román
Raquel M. Crespo García Departamento de Ingeniería Telemática
Universidad Carlos III de Madrid {jvillena, rcrespo}@it.uc3m.es
ÍNDICE
1. El coche inteligente. .................................................................. 1 Daniel Asegurado Turón
Si alguna vez has soñado con tener un coche como KITT, el coche fantástico, ese sueño podría hacerse realidad en un futuro no muy lejano. El sueño del coche fantástico es una realidad que está emergiendo con fuerza en varios países, incluido España. El objetivo del presente documento es realizar un recorrido por la historia del automóvil hasta llegar a los considerados coches inteligentes, donde nos detendremos a analizar los diferentes proyectos que trabajan con esta idea.
Palabras clave: Coche autónomo, automatización de vehículos, autoconducción, Mecatrónica, radar, LIDAR, GPS, visión artificial, eye tracking, estereoscopía.
2. Sistemas expertos: MYCIN ...................................................... 11 Ainhoa Sesmero Fernández, Sandra Pinero Sánchez
En este documento se explica lo que es un sistema experto, sus principales usos y en concreto hablaremos del sistema MYCIN. Uno de los primeros sistemas expertos para la detección y tratamiento de enfermedades de la sangre.
Palabras clave: Sistemas expertos (SE), aplicaciones en medicina, MYCIN, medicina, organismos, conocimiento.
- ii -
3. Diseño e implementación de un agente inteligente Mario A.I. .. 19 Yuchen Du, Virginia Izquierdo Bermúdez
En este artículo se detalla el diseño y la implementación de un agente inteligente capaz de jugar al videojuego de Mario así cómo las técnicas utilizadas para este diseño.
Palabras clave: Árbol de decisión, agente inteligente, Mario, enemigos, agente, inteligencia, escenario.
4. Jugador virtual de póker Texas Hold’em ................................. 29 Alberto Álvarez Polegre, Lucas Bernalte Pérez, David Díaz Chinea
El póquer es un juego de cartas de los llamados de "apuestas", en los que los jugadores, con todas o parte de sus cartas ocultas, hacen apuestas sobre una puja inicial, recayendo la suma total de las apuestas en el jugador o jugadores con la mejor combinación de cartas. Este trabajo hace un diseño de un jugador virtual de póker Texas Hold’em.
Palabras clave: Póker, Texas Hold’em, probabilidad, jugada, mano, estrategia.
5. Inteligencia artificial en el mundo de la aviación ..................... 37 Daniel Ruesga Ibañez, Hector Molla Ruiz
En este documento vamos a realizar un estudio del impacto que ha tenido la inteligencia artificial en el mundo de la aviación moderna. Nos centraremos de forma especial en los sistemas de pilotaje automático disponibles en los aviones y su avance hasta los vehículos no tripulados (UAVS).
Palabras clave: Sistemas expertos, aviación, piloto automático, navegación, vuelo, UAV.
6. Sistemas Expertos en meteorología ......................................... 45 Carlos Lentisco Sánchez, Tania Romero Rodríguez
Las aplicaciones basadas en inteligencia artificial son innumerables y van desde la biomedicina o educación hasta la predicción de las condiciones meteorológicas que realizan los sistemas expertos, objeto de estudio y razón de ser de este documento. Esta es la razón que justifica la búsqueda del ser humano por predecir fiablemente las condiciones meteorológicas. A lo largo de este documento nos introduciremos más en los sistemas expertos repasando su evolución histórica hasta nuestros días para abordar posteriormente y con mayor profundidad un ejemplo de estos sistemas. Centrándonos en el sistema Prometeo.
Palabras clave: Inteligencia, meteorología, sistemas expertos, predicción meteorológica.
- iii -
7. Traducción automática. Técnicas y aplicaciones ...................... 53 Isabel Cuadrado Gutiérrez, David Ferrer Figueroa
En este texto se aborda un tema de gran relevancia en la actualidad, el concepto de la traducción automática. Se analizará esta área desde su origen hasta la actualidad, tratando la evolución de las distintas técnicas empleadas para obtener la mayor calidad posible en las traducciones. Asimismo, en el trrabajo se hace un breve repaso a las aplicaciones más utilizadas y al desarrollo futuro previsto en este campo teniendo en cuenta, entre otros factores, la rentabilidad del negocio y la calidad de la traducción.
Palabras clave: Inteligencia artificial, Traducción automática, algoritmo de corpus.
8. Resolución de Puzzles Deslizantes ........................................... 61 Lara Rojo Celemín, Iván Suárez Morejudo
En 1878, Sam Loyd daba un premio de $1.000 a quien fuera capaz de resolver su famoso 14-15 Puzzle. Se trataba de un puzzle deslizante de 16 piezas que no tenía solución, lo que hizo que muchas personas se volvieran locas tratando de resolverlo. En este trabajo tratamos de presentar diferentes algoritmos para resolver el 15-Puzzle desde el punto de vista de la Inteligencia Artificial. Para ello, utilizamos el algoritmo de búsqueda en árboles A*, del que daremos una visión general que luego particularizaremos a nuestro caso del 15-Puzzle. Aunque en este trabajo sólo nos hemos centrado en resolver el rompecabezas de 16 piezas, los algoritmos explicados pueden utilizarse para resolver cualquier puzzle deslizante n x n con solución.
Palabras clave: Puzzles, Algoritmos, permutaciones pares, heurística, Inteligencia Artificial, resolución humana, puzzles deslizantes, 15-puzzle, Sam Loyd, Algoritmo A*, herística, Turing.
9. Desarrollo de un agente autónomo jugador de Super Mario .... 70 Adrián Amor Martín, Cristina García Muñoz
En este documento se va a detallar cómo realizar un agente, basado en árboles de decisión, que sea capaz jugar de forma autónoma al juego Super Mario en el marco del concurso Mario AI 2011.
Palabras clave: Agente, árboles de decisión, inteligencia artificial, Super Mario.
10. Implementación de un Agente para un jugador de Mario A.I. .. 78 Alejandro Pérez Cruz, David de la Horra Iglesias
En este documento presentamos una posible implementación de un agente que pueda jugar al juego SuperMario Bross. con una cierta inteligencia autónoma.
- iv -
Palabras clave: Algoritmos de búsqueda, lenguaje de programación Java, diseño e implementación de un agente, búsqueda, inteligencia artificial, agentes.
11. Robot de Robocode ................................................................. 86 Felipe Llinares López, Juan José Torres García
En esta memoria describimos una implementación que hemos realizado de un robot de competición para el programa Robocode.
Palabras clave: Algoritmos, Rendimiento, Diseño, Robocode.
12. Minería de Datos .................................................................... 94 Óscar Palomo Miñambres
En este artículo analizaremos las ideas básicas que sustentan el Data Mining y, más concretamente, la utilización de árboles de decisión como herramienta estadística avanzada. Presento también un ejemplo ficticio de la aplicación de estas técnicas: predecir clientes que tienen un alto porcentaje de impagos.
Palabras clave: Minería de Datos, árboles de decisión, impagos, predicción.
El coche inteligente En busca de mayor seguridad, sostenibilidad y confort
Daniel Asegurado Turón Universidad Carlos III de Madrid
Leganés, Madrid, España
RESUMEN
Si alguna vez has soñado con tener un coche como KITT, el coche
fantástico, ese sueño podría hacerse realidad en un futuro no muy
lejano. El sueño del coche fantástico es una realidad que está
emergiendo con fuerza en varios países, incluido España. El
objetivo del presente documento es realizar un recorrido por la
historia del automóvil hasta llegar a los considerados coches
inteligentes, donde nos detendremos a analizar los diferentes
proyectos que trabajan con esta idea.
Palabras clave
Coche autónomo, automatización de vehículos, autoconducción,
Mecatrónica, radar, LIDAR, GPS, visión artificial, eye tracking,
estereoscopía
1. INTRODUCCION Todos hemos tenido envidia del mítico Michael Knight cuando,
con sólo una orden de voz llamaba a KITT, su coche fantástico,
para que le fuese a recoger allá donde se encontrase. KITT no sólo
era capaz de conducir autónomamente, sino que era capaz de
reaccionar a todo tipo de peligros a los que se enfrentase gracias a
una supercomputadora integrada dotada de inteligencia artificial
(cerebro), que era capaz de interpretar los datos procedentes de
los diversos sensores de sonidos, imágenes e incluso olores (los
órganos de los sentidos). Hasta era capaz de hablar. En definitiva,
un coche con el comportamiento de un ser humano.
Durante muchos años, esta idea del automóvil no ha sido más que
mera ciencia ficción. Sin embargo, la realidad hoy es bien
diferente. En los casi treinta años que separan la emisión de la
legendaria serie de la actualidad, se han realizado grandes
progresos en el estudio del coche inteligente. Organismos
oficiales, como la Unión Europea, fabricantes de automóviles,
como Volvo, o incluso compañías de otros sectores ajenos al
motor, como es el caso de Google, se han lanzado a la carrera por
conseguir el coche del futuro.
¿Cuál es el interés por obtener un coche de estas características?
Siguiendo con la analogía del coche fantástico, el principal interés
sigue siendo salvar vidas. Mientras que KITT se preocupaba de
salvarle la vida a su compañero Michael, el objetivo de los
organismos institucionales como la Unión Europea es reducir el
número de muertes al volante. Según la DGT [1], en el primer
semestre de 2011 ya se contabilizaban 986 víctimas mortales por
accidentes en la carretera (no están incluidas las víctimas de
lesiones graves o leves en el total de accidentes). En cifras
relativas, en Europa murieron 62 personas por millón de
habitantes el pasado 2010, según el informe del ETSC sobre
seguridad vial [2]. Aunque la cifra vaya en descenso en los
últimos años, sigue siendo demasiado elevado el número de
personas que pierden la vida en accidentes de tráfico, por lo que
es necesario la puesta en marcha de proyectos que trabajen por
aumentar la seguridad y evitar el mayor número posible de
siniestros. Con el coche inteligente podríamos mejorar en
cuestiones de seguridad gracias a la incorporación, por ejemplo,
de sistemas de alerta ante el alejamiento involuntario del carril,
detectores de peatones o sistemas de control del conductor que
sean capaz de reaccionar si el conductor se duerme al volante.
Por otro lado, el coche inteligente tiene que velar por la mayor
eficiencia energética posible. Con el creciente número de coches
en el mundo (sólo en 2010 se fabricaron más de 58 millones en
todo el mundo según el informe del OICA [3]), y la cada vez más
escasa cantidad de recursos energéticos, debida en gran parte a la
crisis del petróleo, exigen que los nuevos vehículos gestionen más
eficientemente las fuentes de energía con las que cuente. Las
propias instituciones gubernamentales exigen, para cumplir con
las normativas de sostenibilidad y respeto del medio ambiente,
que además se reemplacen los modelos más antiguos por nuevos
que sean más ecológicos. En España, un 13% del parque
automovilístico supera los 20 años de antigüedad según el último
informe de la DGT [4], por lo que un gran número de coches
deberá ser renovado en los próximos años. En este punto, el coche
inteligente juega también un papel crucial, pudiendo dotársele de
la capacidad para controlar el consumo de forma autónoma. Los
Figura 1. KITT, el coche fantástico
- 1 -
nuevos coches eléctricos y los futuribles coches de hidrógeno u
otras fuentes de energía limpias, exigirán aún más si cabe una
gestión eficiente de la energía, y el desarrollo del mismo
incentivará la creación de coches cada vez más sostenibles.
Al automóvil, que ha vivido grandes transformaciones desde su
invención, le llega por tanto el momento de cobrar inteligencia.
Para ello, siguiendo el prototipo de KITT, es necesario
incrementar la capacidad de percepción (mejorar los órganos de
los sentidos para adquirir más información del exterior) y dotarle
de un cerebro que controle, analice y sea capaz de decidir
autónomamente. Nuevos medidores no sólo de mayor precisión de
los niveles internos del automóvil, como tradicionalmente se ha
venido desarrollando, sino para incorporar nuevas funcionalidades
como detectores de obstáculos para el aparcado automático,
detectores de otros objetos móviles -como otros vehículos- para
aumentar la seguridad en el adelantamiento, o detectores de
posición para el ambicioso plan de la autonavegación. Todo ello,
una vez más, para facilitarle la vida un poco más al ser humano
del siglo XXI.
El presente documento analizará el concepto de coche inteligente,
como el resultado de la incorporación de elementos de
inteligencia artificial en el automóvil, según el siguiente esquema:
- Sección 1 presenta una introducción al tema de la
inteligencia artificial aplicada al automóvil y motiva el
estudio realizado en este informe.
- Sección 2 realiza una breve reseña histórica de la
evolución del automóvil y de la incorporación de
elementos de inteligencia artificial en el mismo.
- Sección 3 analiza las distintas tecnologías en las que
actualmente trabaja la iniciativa i2010 Intelligent Car
Initiative, promovida por la Comisión Europea.
- Sección 4 aborda el concepto de autoconducción, donde
se presentarán diferentes proyectos que trabajan en
conseguir coches que se conduzcan solos. Una especial
atención se prestará al proyecto de Google, ya que está
actualmente en marcha en Estados Unidos, y al proyecto
que los compañeros de la Universidad Carlos III están
desarrollando en esta materia.
- Sección 5 valora el futuro de los coches inteligentes
para la sociedad en los próximos años, desde el punto
de vista del autor del documento.
2. HISTORIA Para entender con mayor detalle hacia dónde va dirigida la carrera
por el coche del futuro, es interesante hacer un breve recorrido
por la evolución del automóvil y repasar los avances que se han
ido desarrollando en la senda de la automatización desde su
invención hasta los modelos contemporáneos y los nuevos coches
autónomos.
2.1 El automóvil clásico Aunque hubo vehículos a vapor que se pueden considerar los
precursores del automóvil (como el invento de Cugnot en torno a
1769, o el modelo de Murdoch), se considera a Karl Benz el
inventor del automóvil moderno, con la incorporación de la
combustión por gasolina. El primer modelo de Benz, el Benz
Patent-Motorwagen (representado en la Figura 2), al igual que los
modelos que se venían desarrollando paralelamente a finales del
siglo XIX, no dejaba de ser un mero carro (más bien un triciclo
grande) propulsado por un motor.
Figura 2. Benz Patent-Motorwagen (1885)
Ya antes del invento de Benz, la idea del coche eléctrico estaba
desarrollándose. Los primeros coches eléctricos se remontan a
1828, cuando el húngaro Ányos Jedlik inventa el motor eléctrico y
crea el primer modelo de coche propulsado por dicho motor.
Diversos ingenieros trabajan en la idea del coche eléctrico hasta
que alrededor de 1839, el escocés Robert Anderson inventa el
primer coche eléctrico impulsado por baterías eléctricas no
recargables. Sin embargo, la abundancia de carburantes líquidos y
la eficiencia de los motores de gasolina hacen que el coche
eléctrico quede aparcado hasta la actualidad, cuando la necesidad
de nuevas alternativas a los derivados del petróleo hace que se
recupere esta vieja idea de coche eléctrico.
La etapa comprendida entre los últimos años del siglo XIX y la
primera mitad del siglo XX está cargada de avances en la
producción de automóviles. Entre ellos, la invención de la cadena
de montaje en 1910 de la mano de Henry Ford. A partir de este
momento, gracias a la producción industrial de modelos de coches
y su uso extendido para todas las clases sociales, la industria del
automóvil adquiere una importancia vital en la economía de los
países y se convierte en una de las industrias en las que más
recursos se invierten en investigación y desarrollo.
Los avances más destacados en la industria del automóvil durante
el siglo XX se orientan principalmente en la mejora del motor.
Las distintas empresas automovilísticas inician la guerra por
conseguir los motores más potentes y eficientes, y se investigan en
los motores de explosión, o comúnmente conocidos como diesel.
En los últimos años del siglo pasado y los primeros del XXI,
etapa considerada como la edad moderna del automóvil, aparecen
las primeras automatizaciones dentro del coche. A continuación,
se presentan algunas de estas incorporaciones:
El elevalunas eléctrico: mediante un mecanismo
eléctrico controlado por el usuario gracias a un botón de
dos posiciones, se suben y bajan las ventanillas del
automóvil, sustituyendo así a la tradicional manivela
manual.
El airbag: sistema de bolsas de aire que
automáticamente se dispara cuando el automóvil sufre
un choque brusco. Mediante un sistema electro-
- 2 -
mecánico, el coche es capaz de saber cuándo debe
activar el airbag y cuándo no.
El climatizador: un sistema de calefacción que mantiene
la temperatura interna del vehículo a la temperatura
deseada por el conductor. Cuenta con un sensor de
temperatura gracias al cual determina la temperatura del
habitáculo y si debe proporcionar mayor calor o frío
para mantener la temperatura dentro de los márgenes
fijados por el usuario.
El ordenador de abordo: con mayor o menor
sofisticación, los nuevos automóviles incorporan una
pantalla que facilita información sobre kilómetros
recorridos, consumo medio cada 100km, velocidad
media, etc.
Aviso de cinturón de seguridad: mediante sensores de
presencia en los asientos, y sensores en el cierre del
cinturón de seguridad, el sistema de alarma detecta,
cuando el coche arranca el motor, los asientos que están
ocupados y si en dichos asientos sus pasajeros tienen
abrochado el cinturón de seguridad. En caso contrario,
se activa una alarma sonora y visual, indicando que hay
pasajeros sin cinturón de seguridad.
Aviso de puertas abiertas: mediante un sistema de
sensor de cierre, similar al del aviso de cinturón de
seguridad, cuando el motor se enciende un piloto avisa
de si hay alguna puerta mal cerrada o abierta.
Subida automática del volumen en función de la
velocidad: al superar determinada velocidad punta, el
coche sube automáticamente el volumen del reproductor
de música, avisando al conductor de que está
sobrepasando el límite de velocidad, o incluso
despertarte el caso de que el aumento de velocidad se
deba a que el conductor se ha dormido.
El limpiaparabrisas automático: gracias a un sensor de
lluvia en el parabrisas, la velocidad y frecuencia de
barrido de los limpiaparabrisas se ajustan
automáticamente de acuerdo con la cantidad de lluvia
detectada.
Aunque no puedan considerarse como elementos de inteligencia
artificial como tal en el automóvil, estas sutiles incorporaciones
en los coches modernos son, por así decirlo, antecedentes de los
proyectos que hay en marcha ya para dotar a los coches de
inteligencia. El auge de las nuevas tecnologías y la aparición de la
conocida Sociedad de la Información, afectan a todos los ámbitos
de la vida moderna. El automóvil, herramienta que empleamos a
diario, no podía ser menos y, dado el enorme capital económico
que genera la industria del automóvil, cualquier mejora en este
aspecto proporcionará grandes beneficios económicos, al margen
de cualquier otro progreso en sostenibilidad, seguridad o confort.
2.2 La automatización en el automóvil Con el auge de las nuevas tecnologías, surgen también nuevas
ramas en la ingeniería. Surge además la llamada ingeniería
Mecatrónica, que engloba los campos de las ingenierías mecánica,
electrónica, de control e informática, con el objetivo de diseñar
productos o procesos inteligentes, involucrando sistemas de
control en su diseño.
El origen de la Mecatrónica se remonta a las investigaciones en el
área de la Cibernética de Turing (1936), Wiener y Morthy (1948)
y Devol (1954) y los autómatas programables de Bedford
Associates en 1968. En la década de los setenta, la Mecatrónica se
centra en la tecnología de servomecanismos, empleada en
productos como puertas automáticas. En los años ochenta, en
pleno auge de la tecnología de la información, los
microprocesadores empiezan a ser introducidos en los sistemas
mecánicos para mejorar su desempeño. Las máquinas de control
numérico y los robots se volvieron más compactos, y las
aplicaciones automotrices como los mandos electrónicos del
motor y los sistemas anticerrado y frenando se hicieron extensas.
Por los años noventa, se agregó la tecnología de comunicaciones,
creando productos que podían conectarse en amplias redes. Al
mismo tiempo, se están usando novedosos microsensores y
microactuadores en nuevos productos como los sistemas
microelectromecánicos como los diminutos acelerómetros de
silicio que activan las bolsas de aire de los automóviles. El
concepto de automatización en el automóvil viene ligado
precisamente a esta rama de la ingeniería y en la aplicación
práctica de la Mecatrónica en técnicas que asistan al conductor en
el control del vehículo.
En este punto en el que se ha repasado brevemente la historia del
automóvil y la aparición de distintas técnicas de automatización
de la mano de la Mecatrónica, es necesario hacer una clasificación
de los nuevos vehículos, en función de la inmersión de la
inteligencia artificial en su producción. Así, podemos diferenciar
tres tipos de vehículos:
Vehículos inteligentes: aquellos que emplean técnicas
de automatización de la Mecatrónica, y en particular de
la inteligencia artificial, para disminuir o facilitarle las
responsabilidades del manejo del automóvil al
conductor. En general, las características inteligentes de
estos vehículos hacen referencia a tareas de baja o
media dificultad. El control del automóvil recae
totalmente en el conductor y la tarea fundamental de la
inteligencia del vehículo es asistirle.
Existen muchas técnicas de automatización aplicadas al
automóvil. Principalmente se clasifican en tres
categorías:
o Asistencia sensorial (informativa): informan
al conductor sobre eventos que ocurren y de
los que el conductor puede que no se dé
cuenta. Algunos ejemplos son:
Detectores de obstáculos
Visión nocturna (con detección de
peatones)
Sistema de aviso para el cambio de carril
Detección anticipada de colisión
Faros adaptativos
Reconocimiento de señales de tráfico
o Asistencia para actuación (correctiva):
modifican las instrucciones del conductor
para ejecutarlas de una forma más eficiente.
Entre las técnicas más conocidas están:
ABS (sistema de antibloqueo de frenos)
- 3 -
TCS (sistema de control de tracción)
AWD (motor a las cuatro ruedas)
ESC (control electrónico de estabilidad)
DSR (respuesta a la dirección dinámica)
o Asistencia sistémica: introducen mejoras que
no se incluyen en las anteriores. Son por
ejemplo:
Aparcamiento automático
Asistencia para el control de distancias
Dead man's switch: sistemas para detener
el coche de forma segura en caso de que el
conductor quede inconsciente
La Comisión Europea está llevando a cabo un
programa de desarrollo de coches inteligentes, en el
cuál se engloban diferentes proyectos de universidades,
centros de investigación y empresas del mundo
automovilístico. Entre los objetivos de este proyecto
están el control de crucero autónomo, sistemas de alerta
para el cambio de carril o estudios para atacar el
problema del conductor somnoliento.
En la siguiente sección se presentarán en detalle en qué
consiste este programa y que tecnologías se están
investigando para el futuro coche inteligente.
Vehículos semiautónomos: aquellos que emplean las
técnicas de automatización para tareas de mayor
dificultad, especialmente en cuestiones relacionadas
con la navegación. El control del automóvil recae
principalmente en el conductor pero parte de la
responsabilidad se le cede al control automático. El
coche semiautónomo es un paso intermedio entre el
coche inteligente y el coche totalmente autónomo.
Vehículos autónomos o robóticos: aquellos que
confían por completo en el sistema de automatización
del vehículo. Se les conoce también por el nombre de
driverless, es decir, coches sin conductor. El vehículo
sustituye por completo las funciones que
tradicionalmente llevaba a cabo el conductor y, como el
propio nombre sugiere, conduce “solo”. El vehículo
autónomo es capaz de percibir el entorno (a imitación
de los sentidos humanos) mediante laser, radar,
LIDAR, GPS y visión artificial, y navegar por sí
mismo. El papel del humano en este caso se limita a
elegir un destino, pero ya no se le requiere realizar
ninguna operación mecánica sobre el vehículo.
2.3 El coche autónomo Aunque en el apartado anterior se han descrito las principales
características de los vehículos autónomos y posteriormente se
presentarán diferentes proyectos que están trabajando en el
desarrollo del coche autónomo, es interesante realizar también un
breve recorrido por la historia del coche autónomo.
La primera idea que se conoce sobre coches autónomos
corresponde al diseño Futurama, del americano Normal Bel
Geddes y financiado por General Motors, que fue presentado en la
Exposición Universal de Nueva York de 1939. El proyecto
presentaba coches eléctricos, alimentados por circuitos integrados
en la calzada, y que eran controlados por radio.
Aunque la idea se remonta a los años treinta, no es hasta los
ochenta cuando se empiezan a implementar los primeros modelos
reales, no sólo teóricos. En estos años, Mercedes-Benz presenta
una caravana robótica capaz de alcanzar hasta 100 km/h en
carreteras sin tráfico. El éxito del modelo animó a la Comisión
Europea a lanzar el proyecto EUREKA-Prometheus (1987-1995)
para el desarrollo de vehículos autónomos, el mayor proyecto de
I+D en el campo de los vehículos autónomos hasta el momento.
Al mismo tiempo en Estados Unidos el Departamento de Defensa
realiza sus propios experimentos en el llamado Autonomous Land
Vehicle (ALV) y lleva a cabo la primera demostración de
vehículos capaces de seguir un camino utilizando LIDAR, visión
artificial y control robótico autónomo para controlar un vehículo
robótico hasta los 30 km/h. En 1987, consiguen que el ALV sea
capaz de viajar autónomamente fuera de carretera mediante un
sistema de navegación autónomo basado en sensores. El nuevo
modelo es capaz de viajar 600m a 3 km/h en terrenos complejos
con fuertes pendientes, barrancos, grandes rocas y vegetación.
Figura 3. DARPA: Autonomous Land Vehicle (ALV)
En 1994 y de vuelta a Europa, los vehículos robóticos VaMP y su
gemelo Vita-2 logran circular miles de kilómetros por una
autopista parisina de tres carriles, con tráfico denso, alcanzando
velocidades de hasta 130 km/h con una mínima intervención
humana. El vehículo empleaba visión artificial para reconocer
obstáculos que se podían mover rápidamente, como otros coches,
y poder realizar cambios de carril a izquierda o derecha evitando
colisionar con otros vehículos. El éxito del proyecto dio paso a
muchos otros proyectos en los siguientes años que demostraron
ser capaces de recorrer mayores distancias a mayores velocidades.
En 1996, el proyecto ARGO consigue completar una ruta de 2000
km a lo largo de autopistas del norte de Italia durante 6 días y con
una velocidad media de 90 km/h. Lo sorprendente del proyecto
fue que el vehículo consiguió funcionar en modo totalmente
automático el 94% del tiempo. El automóvil contaba sólo con dos
cámaras detectoras de blancos y negros de bajo coste y utilizaba
algoritmos de visión estereoscópica para entender el entorno (se
guiaba gracias a que la carretera es negra y las líneas delimitantes
son blancas) en contraposición a la aproximación laser/radar de
los proyectos anteriores en el mismo campo.
Si hasta finales del siglo pasado, todos estos proyectos de coches
autónomos no eran más que proyectos, con el cambio de milenio
se han conseguido implantar sistemas de autoconducción en
distintos lugares del mundo, como puede ser el caso del
ParkShuttle en Rotterdam, un sistema de minibuses que funcionan
sin conductor. En 2010 además, con motivo de la Exposición
- 4 -
Universal de Shanghai, cuatro furgonetas eléctricas realizaron el
primer viaje intercontinental sin conductor, saliendo desde Italia y
alcanzando China.
3. EL COCHE INTELIGENTE Los problemas derivados de incremento del tráfico en Europa,
tales como congestión en las redes de carreteras y áreas urbanas,
el daño al medio ambiente y a la salud pública, el incremento del
gasto energético y el elevado número de accidentes (40.000
personas mueren al año en las carreteras europeas) han llevado a
la Comisión Europea a lanzar una iniciativa en favor del coche
inteligente para impulsar su implantación en los nuevos coches
europeos. Entre los objetivos que persiguen alcanzar con los
nuevos sistemas inteligentes están aumentar la seguridad,
ayudando a los conductores a prevenir o evitar accidentes y
mitigando las consecuencias de éstos, y reducir el gasto
energético, facilitando a los conductores información en tiempo
real sobre el estado del tráfico para evitar zonas congestionadas y
optimizando el funcionamiento del motor para mejorar la
eficiencia energética global.
La iniciativa europea, i2010 Intelligent Car Initiative, presenta
una serie de tecnologías en las que se está trabajando o ya están
disponibles para los usuarios, y que se clasifican en tres
categorías: sistemas de ayuda a la conducción, sistemas
cooperativos para la seguridad en carretera y sistemas basados en
localización para la seguridad en carretera.
3.1 Sistemas de ayuda a la conducción
Los sistemas de ayuda a la conducción buscan en última instancia
ayudar al conductor a evitar accidentes o a mitigar el daño
causado por estos. Son los sistemas conocidos como eSafety a
bordo. A continuación, vamos a analizar con más detalle algunas
de las tecnologías más interesantes relacionadas con estos
sistemas:
3.1.1 Sistema antibloqueo de frenos (ABS) Como su propio nombre indica, el sistema antibloqueo de frenos
(ABS) evita que las ruedas se bloqueen cuando el conductor pisa
el freno. Esto se consigue modulando automáticamente la presión
ejercida sobre la rueda gracias a una bomba que se incorpora a los
circuitos del líquido de freno y a unos detectores que controlan las
revoluciones de las ruedas. Cuando los sensores detectan una
reducción repentina en las revoluciones de las ruedas (debida a
una frenada brusca), interpreta que las ruedas están a punto de
bloquearse, por lo que envían una señal al Módulo de Control del
sistema ABS, el cual reduce la presión ejercida sobre los frenos
(sin intervención del conductor). El sistema ABS se empleó por
primera vez en los años 70 y es uno de los sistemas inteligentes
más extendidos en la actualidad.
3.1.2 Control de crucero adaptativo (ACC) Este sistema cuenta con un detector radar de gran alcance, un
procesador de señales y un control longitudinal del vehículo para
mantener la distancia de seguridad con el vehículo de delante,
ajustando automáticamente la velocidad del vehículo. Si el
vehículo de delante frena, el sistema ACC hace que el vehículo
reduzca la velocidad para mantener la distancia de seguridad y,
cuando el otro vehículo vuelve a acelerar, automáticamente el
sistema ACC acelera hasta una velocidad programada.
Actualmente la mayoría de sistemas funcionan para una gama de
velocidades limitada y el objetivo de la iniciativa es hacer que el
sistema funcione a cualquier velocidad, incluso que sea capaz de
detener el coche por completo si la situación lo requiere.
Figura 4. Sistema de control de crucero adaptativo (ACC)
Aunque los sistemas ACC más comunes están basados en
detectores radar, existen también sistemas basados en láser,
aunque éstos tienen la limitación de no detectar correctamente al
coche de delante en caso de condiciones meteorológicas adversas.
Los sistemas ACC son infraestructuras totalmente independientes
y no necesitan de ninguna señal satélite para funcionar. Sin
embargo, estos sistemas pueden aprovechar también las señales
GPS para realizar mejores estimaciones. Por ejemplo, si el
vehículo de delante frena no por congestión del tráfico sino
porque se aproxima a una salida de la autopista, en lugar de frenar
como el sistema ACC convencional haría, gracias a la señal de
GPS que avisa de que el otro coche tomará la próxima salida, el
coche mantendría su velocidad normalmente.
Existen multitud de fabricantes que incorporan el sistema ACC
parcialmente (es decir, requieren la intervención del conductor a
partir de cierta velocidad), aunque BMW, Mercedes-Benz, Volvo
y Audi ya cuentan con modelos que incorporan sistemas ACC
capaces de detener al vehículo por completo.
La nueva generación de sistemas ACC incluirá también
información facilitada por el coche de delante, en lo que se
conoce como sistemas cooperativos. Pero para ello, hará falta un
acuerdo entre los distintos fabricantes y la estandarización del
sistema para la correcta comunicación entre vehículos.
3.1.3 Asistente de cambio de carril / Detector de
punto muerto Estos sistemas controlan en todo momento los puntos traseros del
vehículo que quedan fuera del alcance de la vista del conductor.
Cuando el conductor pretende cambiar de carril y acciona la luz
intermitente, el sistema se activa y, en caso de que los sensores
detecten que hay otro vehículo que el conductor no ha podido ver,
avisa del peligro de choque mediante una señal luminosa o
mediante vibración en el volante.
3.1.4 Sistema de control y alerta antisueño El sistema de control y alerta antisueño entran dentro de lo que
comúnmente se conoce por sistema de monitorización del
- 5 -
conductor, y se encargan de analizar la atención del conductor
sobre la carretera y detectar la somnolencia del mismo de
diferentes formas: atendiendo a las expresión facial, los
movimientos de manos y pies, analizando el parpadeo y la
posición de la cabeza o incluso las alteraciones del ritmo cardiaco.
Cuando el sistema, mediante alguna combinación de los factores
anteriores, entiende que el conductor está durmiéndose o
distrayéndose de la conducción, alerta al mismo mediante una
señal acústica, una fuerte señal luminosa o, en algunos vehículos,
tirando del cinturón de seguridad para con la presión captar su
atención.
Los primeros modelos, de la mano del fabricante Lexus,
monitorizaban la posición exacta y el ángulo de la cabeza del
conductor mientras el coche estaba en marcha. Si el sistema de
alerta de colisión (directamente relacionado con éste) detecta un
obstáculo delante del coche, y el sistema de monitorización
observa que la cabeza del conductor se ha mantenido fuera de la
atención de la carretera demasiado tiempo, se activan los sistemas
de aviso para evitar el choque. Toyota fue más allá e implantó un
sistema en el Toyota Crown de 2008 que era capaz de detectar si
el conductor se dormía analizando el movimiento de las pestañas.
Los nuevos modelos son más ambiciosos. Gracias a las imágenes
tomadas por la cámara, es posible realizar un seguimiento del
movimiento de los ojos. La técnica conocida como eye tracking
en inglés evalúa el punto donde se fija la mirada o también el
movimiento del ojo en relación con la cabeza. Los últimos
modelos de Mercedes-Benz monitorizan el nivel de fatiga y
somnolencia del conductor aplicando esta técnica.
Las cámaras que se utilizan para eye tracking contienen un sensor
CCD con diminutas células fotoeléctricas que registran la imagen,
cuyo número determina la resolución de la imagen. El sistema de
detección por tanto funciona enviando una señal infrarroja que se
refleja en los ojos del conductor y se captura por el sensor óptico.
Generalmente, se suelen emplear la señal reflejada en la córnea y
en el centro de la pupila para realizar el seguimiento de la visión
del conductor.
En estos sistemas, es fundamental que no sólo se analice el ojo en
sí (como por ejemplo en los sistemas de reconocimiento de retina)
sino en la dirección de la mirada. Por ello, además de analizar las
señales reflejadas en la zona del ojo (para poder detectar también
parpadeos o si el ojo está cerrado) es importante almacenar
información de la zona alrededor del ojo y también ángulos de
posicionamiento de la cabeza. Con esta información, el sistema es
capaz de calcular si la mirada se está fijando en la carretera o no,
aplicando geometría y una serie de márgenes donde la mirada
debería estar situada, y también, de los gestos de la cara,
comparando con modelos que la máquina haya aprendido o
contenga de fabricación, detectar síntomas de fatiga.
En la Figura 5 podemos ver los puntos que emplea un modelo de
Nissan para detectar síntomas de fatiga. El sistema monitoriza la
posición de determinadas zonas de la cara que, cuando superan un
umbral una serie de puntos, se considera que el conductor está
dormido y se activan los sistemas de alerta.
3.1.5 Sistema de protección de peatones y usuarios
vulnerables de la vía pública
Figura 6. Sistema de detección de peatones
Aunque aún no haya implementaciones en esta materia, sí hay un
especial interés en el seno de la iniciativa i2010 por impulsar un
sistema de protección de peatones y ciclistas. La idea de partida
de este sistema es similar a la que se viene empleando para evitar
colisiones con otros vehículos. Se trataría de instalar una serie de
sensores de diferentes tipos que vigilen la zona delantera del
vehículo y alerten de la presencia de usuarios vulnerables.
El sistema integraría un control para accionar de forma automática
el sistema de frenado para poder evitar la colisión. En caso de que
la colisión fuese inminente y no pudiera evitarse, el sistema
accionaría nuevos elementos de seguridad pasiva del coche, por
ejemplo airbags en el parachoques, elevación del capó del coche,
etc., que disminuyesen el riesgo de lesiones graves de las
víctimas.
La Figura 6 representa las mediciones realizadas por la tecnología
implementada por el proyecto de coche inteligente de la
Figura 5. Sistema de monitorización del conductor
- 6 -
Universidad Carlos III de Madrid. El sistema analiza no sólo
todos los peatones que rodean al vehículo sino que también debe
tener en cuenta los movimientos de éstos para poder determinar
quienes pueden presentar un problema de colisión con el
automóvil.
Especial interés recibe esta técnica no sólo como un sistema de
alerta del cambio involuntario del carril, sino por ser una técnica
que también será útil en el diseño del coche autónomo. Se trata de
un sistema que vigila la posición del vehículo dentro de un carril
y, en caso de que el conductor se salga o esté próximo a salirse y
el conductor no haya activado el intermitente, avisarle o, en los
modelos más autónomos, corregir la posición del vehículo
automáticamente hasta que el coche esté posicionado
correctamente dentro del carril. Los sistemas que simplemente
alertan al conductor se conocen como LDW (lane departure
warning) mientras que los que corrigen automáticamente la
posición se conocen como LKS (lane keeping system).
Figura 7. Sistema de aviso de cambio involuntario de carril
Los sensores empleados por estos sistemas se basan en sistemas
de vídeo (montados detrás del parabrisas para tener una visión
general en ángulo de los límites del carril), sensores láser (en la
parte delantera del vehículo) y sensores infrarrojos (detrás del
parabrisas o bajo el coche).
Los primeros modelos, como el Citröen de 2005, empleaban
infrarrojos para monitorizar las líneas pintadas en la carretera.
Cuando los sensores detectaban la presencia de la línea divisoria,
alertaban al conductor para que corrigiera la dirección.
Audi por su parte, desarrolla en 2007 un sistema basado en una
videocámara de espectro visible situada en el frontal del coche, y
que captura imágenes en el ángulo de visión del conductor para
estimar el carril. Además, incorpora ya un sistema en la dirección
que vibra en caso de salirse del carril, corrigiendo
automáticamente la dirección para que el vehículo retorne al
carril.
3.1.7 Visión nocturna Para aumentar la capacidad visual del conductor durante la noche,
se incorporan al vehículo un sistema de visión nocturna basado en
infrarrojos, con un alcance similar al de las luces largas. El
sistema no deslumbra, pues se trata de luz infrarroja, y la escena
iluminada se le muestra al conductor en una pantalla especial,
siendo capaz de percibir éste mejor posibles obstáculos o
vehículos distantes, adelantándose a situaciones peligrosas y así
poder reaccionar con mayor rapidez.
3.1.8 Sistema de reconocimiento de señales de
tráfico La detección de señales puede ser útil para alertar al conductor de
posibles señales que se le escapen a la vista, pero es muy
importante para los coches autónomos. El sistema de
reconocimiento de señales se basa también en la visión artificial
para, dada una serie de imágenes tomadas desde la parte frontal
del coche hacia la carretera, es capaz de distinguir e interpretar
distintas señales de tráfico.
La localización de las señales no es trivial, ya que hay que
emplear modelos geométricos que tengan en cuenta el color y la
forma y debe funcionar ante condiciones luminosas muy diversas.
Además, el diseño de las señales no está totalmente estandarizado,
y las señales antiguas y modernas son bastante diferentes.
3.1.9 Otros sistemas Existen otras tecnologías recogidas en el proyecto europeo sobre
sistemas de ayuda a la conducción que sólo vamos a mencionar
sin entrar en más detalle:
Luces autoadaptables
Sistemas electrónicos de asistencia en la frenada
Control electrónico de estabilidad
Indicador de cambio de marcha
Sistemas de control de presión de neumáticos
3.2 Sistemas cooperativos para la seguridad
en carretera Más allá de la asistencia individualizada, los nuevos modelos
deben ser capaces de interactuar y comunicarse. El automóvil
pasaría a ser un elemento de una red de comunicaciones y se
podría gestionar la red de una forma eficiente, como ocurre con
las redes de telecomunicaciones. Con la cooperación entre
vehículos, la iniciativa europea pretende obtener una mayor
eficacia del transporte, maximizando la eficiencia de uso de las
infraestructuras disponibles, y además mejorar la seguridad. A
continuación se detallan algunas tecnologías relacionadas.
3.2.1 Gestión dinámica del tráfico Los paneles de señalización variable, o paneles luminosos, que
actualmente están desplegados por las carreteras de toda Europa,
ayudan al conductor a conocer en tiempo real el estado de las
carreteras y ofrecen información sobre rutas alternativas en caso
de accidente. Los mensajes de obligatoriedad, de aviso de peligro
o informativos que actualmente se envían a través de los paneles
de señalización pueden ser enviados a un receptor situado en el
interior del vehículo, facilitando la llegada de información útil al
usuario sin necesidad de que éste tenga que llegar a la carretera
que se encuentra con problemas de tráfico para conocer su estado.
Muchos GPS ya disponen de esta funcionalidad de controlar el
estado de las carreteras. Pero en la actualidad no deja de ser un
sistema meramente informativo. En una red futura, en la que los
coches cooperan entre sí para una gestión eficiente del tráfico, la
decisión de ruta debería gestionarse por elementos enrutadores
(similares a los routers de las redes de ordenadores) y así evitar
que ciertas zonas se congestionen.
3.2.2 eCall El sistema eCall incorporaría a la red de comunicaciones de
coches a los servicios de urgencia. En caso de accidente, el
- 7 -
sistema establecería una conexión de voz con el servicio de
emergencias 112, enviando la hora y lugar del accidente, las
características del vehículo afectado o incluso facilitar
información adicional sobre el conductor si fuese necesario
ponerse en contacto con los familiares. El ahorro de tiempo en
atender la emergencia supondría salvar la vida de muchos
afectados en accidentes que mueren debido a que no es posible
atenderles a tiempo.
Uno de los puntos negros en los que más accidentes se producen
es en las intersecciones. La iniciativa de la Comisión también
plantea actuar de forma cooperativa entre vehículos para aumentar
la seguridad en los cruces. Para ello, se proponen dos sistemas. El
primero, aviso de preferencia, que indique al conductor que ceda
el paso a la derecha en una pantalla y, en caso de que el conductor
no reaccione, avisarle del peligro de colisión. El segundo,
asistente de semáforos, recibiría la información del semáforo
inalámbricamente para que el coche adecúe la velocidad y poder
cruzarlo en verde.
3.2.4 Sistema de aviso de obstáculo o colisión Las soluciones que actualmente hay implementadas sobre la
detección de obstáculos son una extensión del sistema de control
de crucero adaptativo: utilizan también información obtenida por
detectores radar y generan avisos acústicos y visuales para alertar
al conductor de un peligro inminente.
Sin embargo, hacia lo que se está caminando es a utilizar en un
futuro radares de largo y corto alcance, sistemas LIDAR y
procesado de imágenes de vídeo en la detección, y contar con un
sistema de frenado automático, capaz de frenar a máxima
potencia, preparar los airbags o tensar los cinturones de seguridad
en caso de una colisión inminente.
Los sistemas LIDAR (Laser Imaging Detection and Ranging) que
se mencionan se posicionan como la tecnología de detección del
futuro más inmediato y es la tecnología que emplean por ejemplo
las pistolas láser de la policía para determinar la velocidad de los
vehículos que circular en el tráfico rodado. Estos sistemas
determinan distancias entre un emisor láser y un objeto utilizando
haces láser pulsados y midiendo el tiempo de retardo entre la
emisión del pulso y la detección de la señal reflejada (igual que el
radar pero con ondas de luz en vez de radio).
Entre las principales ventajas del LIDAR sobre el radar están: es
mucho más rápido; los haces de luz divergen menos que los de
ondas sonoras, que se dispersan y rebotan en el entorno, y por
tanto son más precisos en detección; son más económicos; puede
funcionar también de noche; y es más fácil de transportar y
mantener.
3.3 Sistemas basados en la localización para
la seguridad en carretera En el apartado anterior ya se presentaba la tecnología eCall en
materia de comunicar a los servicios de emergencias la posición
exacta del lugar donde se ha producido un accidente en carretera.
Además de este sistema, existen también proyectos que trabajan
con mapas de a bordo como sensores de posición para (al igual
que se utiliza el sensor radar para detectar obstáculos u otros
vehículos) predecir donde estará el coche momentos después,
pudiendo prever que le sucederá cuando llegue a dicho punto, si
hay algún corte de tráfico, o algún otro imprevisto en la carretera.
Todas estas medidas se recogen en la iniciativa eSafety, impulsada
por la Comisión Europea para mejorar la seguridad en la carretera.
4. AUTOCONDUCCIÓN Las mismas tecnologías que asisten al conductor en los coches
inteligentes, se toman desde una nueva perspectiva en los modelos
de coches autónomos. La técnica es la misma; la filosofía cambia.
En lugar de alertar al conductor para que reaccione, ¿por qué no
reaccionar autónomamente sin intervención del conductor? Con
esta idea se empieza a trabajar en el coche sin conductor,
aplicando estas tecnologías y delegando toda la funcionalidad del
conductor sobre la inteligencia artificial del vehículo.
En la actualidad existen ya varios modelos de vehículos
autónomos que funcionan sin problemas sin la necesidad de un
conductor. En este documento vamos a analizar dos proyectos
concretos: el modelo de Google, por ser el que más atención está
acaparando en el sector de los vehículos autoconducidos, y el
modelo que están desarrollando investigadores de la Universidad
Carlos III de Madrid, por ser parte de nuestra universidad.
4.1 El coche sin conductor de Google El proyecto que presenta Google en el ámbito del coche autónomo
está liderado por el ingeniero Sebastian Thrun, director del
laboratorio de inteligencia artificial de la Universidad de
Standford y coinventor de sistema Google Street View. El mismo
grupo de desarrollo de este prototipo ya ganó en 2005 un premio
del Departamento de Defensa norteamericano gracias al vehículo
robótico Stanley. Los coches sin conductor de Google son legales
en el estado de Nevada desde junio de 2011, convirtiéndose en el
primer estado que permite la circulación de vehículos autónomos
y convirtiendo al proyecto de Google como pionero en la
comercialización de estos modelos.
El sistema de Google combina información obtenida directamente
de Google Street View con software de inteligencia artificial.
Cuenta con diversos sensores: videocámaras dentro del vehículo
(que permiten controlar el movimiento del vehículo y detectar
peatones, ciclistas y semáforos), un sensor LIDAR en el capó del
coche (que permite al vehículo detectar a más de 60 m en todas
las direcciones y así crear un mapa 3D para el vehículo), sensores
radar en la parte delantera un sensor de posición adherido a una
de las ruedas traseras y que ayuda a localizar la posición del coche
en la carretera. Los vehículos además circulan a la velocidad
indicada por los mapas proporcionados por Google y lleva
Figura 8. Toyota Prius modificado para operar como
Google driverless car
- 8 -
instalado un sistema de control de distancias con sensores para
evitar colisionar con el vehículo delantero.
4.2 El proyecto de la UC3M La Universidad Carlos III de Madrid cuenta con un proyecto
propio en la carrera por el vehículo autónomo. El proyecto cuenta
con 3 modelos de vehículos: el IVVI, el iCab y el IVVI 2.0.
Figura 9. Vehículo Inteligente basado en Información Visual
(IVVI). Universidad Carlos III de Madrid
El IVVI (acrónimo en inglés de Vehículo Inteligente basado en
Información Visual) es el homólogo al coche desarrollado por
Google. Cuenta con un sistema estéreo blanco y negro, con
cámaras de barrido progresivo para poder captar imágenes en
movimiento y evitar así los problemas inherentes al vídeo
entrelazado, además de una cámara a color para otros temas cómo
la detección de señales de tráfico. Para detectar obstáculos como
peatones u otros vehículos en condiciones de visibilidad adversas,
cuenta con una cámara de infrarrojo lejano capaz de distinguir
objetos por el calor desprendido. En cuanto al interior, el sistema
cuenta con tecnología de monitorización del estado del conductor,
empleando para ello una cámara infrarroja. El cerebro del coche
viaja en el maletero, en donde se hayan dos PC encargados del
procesamiento de los sistemas de visión por computador. Para
conocer el estado del vehículo, éste incorpora además un sistema
GPS.
Entre las tecnologías que se incorporan en este proyecto están:
Sistema de alerta ante el alejamiento involuntario del
carril: se trabaja con imágenes que simulan una vista
aérea de la vía y se acompañan de algoritmos de
calibración automática. Se distinguen los carriles por la
discontinuidad de los niveles de gris de la imagen.
Sistema de detección de peatones: dada la enorme
diversidad de apariencia de los peatones y los cambios
en la forma de estos entre imágenes sucesivas, se
emplea un algoritmo basado en los Contornos Activos
(técnica empleada para delinear el contorno de un
objeto en una imagen 2D ruidosa), inicializados con los
resultados de un sistema estéreo y teniendo en cuenta la
simetría de las formas de los peatones.
Sistema de control del conductor: midiendo parpadeo
de los ojos, movimiento de la cabeza y apertura de la
boca para detectar el grado de atención.
Sistema de reconocimiento de señales de tráfico:
emplean Algoritmos Genéticos y Templado Simulado
como algoritmos de búsqueda para encontrar las señales
presentes en las imágenes captadas por una cámara a
color.
Sistema de control de velocidad variable: el
reconocimiento del vehículo delantero se realiza
mediante análisis de imágenes en lugar de por sensores
radar. El sistema se fusiona con el módulo de detección
de carriles para delimitar la búsqueda.
La segunda versión, el IVVI 2.0, mejora el diseño del vehículo e
incorpora como novedad que los sistemas de ayuda a la
conducción sólo informan al conductor cuando éste esté en una
situación real de peligro. Además se incorpora una sonda CAN-
bus (que obtiene información del funcionamiento del vehículo) así
como un sistema GPS-IMU (que informa sobre posición y
velocidad del vehículo) para determinar el estado del vehículo.
El tercer vehículo, el iCab, es un pequeño vehículo eléctrico de
golf que es controlado por un ordenador embarcado. La función
de estos vehículos será llevar de forma autónoma a los visitantes
del Campus, por lo que la autonomía estará limitada al entorno del
Campus y a entornos previamente conocidos.
5. EL FUTURO DEL COCHE En este documento se ha pretendido hacer un recorrido por las
distintas tecnologías que se están empleando en construir los
coches del futuro hoy. Sin embargo, aunque ya haya muchos
modelos que incorporen tecnología inteligente y ya estén
circulando vehículos sin necesidad de conductor, aún queda
mucho camino por recorrer.
En la línea de la iniciativa europea, considero que, una vez
perfeccionadas las técnicas que hacen que un vehículo sea capaz
de conducirse sólo, sin necesidad de una figura humana, hay que
trazar un plan para que los vehículos cooperen entre ellos. Del
mismo modo que una a persona que entiende la mecánica del
coche no le es suficiente para circular por carreteras con tráfico,
sino que tiene que aprender el reglamento de circulación, el coche
autónomo tiene que ir a la autoescuela. Es decir, el coche que se
conduce sólo debe también saber conducirse en compañía de otros
coches.
El período que se abre para los próximos años, en el que
convivirán vehículos autónomos y vehículos tradicionales, se
debe prestar especial atención en que los vehículos autónomos
comprendan la inexactitud del conductor humano y, del mismo
modo, lanzar un sistema de gestión de vehículos autónomos que
permita la cooperación entre los distintos automóviles. Como ya
adelantaba anteriormente, uno de los objetivos finales es la
eficiencia, entendida no sólo como el eficiente uso de los recursos
energéticos del automóvil sino también la gestión eficiente de las
infraestructuras: las redes de carreteras. Y entendiéndolas como
tales redes y aplicando un modelo similar al de las redes de
ordenadores, en las que una serie de sistemas se encargan de
gestionar el tráfico, se podría –en un futuro algo más lejano-
construir redes de carreteras inteligentes, donde los coches
autónomos sean enrutados como los paquetes en los routers.
- 9 -
6. REFERENCIAS
[1] Dirección General de Tráfico (DGT). 2011. Accidentalidad
mortal en carretera. Informe oficial. Ministerio del Interior,
España.
DOI=http://www.dgt.es/was6/portal/contenidos/documentos/
seguridad_vial/estadistica/accidentes_24horas/resumen_anua
l_siniestralidad/resumen_siniestralidad037.pdf (última visita
noviembre 2011).
[2] European Transport Safety Council (ETSC). 2010. 2010
Road Safety Target Outcome:100,000 fewer deaths since
2001. 5th Road Safety PIN Report. Unión Europea.
DOI=http://www.etsc.eu/documents/pin/report.pdf (última
visita noviembre 2011).
[3] Organisation Internationale des Constructeurs d’Automobiles
(OICA). 2010. 2010 Production Statistics. Informe oficial.
DOI=http://oica.net/category/production-statistics/ (última
visita noviembre 2011).
[4] Dirección General de Tráfico (DGT). 2009. Anuario
Estadístico General 2009. Informe oficial., Ministerio del
Interior. España.
DOI=http://www.dgt.es/was6/portal/contenidos/documentos/
seguridad_vial/estadistica/parque_vehiculos/series_historicas
_parque/series_historicas_parque.pdf (última visita
noviembre 2011).
[5] Wikipedia. 2011. Automobile. Artículo colectivo.
DOI=http://en.wikipedia.org/wiki/Automobile (última visita
noviembre 2011).
[6] Wikipedia. 2011. Autonomous car. Artículo colectivo.
DOI=http://en.wikipedia.org/wiki/Autonomous_car (última
visita noviembre 2011)
[7] Wikipedia. 2011. The history of the automobil. Artículo
colectivo.DOI=http://en.wikipedia.org/wiki/History_of_the_
automobile (última visita noviembre 2011)
[8] Wikipedia. 2011. Vehicle Automation. Artículo colectivo.
DOI=http://en.wikipedia.org/wiki/Vehicle_Automation
(última visita noviembre 2011)
[9] Comisión Europea, Sociedad de la Información y Medios.
2010. i2010 Intelligent Car Initiative. Publicación Oficial.
DOI=http://ec.europa.eu/information_society/activities/intelli
gentcar/index_en.htm (última visita noviembre 2011)
[10] Wikipedia. 2011. Autonomous cruise control system.
Artículo colectivo.
DOI=http://en.wikipedia.org/wiki/Autonomous_cruise_contr
ol_system(última visita noviembre 2011)
[11] Wikipedia. 2011. Driver monitoring system. Artículo
colectivo.
DOI=http://en.wikipedia.org/wiki/Driver_Monitoring_Syste
m (última visita noviembre 2011)
[12] Lexus. 2011. Driver Monitoring System. Catálogo de
prestaciones. DOI=http://www.lexus.eu/range/ls/key-
features/safety/safety-driver-monitoring-system.aspx (última
visita noviembre 2011)
[13] Wikipedia. 2011. Google driverless car. Artículo colectivo.
DOI=http://en.wikipedia.org/wiki/Google_driverless_car
(última visita noviembre 2011)
[14] Universidad Carlos III de Madrid. 2010. Sistemas
Inteligentes de Transportes. Sitio Web.
DOI=http://www.uc3m.es/portal/page/portal/dpto_ing_siste
mas_automatica/investigacion/lab_sist_inteligentes/sis_int_tr
ansporte/ (última visita noviembre 2011).
- 10 -
SISTEMAS EXPERTOS: MYCIN Ainhoa Sesmero Fernández
Estudiante Ing. Telecomunicación Universidad Carlos III de Madrid Avda. De la Universidad, 30
28911, Leganés (Madrid-España)
Sandra Pinero Sánchez Estudiante Ing. Telecomunicación Universidad Carlos III de Madrid Avda. De la Universidad, 30
28911, Leganés (Madrid-España)
RESUMEN
En este documento se explica lo que es un sistema experto, sus principales usos y en concreto hablaremos del sistema MYCIN. Uno de los primeros sistemas expertos para la detección y tratamiento de enfermedades de la sangre.
Categorias y Descriptores de Temas
[Inteligencia artificial]: Sistemas expertos (SE) y aplicaciones en medicina.
Terminos Generales
Algoritmos, medidas, documentación, diseño, factores humanos y teoría.
Palabras clave
Sistema expertos, MAYCIN, medicina, organismos, conocimiento.
1. INTRODUCCIÓN
Los sistemas expertos son programas que emulan el comportamiento de un experto, como su propio nombre indica. Están desarrollados en un entorno de tal forma que son capaces de gestionar la propia base de datos de conocimiento, resolver un problema específico, producir nuevos conocimientos y explicar su razonamiento.
MYCIN fue el primer sistema experto que llego a funcionar con la misma calidad que un experto humano. Muchos de los sistemas posteriores utilizaron MYCIN para comparar lo que era un sistema experto.
MYCIN era un sistema estrictamente para investigación, fue desarrollado para ayudar a los médicos en el diagnóstico y tratamiento de meningitis y enfermedades bacterianas como explicaremos a lo largo de este documento.
2. SISTEMAS EXPERTOS
Por tener más definiciones de sistemas expertos, unida a la anterior podemos decir de forma más rigurosa: “Los Sistemas Expertos son programas que simulan el comportamiento de los sistemas expertos humanos a la hora de resolver problemaas. Por
lo general, los expertos solucionan los problemnas de su especialización basándose en la experiencia. Muy sucintamente, esta experiencia consta de conocimientos de hechos y de soluciones de problemas. Con el desarrollo de los Sistemas Expertos se pretende estructurar este conocimiento de hechos y soluciones de problemas de tal forma, que sean almacenados en un ordenador y procesables por un programa. Por lo tanto, los Sistemas Expertos son programas para ordenador, en los que se han reflejado conocimientos humanos. Pero ya que el conocimiento humano es extremadamente complejo, tenemos que limitarnos, en estas “imitaciones técnicas” a campos especializados muy delimitados.1 ”
Se puede dividir los componenetes de un sistema experto en tres subsistemas direfentes: base de conocimientos, motor de inferencias e interfase. (ver figura 1)
Figura 1
Existen tres tipos de sistemas expertos principalmente. Están los llamados “basados en reglas”, los “basados en casos” y los “basados en redes bayesianas”. En el conjunto de sistemas expertos basados en reglas nos encontramos con MYCIN del que hablaremos más adelante, pero también nos encontramos con DENDRAL que fue el primer sistema experto utilizado para propósitos reales y la inspiración de MYCIN.
2.1 Base del Conocimiento
En ella se representan todos los conocimientos acerca de un dominio concreto. Puesto que el ordenador no posee dichos
1 NEBENDAHL, D.,Sistemas Expertos, Vol. 2, Marcombo. Barna., 1991. p. 1.
- 11 -
conocimientos es necesario que sean introducidos por un experto humano en el tema en cuestión.
Ya que como su nombre indica es la base, es necesario que las reglas establecidas sean lo más clara posibles para evitar ambigüedad, eficiencia, que se facilite la deducción a la maquina por inferencia, y fuerza de expresión para definir de forma adecuada y completa todos los elementos del universo del tema elegido.
Como vemos por lo descrito anteriormente, es complicado traducir a un lenguaje todos los conocimientos de un experto humano de forma que pueda entenderlo y reflexionar sobre ellos como si del humano mismo se tratara y para el cual muchos de sus actos son de forma intuitiva.
¿Qué se le pide o que se le podría pedir a un experto humano?
- Habilidad para llegar a una solución de la forma más rápida posible y a poder ser de forma certera. Para que sea de una forma rápida y certera obligamos al experto, no solo a que sepa en que campo se mueve si no, que tenga experiencia en el.
- Habilidad para explicar a las personas que no cuentan con ese conocimiento o esa experiencia los resultados obtenidos.
- Habilidad de poder reestructurar el conocimiento para que se adapte a las circunstancias.
- Habilidad para poder aprender de las experiencias. Los expertos deben aprender de sus experiencias propias, pero además también de las de los demás. Esto implica que un experto debe estar al día en cuanto a sus conocimientos.
2.1.1 Tipos de Conocimiento
Existen tres tipos de conocimiento para construir un sistema experto:
• Reglas
Declaraciones estructuradas en forma de oraciones condicionales.
• Estructuras
Contienen jerarquía de componentes y de atributos objeto que pueden ser asignados heredados de otras estructuras a través de diversos procedimientos.
• Lógica
Son expresiones con predicados, valores y átomos para evaluar hechos del mundo real.
2.2 Motor de Inferencias
El motor de inferencia lo que hace es decidir, interpretar y aplicar el conocimiento que se ha obtenido de la base del conocimiento a la base de los hechos para poder así obtener la solución adecuada, o dicho de otra forma, es el encargado de hacer uso de los hechos y las reglas que el experto ha integrado en
la base del conocimiento y controla de forma estratégica la el sistema de conocimiento.
Además de utilizar la base del conocimiento el motor de inferencias también hace de controlador de la consulta del usuario y decide el orden en el que se hacen las inferencias.
2.3 Interfase
Se encarga de proporcionar el usuario una interfaz lo mas amigable posible para poder interactuar con el sistema experto de una forma fácil y sencilla. Recordemos que lo que hacemos es solucionar problemas como lo solucionaría un experto, con esto se ayuda a las personas y usuarios del sistema, no queremos que le sea más difícil y complicada su utilización.
Esta interfase se encargara de gestionar las entradas y salidas al sistema experto.
2.4 Ventajas y desventajas de los SE
2.4.1 Ventajas de los SE
Los sistemas expertos tienen multitud de ventajas, entre ellas podemos ver:
- Un sistema experto puede replicarse tantas veces queramos. Una vez que un SE ha sido creado podemos replicarlo y usarlo por donde queramos.
- Por causa de su replica su coste a largo plazo es bajo. Aun que inicialmente crearlo puede ser caro, al poder ser replicado su coste a largo plazo es bajo.
- Los SE no se ven afectados por la edad, o el entorno que les rodea como los seres humanos por lo que también es una ventaja a considerar.
2.4.2 Limitaciones de los SE
En cuanto a sus limitaciones podemos hablar de:
- El lenguaje es algo problemático. Con un humano podemos conversar y explicarnos mejor, con un SE lo que hay esta en sus reglas y no podemos usar explicaciones, aclaraciones, gestos…
- Es difícil que un SE aprenda de sus errores. Para un ser humano la experiencia, los errores y los aciertos hace que vaya mejorando, en un SE esto es difícil de conseguir.
- Perspectiva global. Un experto humano es capaz de separar los datos realmente relevantes de los irrelevantes, un SE no. Y a estos podemos añadirle que no están abiertos a nueva fuente de datos para ver como se puede resolver un problema ya que sus datos están programados.
- Elevado coste y tiempo.
- 12 -
2.5 Aplicaciones
En el siguiente cuadro podemos observar algunas de las áreas en las que los sistemas expertos tienen aplicación.
Veamos algunos ejemplos:
- En el campo de la medicina tenemos varios como DENDRAL, MYCIN o PUFF. De entre ellos el más famoso es MYCIN del que hablaremos en el siguiente apartado.
- En el campo de la programación tenemos sistemas como EURISKO, sistema que es capaz de aprender a medida que funciona y crear circuitos microelectrónicos tridimensionales.
- Sistemas militares tenemos TWIRL, que simula guerras completas y guía de mejores accionas para realizar en casi todas las situaciones.
- En la industria podemos ver RI, Programa utilizado para el descubrimiento de yacimientos petrolíferos bajo aguas marinas.
- En el ámbito económico tenemos el TRADING, una serie de reglas matemáticas bien estructuradas en las que se basan las operaciones en bolsa.
- En la geología encontramos el PROSPECTOR, utilizado para hallar yacimientos de minerales.
3. MYCIN
Es un sistema experto desarrollado por Edgar ShortLiffe en la Universidad de Stanford a principios de los años 70. Su objetivo es el diagnóstico de enfermedades infecciosas de la sangre. Incluso es capaz de razonar el proceso seguido para llegar a los diagnósticos y de recetar medicaciones personalizadas a cada paciente.
3.1 Tratamiento de infecciones sanguíneas
Elegir el tratamiento adecuado para una infección bacteriana sigue un proceso de cuatro partes:
• Primero es necesario concluir si el paciente tiene una infección significativa.
• A continuación hay que establecer al o los posibles organismos involucrados.
• Después escoger el conjunto de antibióticos que puedan ser necesarios.
• Por último elegir el antibiótico.
Sin embargo dicho proceso no es nada fácil. Esto se debe a que el cuerpo humano está normalmente poblado por bacterias. Se toma del paciente las muestras necesarias realizándole un cultivo. Por lo que el diagnóstico inicial se base en criterio clínico, fiebre y dolor.
Los resultados de las pruebas pueden tomar de 24 a 48 horas o más. Una vez que el médico dispone de los resultados debe elegir el tratamiento basándose en:
• Posibles identidades del organismo.
• La probabilidad efectiva del agente antimicrobiano contra este rango de posibilidades.
Una vez que el médico dispone de los resultados del cultivo debe de decir que tratamiento hay que aplicar al paciente. Sin embargo, este tratamiento puede tener diferentes síntomas o efectos en cada paciente con lo que es necesario cambiarle el tratamiento.
Por otra parte, es evidente que el médico necesite ayuda con la selección antimicrobiana. Con lo que el problema se continúa aunque haya habido intentos para educar a los médicos; pocos parecen ir a través del proceso metódico de decisión. La sobre-prescripción en EEUU durante los años 70 fue estimado con un factor de 10 a 20, con lo que el coste anual para pacientes y hospitales es monumental. Asimismo, la sobre-prescripción puede resultar en el desarrollo de cepas bacterianas resistentes.
El objetivo de MYCIN es asistir al doctor, el cual no tiene por qué ser experto en el área de los antibióticos con el diagnóstico y tratamiento de infecciones sanguíneas.
Este sistema experto consta fundamentalmente de tres componentes:
1) Un sistema de consulta entre el programa y el doctor. Este sistema consiste en realizar una serie de preguntas, entrega de conclusiones y dar consejos.
2) Un sistema de explicación por parte del sistema al doctor en el cual, éste responde a las preguntas del médico y justifica sus propios consejos.
3) Un sistema para conseguir las reglas, agregas nuevas reglas y cambiar las existentes.
- 13 -
3.2 Sistema de consulta
Esta primera parte del MYCIN consiste en generar el conjunto de hipótesis relacionado con el organismo dañoso y de este modo realizar una serie de recomendaciones de terapias para estas hipótesis. Recalcar que MYCIN suele describirse incorrectamente como un programa de diagnóstico médico; en realidad es un programa para tratamiento de infecciones sanguíneas.
Para comprender mejor un sistema de consulta a continuación se muestra un ejemplo:
Primero MYCIN necesita cuatro datos del paciente ya que son esenciales para cualquier diagnóstico. Una vez que dispone de ellos realiza una serie de preguntas para conocer la disponibilidad del cultivo.
1) Nombre del paciente: David King
2) Edad: 34
3) Sexo: Varón
4) Raza Caucasiana
5) ¿Hay cultivos de David qué puedan estar relacionados con su enfermedad actual, en los que hayan llegado a crecer organismos en el laboratorio de microbiología? No
6) ¿Hay cultivos pendientes de David? Sí
7) ¿De qué lugar se tomó la muestra para el cultivo? LCR
8) Por favor, escriba la fecha y la hora de la toma del cultivo de LCR pendiente (m/d/a hora) Junio/24/84 7:00
9) ¿Se examinó un frotis cuando se obtuvo la muestra para el cultivo pendiente de LCR? Sí
10) ¿Se vio organismo en el frotis de la muestra sometida al cultivo de LCR pendiente? No
Antes que nada deja que sea el propio médico quién diga los hechos conocidos. Pero en este ejemplo al paciente no se le ha realizado ningún cultivo positivo con lo que MYCIN insiste
si tiene ese paciente algún cultivo pendiente que es nuestro caso. Entonces MYCIN le dice que necesita conocer la información del cultivo pendiente. El usuario le responde con una serie de datos y por último le contesta que no hay ningún organismo. Por lo tanto, el sistema experto no puede sacar conclusiones y sigue planteando preguntas.
En cierto momento de la consulta llega a esto:
13) ¿Ha presentado David síntomas de cefalea persistente un otros síntomas neurológicos anormales (vértigo, letargo,…)? Sí
14) ¿Hay en David alguna evidencia objetiva reciente de signos neurológicos anormales (rigidez de nuca, coma, convulsiones,…), documentados por observación o examen clínico? Sí.
Hay que destacar que los cultivos LCR (cultivo de líquido cefalorraquídeo) están asociados con meningitis.
Las dos siguientes preguntas representan un enfoque más tradicional al diagnóstico por síntomas y tras tener la contestación de la pregunta 14, MYCIN informa de su primera conclusión: la infección del LCR es probablemente meningitis.
Después continúa con otra tanda de preguntas para identificar el organismo concreto causante de la infección meningítica.
34) ¿La meningitis se ha contraído en el hospital? No
35) ¿Es la historia clínica de David consistente con Epiglotis? No
36) ¿Es la historia clínica de David consistente con Otitis-media? No
37) ¿Ha estado alguna vez el paciente en una zona endémica de coccidiomicosis? Desconocido
38) ¿Se ha sometido David a esplenotomía? No
39) ¿Ha sufrido David quemaduras? Si He encontrado evidencia (REGLA 507) de que el tratamiento debe cubrir Diplococcues-pneumoniae causante de meningitis. He encontrado evidencia (REGLA 545) de que el tratamiento debe cubrir E. coli causante de meningitis. He encontrado evidencia (REGLA 545 REGLA 578) de que el tratamiento debe cubrir Pseudomonas-aeruginas causante de meningitis.
A partir de este momento ha finalizado la parte diagnóstica de la consulta. Ahora el programa se encarga de buscar el conjunto de medicamentos para acabar a los organismos sin perjudicar al paciente. Con lo que vuelve a realizar otra serie
- 14 -
de preguntas. Aunque hay que destacar que estas preguntas son diferentes dependiendo de los resultados intermedios.
40) ¿Tiene David signos neurológicos focales? No
41) ¿Presenta David alguna reacción alérgica importante frente algún agente antimicrobiano? Sí
42) ¿Cuál es el más reciente aclaramiento de creatinio, en ml/min, que usted considera representativo de la función renal de David? 77
43) Peso de David en Kg 77
Dicho sistema de consulta consiste en una serie de reglas de producción, un conjunto de estructuras estáticas y dinámicas, y una estructura de control.
3.2.1 Reglas de producción
La gramática que se utiliza para realizar dichas reglas es representada internamente como código LISP. El cual es un lenguaje de alto nivel de procesamiento de listas en el cual MYCIN está implementado. La sintaxis que se maneja es la siguiente:
<rule>::= <premise> <action> <premise>::= ($AND <condition> ...
<condition>) <condition>::= (<predicate> <context>
<parameter> <value>) | ($OR <condition> ... <condition>)
<action>::= <conclusion> | <instruction>
Un ejemplo de esta estructura es el siguiente:
PREMISE: ($AND (SAME CNTXT GRAM GRAMNEG) (SAME CNTXT MORPH ROD)
(SAME CNTXT AIR AEROBIC)) ACTION: (CONCLUDE CNTXT CLASS ENTEROBACTERIACEAE TALLY .8)
Donde gram se refiere a la cepa del organismo, morph a la morfología del organismo y air a la aerobicidad del organismo. El símbolo CNTXT es una variable que es instanciada por el nombre que MYCIN le da al nodo contextual que está actualmente observando.
El médico, el cual utiliza este sistema experto, no observa dicho código. Simplemente las reglas son traducidas en el terminal del siguiente modo:
If 1) the stain of the organism is gramneg, and 2) the morphology of the organism is rod, and 3) the aerobicity of the organism is aerobic THEN there is strongly suggestive evidence (.8) that the class of the
organism is enterobacteriaceae.
Donde (0.8) indica el factor de confianza que posteriormente se explicara.
3.2.2 Estructuras de datos
� Estructuras de datos estáticas
Se encarga de guardar la información de definición. Dicha información es mantenida separada del conocimiento inferencial, en la forma de listas simples (enumeran todos los organismos y sitios estériles conocidos por el sistema), tablas de conocimiento (tienen los registros de ciertos parámetros clínicos y los valores que toman bajo diversas circunstancias) y un sistema de clasificación para parámetros clínicos.
� Estructuras de datos dinámicas
Son almacenados en un árbol de contexto, el cual se utiliza para organizar la información referente a un paciente en concreto. El consejo estará basado tanto en los cultivos, organismos, operaciones previas y tratamientos relacionados con el paciente, como en características personales del paciente. Con lo que el árbol ayuda a estructurar el problema clínico y relacionar un contexto con otro.
Figura 2
3.2.3 Estructura de control
� Encaminamientos hacia atrás
MYCIN tiene una regla meta de máximo nivel que define la tarea completa del sistema de consulta:
IF there is an organism which requires therapy, and consideration has been given to the possibility of aditional organisms requiring therapy THEN compile a list of possible therapies, and determine the best therapy in this list.
Para realizar una sesión de consulta es necesario seguir los siguientes pasos:
• Crear el contexto del paciente como el nodo de más alto nivel en el árbol de contexto.
• Intentar aplicar la regla meta a este contexto del paciente.
- 15 -
Al aplicar la regla meta es necesario evaluar primero su premisa, la cual necesita determinar si hay un organismo que requiera terapia.
Por lo tanto la consulta se realiza mediante una búsqueda a través de un árbol meta. La meta superior en la raíz del árbol es la parte de acción de la regla meta. Las sub-metas futuras hacia abajo en el árbol, las cuales determinar el organismo involucrado y el ver si es importante. Puede ocurrir que estas sub-metas tengan a su vez más sub-metas, como por ejemplo para descubrir las propiedades de la cepa y morfología del organismo. Las hojas del árbol son metas fácticas, también conocidas como hechos, que no pueden ser deducidos como por ejemplo datos de laboratorio. Como se puede observar en la figura (ver figura 2).
Se llama estructura de control de encadenamiento hacia atrás porque el programa razona hacia atrás desde lo que quiere probar hacia los hechos que necesita para hacerlo.
� Factor de certeza
A cada regla se le asocia un factor de certeza, CF, comprendido entre [-1, 1]. Este factor indica el grado de confianza en la conclusión obtenida, dada la evidencia de las premisas. Si es positivo indica un grado de confianza, mientras que si es negativo un grado de desconfianza.
3.3 Sistema de explicación
Este sistema consiste en explicar al doctor todo lo referente a la consulta. Dicho doctor puede realizar las preguntas generales o relacionadas con la consulta necesaria al programa no sólo al final de la consulta sino durante la consulta misma.
Estas preguntas pueden ser del estilo ¿Qué te hace pensar que el organismo puede ser un Proteus?Ante esta situación MYCIN escribe las reglas que utilizó, su grado de certeza en cada decisión y la última pregunta hecha. Todo esto lo puede hacer porque lleva un registro de las decisiones que se hace.
La facilidad que tiene MYCIN para responder a dichas preguntas está basada en sus habilidades para:
• Desplegar aquellas reglas que se están utilizando durante la consulta.
• Almacenar dichas reglas y asociarlas con eventos.
• Utilizar el indizado de reglas para recuperar reglas particulares como respuestas a peticiones.
3.4 Sistema de adquisición de reglas
En el programa se pueden agregar nuevas reglas de decisión o cambiar alguna presente. El usuario no las agrega en LISP sino en formato inglés. Es el propio programa que se encargar de traducirla.
Sin embargo puede ocurrir que una nueva regla puede contradecir a otra del sistema o simplemente agregar una regla presente en el programa. Con lo que Shortliffe discutió planes para proveer facultades para verificar los efectos que pueden causar al ingresar una nueva regla en su libro.
Randall Davis desarrollo estos planes ampliamente en un sistema llamado TEIRESIAS. Este sistema ayuda a un experto a depurar y llenar el conjunto de reglas de un sistema experto existente. Además utiliza generalizaciones acerca de la estructura de reglas existentes.
3.5 Ventajas y Desventajas
A este sistema experto realizaron una serie de investigaciones para saber su grado de fiabilidad. Los resultados obtuvieron una tasa de aciertos de aproximadamente el 65%. Con lo que mejoraba las estadísticas de los doctores no especializados en el diagnóstico de infecciones bacterianas, que ejercían la profesión en aquellos años.
Además este sistema experto presenta una representación sencilla y una facilidad de comunicación con el sistema.
Sin embargo, a pesar de los resultados favorables obtenidos, MYCIN fue cayendo en desuso. El motivo es las debilidades que tenía el programa y por cuestiones legales y éticas debido a que se dejaba en manos de una máquina la responsabilidad de la salud de una persona.
3.6 Ejemplo
A continuación mostramos un pequeño ejemplo realizado en Prolog para simular el comportamiento de un sistema experto en el ámbito de la medicina.
No es un ejemplo MYCIN porque es el propio sistema el que realiza las preguntas al usuario y con dichas respuestas concluye el organismo infeccioso y el posible tratamiento.
En el siguiente código se muestra los síntomas y posibles tratamientos de enfermedades habituales.
El código de dicho programa es el siguiente:
sintomas_de(dolor_cabeza,gripe). sintomas_de(escalofrios,gripe). sintomas_de(tos_seca,gripe). sintomas_de(fiebre,gripe).
- 16 -
sintomas_de(tos,pulmonia). sintomas_de(fiebre_alta,pulmonia). sintomas_de(escalofrios,pulmonia). sintomas_de(dificultad_respirar,pulmonia). sintomas_de(dolor_pecho,pulmonia). sintomas_de(dolor_muscular,pulmonia). sintomas_de(manchas_cuerpo,varicela). sintomas_de(dolor_cabeza,varicela). sintomas_de(fiebre_baja,varicela). sintomas_de(falta_hambre,varicela). sintomas_de(cansancio,varicela). sintomas_de(fiebre_alta,meningitis). sintomas_de(dolor_cabeza_intenso,meningitis). sintomas_de(nuca_riguida,meningitis). sintomas_de(vomitos_bruscos,meningitis). sintomas_de(somnolencia,meningitis). sintomas_de(perdida_conciencia,meningitis). tratamiento_de(gripe,reposo). tratamiento_de(gripe,beber_mucho_liquido). tratamiento_de(gripe,analgesicos). tratamiento_de(pulmonia,antibioticos). tratamiento_de(pulmonia,beber_mucho_liquido). tratamiento_de(pulmonia,reposo). tratamiento_de(varicela,analgesicos). tratamiento_de(varicela,crema_calman_picor). tratamiento_de(meningitis,hospital). tratamiento_de(meningitis,antibioticos).
Como se puede observar solamente tratamos cuatro enfermedades, gripe, pulmonía, varicela y meningitis.
Ejecutamos el programa y obtenemos:
En la imagen anterior preguntamos por los síntomas de la varicela y nos devuelve los cinco síntomas y con el orden exactamente igual que están en el programa. La última sentencia es false para indicar que ya no hay más síntomas para esa enfermedad.
A continuación consultamos el tratamiento que hay que seguir para pacientes con dicha enfermedad.
También podemos saber con dicho programa la enfermedad que se corresponde con el síntoma especificado, como se puede observar en la captura de arriba.
Para el siguiente ejemplo el programa trata de mostrar las posibles enfermedades que tienen como tratamiento la variable reposo.
Finalmente, con este último ejemplo buscamos si tenemos alguna enfermedad que tenga como síntoma de dolor de garganta. En este caso el programa nos responde con false porque en nuestro programa no tenemos ninguna enfermedad con dicho síntoma.
- 17 -
4. CONCLUSIONES
Como podemos ver el uso de los sistemas expertos en la sociedad tiene numerosas ventajas.
Por un lado como ya se ha dicho en este documento los sistemas expertos no se cansan, no les afecta el medio están en continuo funcionamiento y si los programas bien son rápidos y además eficaces.
Pero entrando en el terreno que nos ocupa, ¿Cómo de lejos puede llegar un sistema experto en medicina?, ¿los pacientes se fiarían de una “máquina”, o prefieren el trato personal? Estas preguntas serian fácilmente contestables viendo la caída de MYCIN. ¿De quién es la culpa de un mal tratamiento?, ¿Del médico?, si es del experto, ¿Para qué queremos la máquina?
Desde nuestro punto de vista los sistemas expertos son un gran avance en la sociedad, parece mentira a lo que llega la sociedad con el paso del tiempo, es increíble que una máquina programada pueda diagnosticar, y ayudar a las personas como si de un experto humano se tratara y sobre todo es increíble que este programada para aprender. Aun así, después de las ventajas comentadas a lo largo del documento, e incluso las ventajas que nosotras en este mismo momento pudiéramos verle todavía desde nuestro punto de vista hay sistemas expertos, como en medicina que no consideramos que estén preparados para anular al experto, sencillamente podrían complementarlo, ayudarlo, o podrían usarse para otro fin médico.
Muchos expertos podrían pensar que los sistemas expertos no son tan buenos ya que si empezamos a usar los sistemas expertos los expertos del mundo se quedarían inservibles, o peor aún, solo servirían para darle conocimiento a una máquina.
5. REFERENCES
[1] Inteligencia artificial y derecho By Danièle Bourcier, Pompeu Casanovas
[2] Fundamentos de inteligencia artificial Escrito por Luis Álvarez Munárriz
[3] Sistemas Expertos Escrito por David King,Paul Harmon
- 18 -
Diseño e implementación de un agente
inteligente Mario A.I.
Yuchen Du
Ingeniería de Telecomunicación
Universidad Carlos III de Madrid
Virginia Izquierdo Bermúdez
Ingeniería de Telecomunicación
Universidad Carlos III de Madrid
RESÚMEN
En este artículo se detalla el diseño y la
implementación de un agente inteligente capaz de
jugar al videojuego de Mario así cómo las técnicas
utilizadas para este diseño.
Categorías y descriptores
Java [Lenguaje de programación]
Términos generales
Árbol de decisión, agente inteligente
Palabras claves
1. INTRODUCCIÓN
Para la implementación de este agente inteligente
analizaremos el uso de técnicas utilizadas
frecuentemente en aplicaciones de Inteligencia
Artificial, tales como árboles de decisión.
Después, construiremos nuestro propio árbol de
decisión para la solución del problema de agente
inteligente planteado en la página web de 2011
Mario AI Championship.
A continuación, haremos un estudio detallado del
paquete de software proporcionado por dicha
página web, sobre el cual se apoya nuestra
implementación del agente de Mario inteligente.
Para ello, analizaremos agentes básicos
proporcionados dentro del paquete de software,
tales como el ForwarJumpingAgent el cual
simplemente salta hacia delante sin prestar
ninguna atención a los distintos elementos
presentes en escenario.
Adicionalmente, comprobaremos la funcionalidad
de diversos métodos y variables implementados en
otras clases dentro del paquete de software que
nos serán de gran ayuda para la construcción en
código Java de nuestro agente inteligente.
Por último, procedemos a implementar y
programar el árbol de decisión construido
previamente y a comprobar su funcionamiento
real en diversos escenarios utilizando las distintas
opciones de simulación disponibles.
2. ÁRBOLES DE DECISIÓN
Se trata de modelos de predicción en los cuales se
utilizan técnicas mediante las que se pueden
analizar decisiones secuenciales basadas en el uso
de resultados. Estos árboles son utilizados para
generar sistemas expertos, árboles de juegos o
búsquedas binarias. Mediante su uso, un sistema
dotado de Inteligencia Artificial podrá tomar
decisiones en situaciones previamente definidas.
En un árbol de decisión, se dispone de unas ciertas
entradas o situaciones, a partir de las cuales se
devuelve un resultado, convergiendo así en una
nueva situación donde una nueva decisión ha de
ser tomada. Esta acción será realizada tantas veces
como sea necesario, hasta llegar a un punto final,
llamado hoja en nuestro árbol de decisión, donde
se determina la acción a realizar tras el camino
tomado, aquella que se ajusta a la situación
requerida.
- 19 -
Un ejemplo de árbol de decisión, binario en este
caso, se muestra a continuación.
3. DISEÑO DEL AGENTE
Para el diseño de nuestro agente, haremos uso de
un árbol de decisión, no binario en éste caso,
donde se tomarán decisiones dependiendo del
escenario al que se enfrenta Mario en cada
momento, indicándole la acción a realizar para
tratar de llegar lo menos dañado posible al final
del nivel.
Aquí mostramos el árbol de decisión que hemos
diseñado para resolver el presente problema:
Cada nodo consiste en una posible situación a la
que se podría enfrentar el agente a lo largo de una
partida. A continuación, veremos detalladamente
en qué consiste cada una de ellas, para tener
especial cuidado a la hora de implementar nuestro
sistema, evitando implementaciones que puedan
dar lugar a comportamientos erróneos del agente
inteligente.
3.1 Obstáculos delante
Si mientras caminamos observamos un objeto el
cual no es franqueable, necesitaremos saltar para
evitar situaciones en las que nos encontraríamos
estancados. Será conveniente adelantarnos a esta
situación y no detectar el obstáculo cuando se
encuentra justo a nuestro lado, sino que convendrá
intentar predecir la presencia de obstáculos a
distancias un poco mayores. De ésta manera se
mejorará el rendimiento del sistema al tratar de
adelantarse en la resolución de problemas que
pueden ser evitados fácilmente con un simple
salto a tiempo.
3.2 Agujero delante
Al igual que en el caso anterior, será necesario
predecir cuándo hay agujeros para tratar de evitar
caer en ellos y consecuentemente perder de forma
definitiva la partida. Para superar estos agujeros,
tomaremos la misma acción que anteriormente, es
decir, saltar en el momento necesario para evitar
situaciones indeseadas una vez más.
3.3 Enemigos delante
Los enemigos también han de ser evitados para no
ser dañados innecesariamente. Por ello, cuando
veamos un enemigo próximo y siempre que sea
posible (antes de saltar siempre habría que
comprobar si dicha acción es conveniente, véase
3.4), saltaremos hacia delante para evitar ser
alcanzados por un enemigo que pueda dañar a
Mario y reducir su nivel en un rango (disparo →
grande → pequeño → fin de partida).
- 20 -
3.4 Obstáculos encima
Será necesario también comprobar si cuando es
necesario saltar, es decir, si nos encontramos en
las situaciones 3.1, 3.2 o 3.3, esto es conveniente.
En concreto, necesitamos comprobar si cuando se
requiere realizar un salto, hay algún tipo de
enemigo u obstáculo infranqueable por encima de
Mario. Si se diese alguna de estas situaciones, lo
más sensato sería no saltar, sino retroceder, ya que
de lo contrario estaríamos arriesgando a ser
dañados de forma innecesaria (enemigo encima) o
saltar en vano (objeto infranqueable) y estar
expuesto de nuevo a los peligros detectados
anteriormente.
3.5 Estancados
Puede darse la situación en la que tratamos de ir
hacia delante y saltar para evitar algún tipo de
obstáculo, pero no podemos franquearlo por
encontrar nuevos impedimentos y quedarnos
estancados, por ejemplo si chocamos con un
objeto que se encuentra justo encima nuestro y a
la vez tenemos una pared o una tubería delante
nuestro no podríamos avanzar con un simple salto
hacia delante. Por ello, la acción correcta a
realizar si esta situación ocurre es la descrita en
3.7, es decir, retroceder y probar a saltar de nuevo.
3.6 Saltar
Si hemos llegado a esta hoja del árbol, la acción
final a realizar es saltar hacia delante. La duración
y por tanto la altura del salto depende del
propósito de dicho salto, ya que depende de si
estamos intentando evitar un obstáculo o si
queremos recoger más monedas, nos interesa
saltar alturas diferentes.
3.7 Retroceder
Finalmente, si llegamos a esta hoja, ya sea para
evitar una situación de estancamiento, o para
escapar de un enemigo cuando no era conveniente
saltar directamente, retrocederemos hacia detrás
durante un tiempo determinado para después
poder saltar hacia delante sin chocarnos con
ningún tipo de obstáculo que podríamos habernos
encontrado.
4. IMPLEMENTACIÓN DEL AGENTE
Para la implementación del agente en Java, con
ayuda del código proporcionado por 2011 Mario
AI Championship necesitaremos analizar ciertas
funciones y variables ya implementadas o
definidas, que nos serán de apoyo a la hora de
programar.
4.1 Escenario
En primer lugar, y como información más
importante será necesario observar el escenario en
el que se mueve Mario. Según las descripciones
de la página web de la competición, este escenario
consiste en una matriz de 22 x 22 en el que Mario
se encuentra siempre en el centro de la
perspectiva, es decir, en esta matriz siempre
aparece en la columna 11 y en la fila 11.
En esta matriz, podemos encontrar todo tipo de
información acerca de los objetos que aparecen en
pantalla, tales como enemigos, obstáculos o
monedas.
Existen diversos métodos que permiten acceder a
la información de esta matriz en todo momento
con distinto nivel de detalle, pudiendo seleccionar
el tipo de información que se quiere conocer, bien
sea los enemigos, los obstáculos o ambas a la vez.
Por simplicidad utilizaremos los siguientes
métodos: getLevelSceneObservationZ (int level),
para ver únicamente los obstáculos en el
escenario; getEnemiesObservationZ (int level), en
este caso para ver solo los obstáculos; y por
último, getMergedObservationZZ(int level, int
level) en el cual se pueden observar ambas
informaciones.
Es importante mencionar que, a diferencia de la
matriz de perspectiva completa de dimensiones 22
x 22, estas funciones que simplifican la tarea de
obtención de información dividiéndola según su
clase, nos devuelven una matriz de perspectiva de
dimensiones 19 x 19 con la información requerida
según la función invocada. Al igual que antes,
Mario siempre estará situado en el centro de
perspectiva, que en este caso pasa a ser la fila 10 y
la columna 10.
- 21 -
La variable level permite modificar el nivel de
detalle de los objetos en la pantalla que queremos
obtener. Cuando se le asigna el valor 2 a esta
variable de entrada, los datos que devuelve la
función tendrán la forma más simple
(mayoritariamente 0s y 1s) facilitando su
procesamiento y manipulación posterior, mientras
que si se le asigna 0 a esta variable, los datos
obtenidos tendrán la máxima precisión, siendo
posible la distinción entre distintos tipos de
enemigos u obstáculos. A la hora de programar,
dependiendo del propósito y las necesidades de la
función determinada, utilizaremos un nivel de
detalle mayor o menor, para adaptarnos mejor a la
situación concreta.
4.2 Variables utilizadas
A parte de estos tres métodos que utilizamos
para obtener información acerca del entorno en el
que se desenvuelve Mario, aprovecharemos
también otros atributos que se encuentran
distribuidos en el paquete de software Mario AI:
4.2.1 isMarioOnGround
Indica si en un momento determinado Mario está
sobre una plataforma fija, o si está en medio del
aire. Este atributo nos será de gran utilidad para
determinar si estamos preparados para detectar
nuevos enemigos u obstáculos y saltar de nuevo, o
si por el contrario tenemos que prestar mayor
atención a la zona donde Mario va a caer,
comprobando la proximidad a enemigos y
decidiendo si se debe retroceder hacia atrás para
evitar un posible choque y daño indeseado.
4.2.2 Mario.fire
Este atributo nos permite saber si Mario aún
mantiene en su situación inicial con capacidad de
disparo, o si ya ha sufrido daños y
consecuentemente es grande o pequeño,
inhabilitado para disparar. Esto es útil ya que, en
el caso de que podamos disparar, sería muy
interesante disparar continuamente para destruir
los enemigos que vienen de enfrente y por tanto
para aumentar las posibilidades de sobrevivencia.
Nótese que, al tratarse el botón de disparar el
mismo que sirve para correr, mientras Mario
disponga de la opción de disparar, lo hará
repetidamente mientras que va avanzando
rápidamente por el nivel. Después de sufrir algún
daño y perder la capacidad de disparo, perdemos
protección contra los enemigos que vienen de
frente, por lo que dejaremos de correr para
mejorar nuestra reacción contra las distintas
situaciones adversas que puedan tener lugar.
4.2.3 marioEgoRow y marioEgoCol
Estas dos variables indican la posición de Mario
en la matriz de perspectiva de escenario en un
momento determinado.
4.2.4 action
A parte de los atributos anteriores que utilizamos
para obtener información acerca del escenario
presente, también cabe mencionar que, para
indicar las acciones que debe tomar Mario en cada
momento, modificamos el array de variables
boolean action, que contiene la información
acerca de qué botones deben ser pulsados durante
una ronda determinada. Los que utilizamos
principalmente son:
action[Mario.Key_RIGHT]
action[Mario.Key_LEFT]
action[Mario.Key_JUMP]
action[Mario.Key_SPEED]
Que tienen nombres bastante intuitivos.
4.3 Enemigos
Siempre que sea posible, como dijimos en la parte
de diseño, al encontrarnos con un enemigo al lado
nuestro trataremos de saltar para no ser dañados.
En caso de que esto no fuera posible, bien porque
hay más enemigos encima o porque tenemos
algún obstáculo que nos lo impide, nos
desplazaremos hacia atrás para poder huir de él y
tomar distintas decisiones más adelante. Por lo
general, esta funcionalidad no es utilizada muy
frecuentemente, pero en ocasiones resulta de vital
importancia ya que nos evita ser dañados por un
estrecho margen. También se da la situación
cuando estamos cayendo después de un salto, que
Mario hace contacto muchas veces (sin llegar a
saltar encima) con un enemigo justo cuando está a
punto de tocar el suelo, por lo que es imposible - 22 -
realizar otro salto para evitar ser dañado (para
realizar un salto es necesario que Mario esté sobre
alguna plataforma firme). Para prevenir y
solucionar este peligro, analizamos la posibilidad
de que algún enemigo se encuentre alrededor de la
zona de aterrizaje, y cuando se dé el caso,
trataremos de retroceder o bien frenar la
trayectoria y así evitar algunos enemigos que
podrían habernos atacado si simplemente
hubiéramos seguido el salto con nuestra
trayectoria inicial.
4.4 Obstáculos o Monedas
Aparte de los enemigos, a la hora de comprobar
obstáculos, nos interesa diferenciar si nos
encontramos ante un objeto sólido, al que haría
falta realizar un gran salto por encima para
superarlo y así poder seguir avanzando en el nivel,
o de monedas, que en vez de esquivarlas lo que
realmente nos interesa es recolectar la mayor
cantidad posible, realizando saltos pequeños para
intentar coger todas las monedas cercanas. En este
caso, esta tarea es relativamente fácil, pues
utilizando un nivel de detalle 2, bajo la presencia
de monedas, el método para obtener información
de escenario devuelve 2s en aquellas posiciones
donde éstas se encuentran, diferenciándolas
fácilmente de los obstáculos indeseados, que
corresponderían a ‘1’s, evitando franquearlas de
forma innecesaria.
4.5 Flores enemigas
Por lo general, para obtener la matriz con la
información del escenario será suficiente con un
nivel de detalle 2, pero en ocasiones, como por
ejemplo cuando tratamos de evitar las flores
enemigas que se esconden en las tuberías, nos
interesara saber específicamente si los enemigos
que encontramos delante se tratan de dichas flores
o no, ya que dependiendo de eso actuaremos de
una forma u otra: en el caso de que se trate de
enemigos comunes, no habría ningún problema y
por tanto actuaremos igual que ante el resto de
enemigos, mientras que cuando detectamos flores
enemigas, es mucho más seguro esperar a que se
refugien de nuevo en las tuberías antes de avanzar
de nuevo hacia delante.
Del código fuente del paquete software, podemos
saber que cuando se utiliza un nivel de detalle 0,
una flor enemiga será “traducida” con el valor de
91 cada vez que se invoque el método
getEnemiesObservationZ(...).
De esta forma, cuando detectamos un obstáculo
delante, y cuando no observamos ningún
impedimento para saltar por la existencia de
obstáculos, procedemos a comprobar la existencia
de flores enemigas en las celdas siguientes. En
caso de encontrarlas, nos pegaremos a la tubería,
esperaremos a que dichas flores bajen y cuando ya
el camino está libre, saltaremos hacia delante.
5. RESULTADOS
Una vez implementado nuestro sistema podemos
comprobar cómo este funciona aceptablemente,
siendo capaz de terminar diversos escenarios, con
distintas dificultades y obstáculos sin ser apenas
dañados. También es cierto que nuestro agente no
es infalible y en ocasiones comete fallos que le
suponen la pérdida de fuerza, sin embargo las
consecuencias no son tan graves en comparación
con la dificultad de la implementación de
soluciones a dichos problemas.
Por tanto, hemos tratado de llegar a una
implementación en la que exista un compromiso
entre funcionalidad y dificultad, consiguiendo, en
nuestra opinión una solución muy acertada en
cuanto a resolución de problemas por parte de
Mario y la dificultad a la que su implementación
está sometida.
No obstante, comentaremos posteriormente ciertas
mejoras que pueden realizarse para conseguir un
agente mucho más inteligente y capaz de superar
problemas mayores a los que nuestro agente puede
enfrentarse.
Antes de eso, mostraremos algunas de nuestras
implementaciones más destacadas, demostrando
su correcto funcionamiento, obteniendo el efecto
deseado según lo explicado anteriormente,
atendiendo a las decisiones que se toman tras
recorrer nuestro árbol de decisión definido.
- 23 -
5.1 Enemigos
La tarea básica para hacer que nuestro agente
funcione es tratar de esquivar enemigos que se
acercan hacia nosotros, a nivel del suelo. Para
ello, antes de que estos nos ataquen, daremos un
salto evitándolos de forma exitosa, tal y como se
muestra en las imágenes a continuación:
5.2 Flores enemigas
Otra acción a realizar, es esquivar flores
enemigas, emergente de las tuberías del escenario
de Mario. Para ello, ya hemos explicado que
trataremos de esperar, hasta que esta se ha
escondido para saltar, evitando que la flor nos
dañe:
- 24 -
5.3 Situaciones de estancamiento
Otra situación muy incómoda es cuando Mario se
encuentra atascado entre varios bloques
irrompibles, ya que si no se toman medidas, Mario
se mantendrá en la misma posición infinitamente,
pues ni puede seguir hacia delante ni puede saltar,
al chocar con algún bloque de su alrededor. Por
ello, será necesario hacer que Mario retroceda
cuando se encuentre en esta situación, pudiendo
completar el escenario tal y como se muestra:
6. POSIBLES MEJORAS
Debido a limitaciones tales como el tiempo
disponible, nuestra implementación no resulta ser
la más idónea, ya que existen detalles en el
funcionamiento del sistema que podrían ser
mejorados realizando implementaciones más
complejas.
Una de las posibles mejoras que a priori parece
asequible es la siguiente: del motor de generación
de niveles automático que utiliza el paquete de
software, muchas veces genera escenarios en el
cual hay muchos enemigos en distintos niveles
moviéndose hacia la izquierda (hacia Mario) y
cayéndose. Utilizando el agente que hemos
implementado, se necesita mucha suerte para
poder esquivar todos, ya que no es nada fácil
evitar contacto con 5 o más enemigos cayendo. A
simple vista, una posible solución sería: cuando se
detecta una gran cantidad de enemigos por
delante, en vez de seguir hacia delante, Mario
puede permanecer quieto o incluso retroceder un
poco, y esperar hasta que los enemigos hayan
caído sobre plataforma firme para seguir
avanzando, utilizando nuestro árbol de decisión
para esquivar los enemigos.
Sin embargo, esta solución no es óptima del todo.
Uno de los problemas generados por intentar
esquivar los enemigos saltándolos es que, cuando
hay una presencia numerosa de enemigos, es
complicado evitar el contacto con todos. Nosotros
intentamos detectar si en el aterrizaje de un salto
es posible hacer colisión con algún enemigo y así
cambiar la trayectoria del salto. Pero esto no evita
colisiones al 100% y muchas veces perdemos vida
justo en los instantes siguientes de un salto.
Además, en los niveles avanzados que se generan
con el paquete de software, son muy comunes los
enemigos con alas que pueden moverse en todas
las direcciones. Dado el caso, no sería de utilidad
esperar a que todos los enemigos aterricen, ya que
es algo que no ocurriría.
Para hacer frente a esta situación y resolver los
problemas que puedan presentarse, es necesario
diseñar una implementación más compleja: haría
falta conocer las posiciones de todos los enemigos
- 25 -
y los obstáculos presentes y, teniendo en cuenta
las direcciones de movimiento de los enemigos,
calcular hacia que posiciones sería conveniente
saltar (ya sea un hueco entre los enemigos o saltar
sobre algún enemigo, aunque esta última opción
implicaría un pequeño salto forzado después de
matar al enemigo, que habría que tener en cuenta
para contemplar posibles resultados). Al mismo
tiempo, habría que tener conocimiento sobre las
capacidades de Mario, es decir, sus velocidades de
movimiento y de salto, para ver de la lista de
posiciones seguras hacia dónde es factible saltar.
Y eso no es todo: habría que tener un control
exhaustivo en todo momento sobre las posiciones
futuras de los enemigos y de Mario para así evitar
cualquier sorpresa.
Como podemos imaginar, esta solución, que
funcionaría de forma correcta en todas las
situaciones posibles, requiere una enorme
complejidad ya que se necesitaría estudiar
ecuaciones sobre los movimientos de Mario y los
enemigos, y se escapan del rango de
requerimientos de este trabajo. En cualquier caso,
el sistema para evitar enemigos que hemos
implementado funciona razonablemente bien para
niveles de dificultad limitada, superando incluso a
las capacidades de un jugador humano con poca
experiencia.
También existen otros aspectos en donde se puede
implementar mejoras, tales como recolectar
champiñones y flores para mejorar el estado de
Mario, así como colectar todas las monedas que
aparecen en pantalla. Sin embargo, todo eso
aumentaría en gran medida la complejidad del
sistema, por lo que para el presente diseño se ha
decidido por un sistema más simple y al mismo
tiempo veloz, que es capaz de resolver problemas
de cierta magnitud.
7. CÓDIGO FUENTE
/** * Inteligencia en Redes de Comunicaciones * Curso 2011 - 2012 * Diseño e Implementación de un agente inteligente Mario A.I. * @author - Yuchen Du 100073084 * @author - Virginia Izquierdo Bermúdez 100072580 */ package ch.idsia.agents.controllers; import ch.idsia.agents.Agent;
import ch.idsia.benchmark.mario.engine.sprites.Mario; import ch.idsia.benchmark.mario.environments.Environment; import ch.idsia.benchmark.mario.environments.MarioEnvironment; public class AiAgent extends BasicMarioAIAgent implements Agent { // Variable para controlar el salto int trueJumpCounter = 0; // Variable para controlar retrocesos int trueBufferCounter = 0; public AiAgent() { super("AiAgent"); reset(); } /**
* Metodo de inicializacion Estado inicial: todos los botones sin presionar
*/ public void reset() {
action = new boolean[Environment.numberOfKeys];
action[Mario.KEY_RIGHT] = false; action[Mario.KEY_SPEED] = false; action[Mario.KEY_JUMP] = false; trueJumpCounter = 0; trueBufferCounter = 0; } /** * Metodo para chequear si hay enemigos delante * * @param environment
* : el entorno en el que se * desenvuelve Mario. De ahi sacaremos * la informacion necesaria para * interactuar con el resto de * elementos que aparecen en la * pantalla. * @return boolean existencia de un enemigo * cercano Simplemente comprobamos * la existencia de enemigos en la * posicion consecutiva del array
*/ private boolean checkEnemiesFront(Environment environment) {
byte[][] enemies = environment.getEnemiesObservationZ(2); if (enemies[marioEgoRow][marioEgoCol + 1] != 0) {
return true; } else { return false; } } /** * Metodo para chequear si hay obstaculos * * @param environment
* : el entorno en el que se * desenvuelve Mario. * @return boolean existencia de obstáculos * delante Comprobamos la * existencia de elementos bloqueantes * por delante de la posicion * actual de la figura de Mario * Prestamos atencion a si el elemento * se trata de una moneda ya que de ser * asi, no se le considera como
* un elemento bloqueante */
private boolean checkObsFront(Environment environment) {
byte[][] obstacles = environment.getLevelSceneObservationZ(2); if ((obstacles[marioEgoRow][marioEgoCol + 1] != 0 && obstacles[marioEgoRow][marioEgoCol + 1] != 2) || (obstacles[marioEgoRow][marioEgoCol + 2] != 0 && obstacles[marioEgoRow][marioEgoCol + 2] != 2) || (obstacles[marioEgoRow][marioEgoCol + 3] != 0 && obstacles[marioEgoRow][marioEgoCol + 3] != 2) || (obstacles[marioEgoRow - 1][marioEgoCol + 1] != 0 &&
- 26 -
obstacles[marioEgoRow - 1][marioEgoCol + 1] != 2)) {
return true; } else { return false; } } /** * Metodo para chequear si hay un agujero delante * * @param environment
* : el entorno en el que se * desenvuelve Mario. * @return boolean existencia un agujero delante * Verificamos si hay en la * columna delante existe una posicion * vacia
*/ private boolean checkGapFront(Environment environment) {
byte[][] obstacles = environment.getLevelSceneObservationZ(2); if (obstacles[marioEgoRow + 1][marioEgoCol + 1] == 0) {
return true; } else { return false; } } /** * Metodo para chequear si se puede saltar * * @param environment * : el entorno en el que se * desenvuelve Mario.
* @return boolean si debemos saltar Comprobamos * la existencia de enemigos * por encima de la posicion de Mario. * Si se diera la situación, no
* se debe saltar para evitar colision. */
private boolean checkJump(Environment environment) {
byte[][] things = environment.getEnemiesObservationZ(2); if (things[marioEgoRow - 1][marioEgoCol] != 0 || things[marioEgoRow - 2][marioEgoCol] != 0
|| things[marioEgoRow - 3][marioEgoCol] != 0) {
return false; } else { return true; } } /**
* Metodo para chequear si se ha llegado a una * situacion de estancamiento
* * @param environment
* : el entorno en el que se * desenvuelve Mario. * @return boolean si Mario esta estancado en * algun punto Verificamos si * Mario se encuentra en una situacion * de estancamiento, es decir, * si por delante de el hay un muro * infranqueable, pero al mismo * tiempo existe elementos irrompible * por encima de el
*/ private boolean stucked(Environment environment) {
byte[][] things2 = environment.getLevelSceneObservationZ(2); if ((things2[marioEgoRow - 2][marioEgoCol] == -60 || things2[marioEgoRow - 3][marioEgoCol] == -60)
&& (things2[marioEgoRow][marioEgoCol + 1] == 1 && things2[marioEgoRow - 1][marioEgoCol + 1] == 1)) {
return true; } else { return false; } }
/** * Metodo para comprobar si hay monedas cerca * * @param environment * : el entorno en el que se * desenvuelve Mario.
* @return boolean si hay monedas cerca * Comprobamos en los alrededores de la * posicion actual de Mario la * existencia de monedas
*/ private boolean areCoins(Environment environment) {
byte[][] coins = environment.getLevelSceneObservationZ(2); if (coins[marioEgoRow - 1][marioEgoCol] == 2 || coins[marioEgoRow - 1][marioEgoCol + 1] == 2) {
return true; } else { return false; } } /**
* Metodo para comprobar si hay enemigos cerca * en los instantes finales de
* un salto * * @param environment
* : el entorno en el que se * desenvuelve Mario. * @return boolean la existencia de peligro * cercana Comprobamos si hay * enemigos alrededor de la zona en * donde caeria mario
*/ private boolean checkWhileFalling(Environment environment) {
if (things[marioEgoRow + 1][marioEgoCol + 1] != 0 || things[marioEgoRow + 1][marioEgoCol + 2] != 0 || things[marioEgoRow + 1][marioEgoCol + 3] != 0 || things[marioEgoRow + 2][marioEgoCol + 3] != 0 || things[marioEgoRow + 2][marioEgoCol + 2] != 0) {
return true; } else { return false; } } /**
* Metodo para comprobar si ha salido una flor * enemiga de alguna de las
* tuberías cercanas * * @param environment
* : el entorno en el que se * desenvuelve Mario. * @return boolean la existencia de una flor * carnivora Chequeamos en los * puntos cercanos si hay alguna flor * enemiga
*/ private boolean checkFlower(Environment environment) {
byte[][] things = environment.getEnemiesObservationZ(0); if (things[marioEgoRow - 2][marioEgoCol + 1] == 91 || things[marioEgoRow - 3][marioEgoCol + 1] == 91 || things[marioEgoRow - 4][marioEgoCol + 1] == 91 || things[marioEgoRow - 2][marioEgoCol + 2] == 91 || things[marioEgoRow - 3][marioEgoCol + 2] == 91 || things[marioEgoRow - 4][marioEgoCol + 2] == 91) {
return true; } else { return false; } } /**
* Metodo auxiliar para imprimir el array por la * pantalla
- 27 -
* * @param environment
* : el entorno en el que se * desenvuelve Mario.
* @return void */ private void printout(Environment environment) {
byte[][] things = environment.getLevelSceneObservationZ(2);
for (int i = 0; i < 19; i++) { System.out.println(""); for (int j = 0; j < 19; j++) {
System.out.print(things[i][j]+" ");
} } } /**
* Metodo para decidir en cada momento las * acciones a tomar
* * @return boolean[] el array indicando los * botonos que se deben mantener * pulsado Utilizando los métodos * definidos anteriormente, * comprobamos la situacion en la que se * encuentra Mario en cada * momento y decidimos los botones que * debemos accionar
*/ public boolean[] getAction() {
MarioEnvironment env = MarioEnvironment.getInstance(); // Si Mario se dispone de la habilidad de // disparo, // encendemnos y apagamos alternativamente // el botón
// de SPEED y así disparar continuamente if (Mario.fire) {
action[Mario.KEY_SPEED] = !action[Mario.KEY_SPEED];
} // En caso contrario, avanzamos a // velocidad regular
else { action[Mario.KEY_SPEED] = false; }
// Primero comprobamos si Mario esta // retrocediendo
// para evitar un enemigo o un obstaculo if (trueBufferCounter > 0) { trueBufferCounter--;
// Si este contador se ha llegado // a 0, dejamos de mover // hacia la izquierda y volvemos // hacia la derecha
if (trueBufferCounter == 0) { action[Mario.KEY_RIGHT] = true; action[Mario.KEY_LEFT] = false;
} }
// Ahora comprobamos si Mario estaba // saltando,
// gracias al contador trueJumpCounter if (trueJumpCounter > 0) { trueJumpCounter--;
// Si mario ya se encuentra sobre // alguna plataforma,
// reseteamos el contador if (isMarioOnGround) { trueJumpCounter = 0; }
// Si el contador esta a 0, // dejamos de pulsar el boton de // saltar
if (trueJumpCounter == 0) { action[Mario.KEY_JUMP] = false;
} }
// Si no se da lugar ninguna de las // situaciones anteriores, // Comprobamos si hay enemigos, obstaculos // o agujeros delantes
// y asi determinar las acciones a // desarrollar else if ((checkEnemiesFront(env) || checkObsFront(env) || checkGapFront(env)) && trueBufferCounter == 0) {
if (isMarioOnGround == false) { // Si hay enemigos // cercanos al punto de // caida,
// retrocedemos if (checkWhileFalling(env)) {
action[Mario.KEY_RIGHT] = false; action[Mario.KEY_LEFT] = true; trueBufferCounter = 1; } }
// Si se puede saltar con // seguridad y Mario no se // encuentra en una situacion de // estancamiento, movemos hacia // la derecha
action[Mario.KEY_RIGHT] = true; // Si no hay una flor // enemiga fuera de una // tuberia, saltamos // En caso contrario // esperamos hasta que // la flor se refugie
if (!checkFlower(env)) { action[Mario.KEY_JUMP] = true; trueJumpCounter = 7; } }
// Si no es asi, retrocedemos // hacia la izquierda
else { action[Mario.KEY_RIGHT] = false; action[Mario.KEY_LEFT] = true; trueBufferCounter = 3; } } // Si hay monedas cerca
else if (areCoins(env) && trueBufferCounter == 0) {
// Si saltar no implica ningun // peligro, // saltamos un poco para coger // mas monedas
if (checkJump(env)) { action[Mario.KEY_RIGHT] = true; action[Mario.KEY_JUMP] = true;
trueJumpCounter = 1; } }
// Finalmente si no pasa nada, // simplemente
// movemos hacia la derecha else if (trueBufferCounter == 0) { action[Mario.KEY_RIGHT] = true; action[Mario.KEY_JUMP] = false; } return action; } }
8. REFERENCIAS
[1] Página web de Mario AI Championship 2011:
http://www.marioai.org/
[2] Ejemplo del árbol de decisión tomado:
http://dms.irb.hr/tutorial/tut_dtrees.php
- 28 -
JUGADOR VIRTUAL DE PÓKER TEXAS HOLD’EM Alberto Álvarez Polegre
Ingeniería de Telecomunicación Universidad Carlos III de Madrid
Lucas Bernalte Pérez Ingeniería de Telecomunicación Universidad Carlos III de Madrid
David Díaz Chinea Ingeniería de Telecomunicación Universidad Carlos III de Madrid
RESUMEN El póquer es un juego de cartas de los llamados de "apuestas", en
los que los jugadores, con todas o parte de sus cartas ocultas,
hacen apuestas sobre una puja inicial, recayendo la suma total de
las apuestas en el jugador o jugadores con la mejor combinación
de cartas.
Palabras Clave
Póker, Texas Hold „em, probabilidad, jugada, mano, estrategia.
1. INTRODUCCIÓN El Texas Hold‟em es una variación del conocido juego de cartas
conocido como Póker. En este juego se utilizan las 52 cartas de la
baraja inglesa, las cuales tienen los valores, de menor a mayor, 2,
3, 4, 5, 6, 7, 8, 9, 10, J, Q, K y A, en las cuatro combinaciones de
palos diferentes: trébol , corazones , picas , y diamantes .
En el póker se realizan una serie de apuestas en las que el jugador
que obtenga la mejor combinación de cartas será el ganador de
esta, llevándose el bote acumulado que será la suma de todo lo
apostado por el resto de jugadores. Además el jugador también
puede obtener el premio si el resto de jugadores de la mesa se ha
retirado de la partida. Cada jugador será eliminado si pierde todas
las fichas que ha apostado.
2. REGLAMENTO Esta variación se caracteriza sobre todo porque cada jugador
obtiene dos cartas boca abajo al inicio de la partida, que serán
siempre fijas. Dichas cartas serán reveladas al final de la ronda
por parte de los jugadores que queden al cerrar las apuestas, en
caso de que todos se retiren si el que no lo haga lo desea, o si los
apostantes que siguen en la partida apuestan todas sus fichas
restantes (jugada conocida como All-In).
A partir de aquí cada jugador comienza apostando a continuación
de la ciega grande (jugador que parte obligatoriamente con la
apuesta mínima, de modo que el jugador solo puede igualarla o
aumentarla si no quiere retirarse) siguiendo las agujas del reloj. A
esta ronda se le denomina, en términos del juego, Pre-Flop, y si
quedan más de dos jugadores tras esta se seguirá apostando.
Posteriormente se inicia una fase de tres rondas conocida como
Post-Flop, cada una con sus respectivas rondas de apuestas y ,en
cuanto a las mismas, a partir de aquí el jugador puede pasar (no
apostar nada) solo si los anteriores han pasado o es él el primero;
retirarse de la partida, igualar la apuesta o subirla. En este caso la
ronda la iniciará el jugador a la izquierda de la ciega grande,
conocido como ciega pequeña (apuesta inicialmente la mitad que
la grande). La primera de estas tres rondas se conoce como Flop y
en ella se mostrarán en la mesa tres cartas sacadas del montón de
cartas que no se ha repartido. Posteriormente pasamos al Turn
donde solo se enseña una carta conocida como Cuarta Calle. Por
último, se gira una última carta, Quinta Calle, en la ronda llamada
River, formando las cinco Cartas Comunes. Con tres de estas
cartas mostradas combinadas con las dos obtenidas al principio de
la partida el jugador deberá formar su mano de cartas con las que
intentar ganar la partida. Así pues a partir de aquí se presentan las
manos posibles que puede tener cada jugador, ordenadas de mayor
a menor valor.
Escalera Real de Color
La mejor jugada del póker. Comprende las cartas 10, J, Q, K y A
del mismo palo.
Escalera de Color
Cinco cartas de orden consecutivo del mismo palo. Cuanto mayor
sea la carta más alta de la escalera, mejor es el ranking de la
mano. En este ejemplo la carta más alta es el 10; vencería a una
escalera de color con un 9 de carta más alta.
Póker
Cuatro cartas del mismo valor. Cuanto más alto es el valor de
estas cuatro cartas, más alto es el ranking de la mano. En caso de
empate gana la mano cuya quinta carta sea más alta.
- 29 -
Full
Esta jugada reúne 3 cartas de un valor y 2 de otro. Cuando se
comparan dos fulls, gana el que tiene el valor de las tres cartas
más alto. Así pues, un full 7-7-7-2-2 supera a un full 5-5-5-A-A.
En caso de que los tríos sean del mismo valor en dos manos, gana
la mano que tenga la pareja de cartas restante más alta, con lo que
por ejemplo 7-7-7-A-A superaría a 7-7-7-K-K.
Color
El color lo forman cinco cartas no consecutivas del mismo palo.
Gana el desempate entre dos colores aquel que tenga la carta más
alta.
Escalera
Para la escalera se precisan cinco cartas de valor consecutivo.
Entre dos escaleras gana la que sea más alta. Por otra parte, el As
puede usarse para formar la escalera A-K-Q-J-10, que sería una
Escalera Real, y también la escalera 5-4-3-2-A.
Poquer.com.es. xx
Trío
Lo componen tres cartas del mismo valor. Entre dos tríos gana el
que está formado por cartas más altas. Si ambos tríos están
formados por cartas del mismo valor, decide el desempate la carta
más alta de las dos restantes de que consta la mano, y si esas dos
cartas fueran iguales, se compararían las quintas cartas de cada
mano.
Doble Pareja
Una doble pareja está formada por dos cartas del mismo valor en
combinación con otras dos cartas también de un mismo valor,
pero diferente al valor de las dos primeras. Cuando dos manos
muestran doble pareja, gana la mano cuya pareja es más alta.
Como siempre, en caso de empate decide la carta más alta.
Pareja
Dos cartas del mismo valor. Cuanto más alto es el valor de la
pareja, más alto es su ranking. En caso de igualdad, se recurre a la
carta más alta.
Carta Más Alta
Cuando ningún jugador consigue formar una de las jugadas arriba
expuestas, gana la mano aquel que tiene la carta más alta. Y en
caso de empate, se usa la siguiente carta más alta.
3. OBJETIVO Y PRESENTACIÓN DEL
MODELO
3.1 Introducción Primero, decir que un modelo que simule el comportamiento de
un humano jugando al póker, es casi inviable, por la cantidad de
factores que influyen, tanto dentro del juego como factores
externos.
El modelo que se presenta aquí, y la inmensa mayoría de modelos
existentes son modelos simplificados, que sólo tienen en cuenta
factores internos del juego y siempre será una máquina, luego
siempre pensará “con la cabeza fría” y elegirá la mejor jugada en
cada momento.
A corto plazo puede no resultar victorioso, pero este modelo sigue
un criterio de probabilidades, por el cual está comprobado que a
medio/largo plazo se obtienen ganancias.
Nuestro modelo empezará siguiendo una determinada estrategia, y
podrá ir cambiando a lo largo de la partida, dependiendo del
comportamiento del rival.
3.2 Modelos de jugador de Póker Podemos analizar que básicamente hay distintos tipos
de jugadores de Póker. Encontramos que podemos agrupar a los
diferentes tipos de jugadores en cuatro categorías, de acuerdo a
dos criterios: tight y loose y por otro aggressive y passive.
Así podemos empezar por explicar que significa tight y loose y
aggressive y passive.
De acuerdo con la cantidad de manos de Póker podemos
clasificar a un jugador como tight o loose. Un jugador loose juega
muchas y diferentes manos. En cambio uno tight juega pocas
manos y además con buenas cartas, es decir que tiene muchas
posibilidades de ganar.
Asimismo, encontramos los jugadores pasivos y agresivos. En
general el jugador pasivo sigue las apuestas del otro de la mesa de
- 30 -
Póker, en cambio el agresivo sube con frecuencia la apuesta y
toma la iniciativa.
3.3 Fuerza de la mano inicial
3.4 Parámetros en los que basar las
decisiones. En esta sección explicares los parámetros en los que se basa el
jugador para tomar una decisión u otra.
3.4.1 Probabilidad umbral La probabilidad umbral es la probabilidad mínima de ganar que
debe tener la mano para jugar. Está es diferente dependiendo la
cantidad de jugadores en mesa. Por debajo se este umbral, se
considera que la mano tiene muy pocas probabilidades de ganar y
se supone una pérdida innecesaria de fichas. A lo largo de la
partida, dependiendo del tipo de jugadores a los que nos
enfrentemos, esta probabilidad umbral variará a más o menos.
3.4.2 Fuerza de la mano La fuerza de la mano es la probabilidad que tiene ésta de ganar la
jugada sin saber qué cartas tienen nuestros adversarios. La fuerza
de la mano inicial (en el pre-flop) se basa en la tabla del punto 3.3.
A partir de aquí se calculará de la siguiente manera:
-En el Flop: ODDS*4 + 1 (%)
-En el Turn: ODDS*2 - 1 (%)
-En el River: ODDS (%)
*ODDS: Las ODDS son las cartas que faltan por salir para tener la
mano ganadora a la que aspira el jugador.
3.4.3 Ratio de ganancia El ratio de ganancia es la cantidad de fichas que ganarás (en %) en
función de la apuesta que se haga y la cantidad de fichas en el
bote. Por ejemplo, si la apuesta es 20 fichas y hay 40 fichas en el
bote, entonces el ratio de ganancia será 20/(20+40) = 0.333.
3.4.4 Ratio de devolución El ratio de devolución es (en media) la proporción en que se
multiplicará la apuesta si se continúa jugando esa mano. Se
calcula como el cociente entre la fuerza de la mano y el ratio de
ganancia. Normalmente, seguiremos jugando esa mano si este
parámetro es igual o superior a 1 (como se mostrará en el punto
4).
3.4.5 Ratio de subida El ratio de subida es la cantidad de fichas que se apostarán en caso
de que se decida ver y subir. Se calcula teniendo en cuenta los 3
parámetros anteriores de la siguiente forma:
3.4.6 Probabilidad total La probabilidad total es la suma de la fuerza de la mano con un
Random de C++. Esta parámetro ha de ser igual o superior a la
probabilidad umbral para jugar la mano.
3.4.7 Random Para simular de mejor manera el jugador virtual, utilizaremos la
función de C++ Random y así poder hacer un jugador más
imprevisible. En todas las tomas de decisiones utilizaremos esta
función.
4. DESARROLLO DEL JUEGO
4.1 Pre-Flop El jugador comprobará si es ciega grande o pequeña y pondrá la
cantidad de fichas necesarias que estas indiquen.
if (ciega_grande == true)
Poner_ciega_grande();
if (ciega_pequeña == true)
Poner_ciega_pequeña();
Luego, se reparten dos cartas a cada jugador, y en ese momento
calculamos la probabilidad que tiene nuestra mano de ganar
- 31 -
(fuerza de la mano), dependiendo del número de jugadores, de
nuestra posición en la mesa y de si hemos sido ciega (grande o
pequeña) o no.
if (ciega_grande == true || ciega_pequeña == true)
{
probabilidad_total = Fuerza_mano(mano_inicial) +
Random(0,0.2) - Random(0,0.2) + 0.05;
else
probabilidad_total = Fuerza_mano(mano_incial) +
Random(0,0.2) - Random(0,0.2);
}
Mientras las apuestas no hayan sido igualadas, calcularemos el
ratio de ganancia y el ratio de devolución para realizar la jugada.
Teniendo en cuenta estos parámetros y los factores Random
jugaremos (función Jugar) de un modo u otro (Irse, Igualar o
Subir).
A lo largo de las manos, se analizará a los adversarios y teniendo
en cuenta la variables para este análisis jugaremos siguiendo una
estrategia u otra (definidas en el punto 3.2).
4.2 Flop Con esto llegamos al Flop, donde se reparten tres cartas
comunitarias. A partir de este momento nuestra mano pasará a
tener 5 cartas, y la probabilidad para calcular la fuerza de la mano
se calculará por un método señalado anteriormente. Hay que
señalar que este método no es del todo exacto, pero nos da una
muy buena aproximación de nuestras probabilidades de ganar la
mano.
Como ya se hiciera en el Pre-Flop, calcularemos de nuevo los
parámetros básicos para la toma de decisiones y en función de
ellos jugaremos (función Jugar).
4.3 Turn Igual que en las fases anteriores, realizaremos un tipo de jugada u
otra según los parámetros básicos.
4.4 River En esta última fase se decidirá quién gana finalmente esa mano
después de las apuestas.
Como añadido, el jugador hará un All in (apostarlo todo) si sus
fichas actuales son diez veces menos que sus fichas iniciales para
intentar salvar la partida (o perder inmediatamente).
Diagrama de las fases del juego:
*FM: Fuerza de la mano
Poner ciega
Calcular FM
Irse
Subir
Igualar
Flop
Turn
River
Calcular FM
Irse
Igualar
Subir
Calcular FM
Irse
Igualar
Subir
Calcular FM Igualar
Irse
Subir
- 32 -
5. TOMA DE DECISIONES (función Jugar) En el código se ha implementado una función que decidirá cómo
jugar teniendo en cuenta el ratio de devolución.
Después de calcular este parámetros, se entrará en una serie de
condiciones para saber si ver la apuesta, subirla (o hacer un farol)
o irse.
5.1 Ratio de devolución inferior a 0.8 Este caso se considera una mano realmente mala, por lo que con
el 95% de probabilidad el jugador se irá, con un 5% subirá la
apuesta (farol) y en ningún caso igualará.
if (ratio_devolucion < 0.8)
{
if (aleatoriedad > 0.05)
Irse();
if (aleatoriedad <= 0.05)
Subir(ratio_subida);
}
5.2 Ratio de devolución inferior a 1 En este caso nuestra mano seguirá siendo bastante mala, por lo
que lo más lógico sería irse. No obstante, ha mejorado con
respecto al caso anterior conque nuestras probabilidades
cambiarán. Con un 80% de probabilidad nos iremos, subiremos
con un 15% (farol) y tan solo con un 5% igualaremos la apuesta.
if (ratio_devolucion < 1)
{
if (aleatoriedad > 0.15)
Irse();
if (aleatoriedad <= 0.15 && 0.05 < aleatoriedad)
Subir(ratio_subida);
if (aleatoriedad <= 0.05)
Igualar();
}
5.3 Ratio de devolución inferior a 1.3 En este punto nuestra mano ya se considerará buena y tendremos
opciones reales de hacernos con el boto final. Así que en este caso
igualaremos la apuesta con un 60% de probabilidad y subiremos
con un 40%. En ningún caso nos iremos.
if (ratio_devolicion < 1.3)
{
if (aleatoriedad > 0.4)
Igualar();
if (aleatoriedad <= 0.4)
Subir(ratio_subida);
}
5.4 Ratio de devolución superior a 1.3 En cuanto nuestro ratio de devolución sea superior a 1.3
significará que tenemos una mano difícilmente de ganar. Para este
caso igualaremos con un 30% y subiremos con un 70%. Tampoco
nos iremos en ningún caso.
{
if (aleatoriedad > 0.3)
Subir(ratio_subida);
if (aleatoriedad <= 0.3)
Igualar();
}
El hecho de tomar una decisión u otra dependerá del factor de
aleatoriedad que nos brinda la función Random de C++. Cuánto
apostar en caso de subida lo determinará el ratio de subirá que se
calcula con la fórmula vista en el punto 3.4.5.
En cuanto se igualen las apuesta de resolverá la jugada y se verá
qué jugador gana ese mano.
Diagrama del ratio de devolución:
Si
RD < 0.8
Irse (95%)
Subir (5%)
Si
RD < 1
Irse (80%)
Igualar (5%)
Subir (15%)
Igualar (0%)
- 33 -
*RR: Ratio de devolución
6. CONCLUSIONES
El juego está basado en la minimización del factor suerte, luego
sólo sería rentable tras un número bastante grande de manos. Y
todo esto teniendo en cuenta sólo factores del juego, aunque no se
hayan contemplado todos (sería demasiado trabajoso y casi
inviable).
Si la máquina se enfrentara a un jugador principiante, lo más
probable es que gane, puesto que todas las probabilidades usadas,
fórmulas y estrategias son reales. Está comprobado que si se juega
de esa forma se obtienen beneficios a largo plazo. Esto, sumado a
que una máquina siempre piensa fríamente y que siempre va a
elegir la que cree que es su mejor opción, la hace un rival muy
difícil de batir.
Por otro lado, si tenemos el juego muy estudiado y sabemos cuál
es la mejor opción, podríamos predecir el comportamiento del
jugador virtual.
Cabe mencionar, en cuanto al tema de poker y la inteligencia
artificial, el ordenador Polaris, que se usó como experimento,
contra Phil Laak y Ali Eslami, dos jugadores de póquer de Los
Ángeles clasificados entre los mejores del mundo. Aunqué ganó y
empató las 2 primeras partidas (de 500 manos cada una), al final
el resultado se decantó para el lado humano.
Todo esto demuestra que a pesar de los años de estudio de la
inteligencia artificial, todavía estamos en una constante evolución
y nos queda mucho camino por recorrer.
7. BIBLIOGRAFÍA
[1] Wikipedia, La Enciclopedia Libre, www.wikipedia.org
[2] Cowboy Programming, Programming Poker AI
[3] Reglas del Póker, Tipos de jugaroes,
www.reglasdelpoker.es/Hay-diferentes-tipos-de-jugadores-
de-poker
[4] Apuntes de la asignatura Inteligencia en Redes de
Comunicación, Universidad Carlos III de Madrid
[5] Probabilidades Póker, www.probabilidadespoker.es
[6] World Series of Poker: Tournoment of Championship,
vídeojuego PlayStation 2
[7] Poker Stars, www.pokerstars.com
8. ANEXO. PSEUDO CÓDIGO EN C++
// Variables
int numero_jugadores,
probabilidad_umbral, probabilidad_total,
aletoriedad;
int fichas_iniciales,
fichas_disponibles, bote, apuesta,
ratio_devolucion, ratio_subida;
bool ciega_grande, ciega_pequeña,
apuesta_igualada, hablo, perder;
char mano_inicial [2],
cartas_comunitarias [5];
// Funciones (sólo se define Jugar())
void Poner_ciega_grande(void);
void Poner_ciega_pequeña(void);
void Igualar(void);
void Irse(void);
void Subir(int);
void All_in(void);
int Fuerza_mano(char);
int Ratio_ganancia(int, int);
bool Jugar(int, int, int, int);
bool Resolucion_jugada(void);
void main(void)
{
// Cálculo de probabilidad umbral
suponiendo un máximo de cuatro jugadores
switch (numero_jugadores)
{
case 2:
probabilidad_umbral = 0.58;
case 3:
probabilidad_umbral = 0.42;
case 4:
probabilidad_umbral = 0.32;
}
Si
RD < 1.3
Irse (0%)
Igualar (60%)
Subir (40%)
Si
RD > 1.3
Irse (0%)
Igualar (30%)
Subir (70%)
- 34 -
// Inicio de la partida
while (1)
{
// Se ponen las ciegas
if (ciega_grande == true)
Poner_ciega_grande();
if (ciega_pequeña == true)
Poner_ciega_pequeña();
// Se reparte la mano (dos cartas
privadas)
if (ciega_grande == true ||
ciega_pequeña == true)
{
probabilidad_total =
Fuerza_mano(mano_inicial) +
Random(0,0.2) - Random(0,0.2) + 0.05;
else
probabilidad_total =
Fuerza_mano(mano_incial) + Random(0,0.2)
- Random(0,0.2);
}
// Pre-Flop
if (probabilidad_total >=
probabilidad_umbral)
{
while (apuesta_igualada == false)
{
Ratio_ganancia(bote,
apuesta);
ratio_devolucion =
Fuerza_mano / Ratio_ganancia;
aleatoriedad = Random(0,1);
Jugar(Ratio_ganancia, Fuerza_mano,
ratio_devolucion, aletoriedad);
}
}
// Flop (tres cartas comunitarias)
probabilidad_total =
Fuerza_mano(mano_inicial,
cartas_comunitarias)
+ Random(0,0.2) -
Random(0,0.2);
if (probabilidad_total >=
probabilidad_umbral)
{
while (apuesta_igualada == false
|| perder == false)
{
Ratio_ganancia(bote,
apuesta);
aleatoriedad = Random(0,1);
Jugar(Ratio_ganancia,
Fuerza_mano, ratio_devolucion,
aletoriedad);
}
}
// Turn (cuatro cartas comunitarias)
probabilidad_total =
Fuerza_mano(mano_inicial,
cartas_comunitarias)
+ Random(0,0.2) -
Random(0,0.2);
if (probabilidad_total >=
probabilidad_umbral)
{
while (apuesta_igualada == false
|| perder == false)
{
Ratio_ganancia(bote,
apuesta);
ratio_devolucion =
Fuerza_mano / Ratio_ganancia;
aleatoriedad = Random(0,1);
Jugar(Ratio_ganancia,
Fuerza_mano, ratio_devolucion,
aletoriedad);
}
}
// River (cinco cartas comunitarias)
probabilidad_total =
Fuerza_mano(mano_inicial,
cartas_comunitarias)
+ Random(0,0.2) -
Random(0,0.2);
if (probabilidad_total >=
probabilidad_umbral)
{
while (apuesta_igualada == false
|| perder == false)
{
Ratio_ganancia(bote,
apuesta);
ratio_devolucion =
Fuerza_mano / Ratio_ganancia;
aleatoriedad = Random(0,1);
Jugar(Ratio_ganancia,
Fuerza_mano, ratio_devolucion,
aletoriedad);
}
}
bool Jugar(void){
if (hablo == true)
{
if (fichas_disponibles <
fichas_iniciales / 10)
All_in();
else
- 35 -
if (ratio_devolucion < 0.8)
//Muy mala mano
{
if (aleatoriedad >
0.05)
Irse();
if (aleatoriedad <=
0.05)
// Farol
ratio_subida = (10*Ratio_ganancia)
* fichas_disponibles /
(100*Fuerza_mano);
Subir(ratio_subida);
}
else if
(ratio_devolucion < 1) // Mala
mano
{
if (aletoriedad
> 0.15)
Irse();
if (aletoriedad
<= 0.15 && 0.05 < Aletoriedad)
// Farol
ratio_subida = (10*Ratio_ganancia)
* fichas_disponibles /
(100*Fuerza_mano);
Subir(ratio_subida);
if (aletoriedad
<= 0.05)
Igualar();
}
else if
(ratio_devolicion < 1.3) // Buena
mano
{
if (aletoriedad
> 0.4)
Igualar();
if (aletoriedad
<= 0.4)
ratio_subida = (10*Ratio_ganancia)
* fichas_disponibles /
(100*Fuerza_mano);
Subir(ratio_subida);
}
else
// Muy
buena mano
{
if (aletoriedad
> 0.3)
ratio_subida = (10*Ratio_ganancia)
* fichas_disponibles /
(100*Fuerza_mano);
Subir(ratio_subida);
if (aletoriedad
<= 0.3)
Igualar();
}
}
else
perder =
Resolucion_jugada();
}
- 36 -
Inteligencia artificial en el mundo de la aviación
Daniel Ruesga Ibañez
Estudiante Ing. Telecomunicación Universidad Carlos III de Madrid
Avda. De la Universidad, 30 28911, Leganes (Madrid)
Hector Molla Ruiz Estudiante Ing. Telecomunicación Universidad Carlos III de Madrid
Avda. De la Universidad, 30 28911, Leganés (Madrid)
RESUMEN
En este documento vamos a realizar un estudio del impacto que ha
tenido la inteligencia artificial en el mundo de la aviación
moderna. Nos centraremos en los sistemas de pilotaje automático
disponibles en los aviones y su avance hasta la los vehículos no
tripulados (UAVS).
Categorías y Descriptores de Temas
[Inteligencia Artificial]: sistemas expertos [Aviónica]: pilotaje
Terminus Generales
Documentación, diseño, fiabilidad, seguridad, factores humanos,
teoría.
Palabras Clave Sistemas expertos, aviación, piloto automático, navegación, vuelo,
uav.
1. INTRODUCTION
Un piloto automático es un sistema mecánico, eléctrico o
hidráulico usado para guiar un vehículo sin la ayuda de un ser
humano. Aunque puede usarse en distintos tipos de vehículos
nosotros nos centramos en el pilotaje de aviones. De esta forma
tenemos que el sistema de piloto automático que se implementan
en los aviones son sistemas expertos.
Un sistema experto es una aplicación informática que emula la
forma de pensar y razonar de un experto en un campo
determinado, que normalmente requiere de una gran cantidad de
conocimientos asociados. Con esta clase de sistemas lo que se
busca es una mejora en la rapidez y velocidad de las respuestas.
El sistema de piloto automático tiene implementados los
conocimientos necesarios de navegación y fundamentos de vuelo
necesarios para pilotar un avión de manera automática sin
necesidad de la interacción del piloto.
Un vuelo está dividido en varias etapas: rodaje, despegue,
ascenso, crucero, descenso, aproximación, y aterrizaje. De todas
las anteriores las únicas etapas que nos pueden ser controladas
únicamente por el sistema de pilotaje automático son la de rodaje
y despegue.
2. SISTEMAS EXPERTOS
Como ya se ha comentado en la introducción un sistema experto
es aquel que puede almacenar el conocimiento de un experto en
un campo determinado y limitado, y a su vez solucionar
problemas mediante la inducción- deducción lógica.
Los sistemas expertos son programas de computación que
capturan el conocimiento de un experto y tratan de imitar su
proceso de razonamiento cuando resuelven los problemas en un
determinado dominio.
Para que un sistema experto sea efectivo, los usuarios tienen que
interactuar de una manera sencilla, siendo necesarias dos
capacidades para poder cumplirlo:
1. Explicar conocimientos y razonamientos: es necesario
que al realizar los sistemas se sigan unas pautas y reglas
que resulten comprensibles para lograr que se genere
una explicación para cada una de ellas.
2. Obtención mientos e integrador del
sistema: mecanismos que modifican los conocimientos
previos. Puede decirse que los sistemas son el resultado
de investigaciones en el campo de la inteligencia
artificial, puesto que no busca sustituir a los expertos
sino que sirvan de ayuda a la hora de realizar las tareas
con mayor rapidez y eficacia.
Los sistemas expertos están formados por diversos elementos:
base de conocimientos, base de hechos, motor de inferencia,
módulos de justificación e interfaz de usuario.
2.1 Base de conocimientos
Son bases de datos con los conocimientos de los expertos
implementados en el sistema sobre el campo concreto de trabajo.
A través de la base de conocimiento, el sistema experto obtiene
los razonamientos que debe aplicar en su funcionamiento.
- 37 -
2.2 Base de hechos
Compuesta por los hechos descubiertos durante el análisis que se
realiza cuando existe algún problema.
2.3 Motor de inferencia
Se encarga de modelar el proceso del razonamiento humano. Para
ello utiliza el conocimiento disponible en las bases de
conocimientos y hechos.
2.4 Módulos de justificación
Se encarga de proporcionar una explicación al usuario del
razonamiento que ha utilizado el sistema experto para obtener una
conclusión determinada.
2.5 Interfaz de usuario
La interfaz de usuario es el medio por el cual la máquina y el
usuario se comunican. Comprende todos los puntos posibles de
contacto entre el usuario y la máquina. Comúnmente suelen ser
con diseños intuitivos, fáciles de entender y manejar.
3. FUNDAMENTOS DE VUELO
Es necesario profundizar un poco en los fundamentos de vuelo de
los aviones para entender como el piloto automático es capaz de
manejar un avión de manera independiente.
3.1 Sustentación
El principio básico por el que los aviones se mantienen en el aire
y consiguen volar es por la fuerza de sustentación. Se crea gracias
a las alas de los aviones, la cola y en general su estructura. Esta
fuerza que se ejerce consigue contrarrestar al peso propio de la
aeronave manteniéndola de esta forma en el aire.
3.2 Control aeronave
Para el movimiento de la aeronave es necesaria una fuerza de
empuje que se obtiene gracias a los motores de reacción. Estos
motores se encargan de contrarrestar la resistencia aerodinámica
que se genera precisamente por la sustentación.
Los aviones son capaces de rotar sobre tres ejes perpendiculares
entre sí. El punto donde se cruzan estos tres ejes se encuentra en
el centro de gravedad del avión. Los tres ejes son los siguientes:
Transversal
Este eje cruza de una punta a la otra de las alas del avión.
El movimiento asociado a este eje se le llama cabeceo y su
función es la de levantar el morro del avión para variar su
sustentación.
Longitudinal
Este eje cruza el avión desde el morro hasta la cola.
El movimiento asociado a este eje se le llama alabeo y consiste en
levantar un ala mientras bajas la otra.
Vertical
Este eje cruza el avión desde la parte inferior hasta la superior
pasando por el centro de gravedad.
El movimiento asociado a este eje se le llama guiñado y sirve para
modificar el rumbo hacia el que apunta el morro del avión.
Fig.1. Estructura sistema experto
Fig.2. Fuerzas sobre aeronave
Fig.3. Ejes del avión
- 38 -
Para el control de los movimientos, la aeronave dispone de una
serie de superficies de control que se encuentran en las alas:
Alerones: Se tratan de superficies móviles colocadas en
los extremos de las alas del avión, sobre el borde de
salida. La funcionalidad de los alerones es la de
controlar el movimiento de alabeo.
Flaps: Son dispositivos de hipersustentación que están
colocados también en el borde de salida del ala.
Normalmente se encuentran cerrados y cuando se
utilizan se despliegan separándose del ala. Los flaps
solo se usan en determinadas maniobras como el
despegue y el aterrizaje.
Spoilers: Son superficies con movilidad situadas en el
extradós del ala. El objetivo es reducir la fuerza de
sustentación que se genera en el ala.
Slaps: Son dispositivos hipersustentadores como los
flaps con la diferencia de que estos están situados sobre
el borde de ataque del ala y sirven para aumentar la
curvatura de esta.
Existen también otras superficies necesarias para el control del
avión pero que a diferencia de las anteriores no se encuentran en
el ala. Estas son el timón de dirección y el de profundidad.
Timón de dirección: Es una superficie de control
generalmente colocada en el estabilizador vertical y
cuya función es la de controlar el movimiento de
guiñada.
Timón de profundidad: Es una superficie
estabilizadora situada en la parte posterior del avión y
su función es la de controlar el movimiento de cabeceo
4. SISTEMA DE NAVEGACION
El sistema de navegación de un avión esta compuesto por varios
instrumentos esenciales que permiten orientarse seguir el rumbo
deseado. Los instrumentos básicos del sistema de navegación son
los siguientes:
Brújula: Permite conocer el rumbo que esta siguiendo
el avión.
Indicador de rumbos: Permite eliminar los defectos de
la brújula.
ADF: Capta la señal emitida por una estación terrestre y
nos muestra la dirección en la que se encuentra.
DME: Calcula la distancia del avión a un punto emisor.
CDI: Muestra la posición relativa de la aeronave con
respecto al radial que queremos seguir.
ILS: Muestra el ángulo de descenso y la alineación con
la pista de aterrizaje.
5. PILOTO AUTOMATICO
Una vez comprendimos los componentes básicos que permiten a
los aviones moverse y los sistemas que proporcionan la
información necesaria para la navegación podemos mostrar el
funcionamiento del piloto automático.
El avión está equipado para su guiado automático con dos
computadores digitales de vuelo (DFGG) que suministran la
información necesaria para la realización de las funciones de
piloto automático, estabilidad, empuje, altitud y dirección de
vuelo.
Los pilotos automáticos utilizan sistemas informáticos para
controlar diversos aspectos del avión, desde el control del vuelo a
componentes para la comunicación, sistemas para evitar
colisiones y maniobras de gran precisión como aterrizajes sin
visibilidad.
El sistema de piloto automático obtiene la información necesaria
de la posición del avión gracias a los sistemas implementados de
navegación. Estos datos le permiten calcular los movimientos que
serán necesarios efectuar para seguir el rumbo establecido. Los
datos obtenidos del sistema de navegación son enviamos al
sistema de gestión de vuelo que se encarga de establecer los
cambios necesarios en el rumbo y la altitud del avión.
El sistema tiene los conocimientos necesarios sobre los
fundamentos de vuelo del avión para poder actuar sobre los
diferentes elementos de control de movimiento que hemos visto
anteriormente además de sobre los motores para aumentar o
disminuir el empuje según sea necesario. Basándose en estos
conocimientos proporcionados previamente por un experto, el
sistema es capaz de controlar los ejes de cabeceo, alabeo y
guiñado del avión.
Fig.4. Superficies de control
- 39 -
Los datos necesarios de posición del avión se obtienen de un
sistema de guía inercial. Estos sistemas tienen el problema de que
acumulan errores con el tiempo de forma que se implementan
sistemas de reducción de errores.
El error que se produce en los giroscopios es conocido como error
de deriva y viene dado por las propiedades físicas del sistema, que
corrompen los datos de localización. Estos errores se resuelven
con la ayuda del procesamientos digital de señales, mediante un
filtro de Kalman hexadimensional. Siendo estas seis direcciones el
balanceo, la inclinación, orientación, altitud, latitud y longitud.
Las rutas por las que se mueven los aviones tienen asociadas un
factor de rendimiento exigido, de forma que el error tiene que ser
controlado para poder volar sobre dichas rutas. EL sistema de
pilotaje automático utiliza las ayudas de radio y los instrumentos
de navegación junto con sistemas como el GPS para corregir la
posición de la aeronave.
En la siguiente imagen podemos observar en detalle la sección de
control del piloto automático de un avión.
En el panel podemos observar los siguientes controles:
A/T: activa el control automático de la velocidad.
AP: activa el piloto automático.
HDG: activa la fijación de rumbo.
ALT: activa el seguimiento de altitud.
SPD/MACH: activan el control de velocidad en nudos o
mach.
NAV: activa el seguimiento de un radial.
APR: activa el seguimiento de ILS
BC: permite alejarse de una pista.
LVL: mantiene el avión nivelado.
Y/D: amortigua el giro.
También se tienen cuadros numéricos para establecer valores de
funcionamiento.
COURSE: establecer radial.
HDG: dirección hacia donde volar.
ALT: altitud en pies.
IAS/MACH: velocidad respecto al aire.
VS: velocidad vertical.
Un caso de demostración de un sistema de pilotaje automático se
da cuando el piloto fija un modo de control para que las alas del
avión se mantengan en un nivel concreto. Durante el vuelo se
pueden producir diferentes tipos de sacudidas de forma que el
avión puede sufrir una inclinación. Este cambio es detectado por
los sensores colocados en las alas de forma que envían dicha
información al ordenador del piloto automático, el cual procesa
los datos recibidos y toma una decisión para actuar sobre esta
variación. Esta decisión se lleva a cabo mediante el envío de las
señales necesarias a los mecanismos de control de la aeronave, en
este caso a los que controlan los alerones. Estas señales son
comandos muy específicos que indican que se tienen que producir
unos ajustes muy precisos. Esta actuación sobre los alerones
provoca que las alas se muevan de tal forma que se vuelva al nivel
establecido en el control dl piloto automático. Una vez se
restablece el nivel adecuado, el ordenador retira el comando de
actuación sobre los alerones.
Cuando el piloto automático falla el piloto puede desactivarlo
fácilmente devolviendo el control del avión a un modo manual.
Una de las limitación que se tiene en estos sistemas es la
imposibilidad de activar el piloto automatico durante la fase de
despegue, hasta que no se hayan superado los 200 pies de altitud
sobre el terreno.
6. UAV
En este último apartado del trabajo vamos a ir más allá del
concepto de piloto automático para tratar lo que se podría
considerar como la evolución lógica de este. Si bien el piloto
automático toma como principal objetivo la sustitución
momentánea y circunstancial de algunas de las funciones de un
piloto humano, llegando a tener en cuenta solo un conjunto
reducido de variables de todas la que pueden llegar a influir en la
toma de decisiones que el piloto humano, el siguiente paso
natural en la evolución de este tipo de sistemas experto sería la
sustitución completa del ser humano en el pilotaje del avión. Y
de esta idea nace el concepto de Vehículo aéreo no tripulado o,
Fig.5. Piloto automático
Fig.6. Algoritmo piloto automático
- 40 -
como comúnmente se le conoce por sus siglas en inglés, los UAV
(Unmanned Aerial Vehicle).
Los UAV pueden volar de forma autónoma o bien ser controlados
de forma remota desde una estación de control, aunque en este
trabajo nos centraremos principalmente en los que vuelan de
forma autónoma.
6.1 Piloto Automático vs UAV
Para una clara diferenciación de estos dos conceptos (piloto
automático y UAV), vamos a hacer una breve comparativa que
motive claramente la aparición de los UAV, dejando a la vista el
gran avance que estos suponen.
Un piloto automático recibe información del sistema de
gestión de vuelo acerca de las correcciones necesarias
de altitud, rumbo, etc. que han sido calculadas en base a
la información de la posición que proporciona el
sistema de navegación. Con esta información, se
pretende que el piloto automático sea capaz de actuar
sobre los distintos elementos que influyen en el
movimiento del avión para mantener el rumbo prefijado.
Una UAV, al margen de tener un piloto automático que
se encargue de todo lo descrito anteriormente, debe ser
capaz de gestionar cualquier otra situación en la que un
piloto intervendría, como puede ser: elección de rumbo
óptimo o cambios en el mismo por distintos motivos
(climáticos, situaciones de combate, obstáculos no
previstos, escasez de combustible, etc.), gestión de los
diferentes recursos del avión en función de las
necesidades del momento (combustible, munición o la
propia integridad de la aeronave).
6.2 Utilidades de los UAV
En primera instancia, puede parecer que estos aviones no
tripulados tienen y tendrán su principal mercado en el mundo
militar, pero esto no es así. Actualmente hay diversas empresas
que se dedican al desarrollo de un tipo de UAV de bajo coste
orientado a actividades civiles, ofreciendo una alternativa más
económica que evita poner en peligro vidas humanas y que
permite liberar al humano de la carga de tareas rutinarias. Algunas
de estas actividades son o podrían ser: prevención y control de
incendios, fotografía aérea, control de tráfico en carreteras,
búsqueda de personas desaparecidas, ayuda crítica en los
momentos posteriores a un desastre natural, apoyo en estudios
medioambientales, etc. Además, ya se está yendo más allá y se
están implementando flotas enteras de UAV que trabajan en
equipo en labores tan complejas como la predicción
meteorológica o la monitorización y control de incendios
forestales. En estas flotas, cada UAV no solo tiene en cuentas un
objetivo individual, sino que en la toma de sus decisiones
interviene también el trabajo llevado a cabo por el resto de UAV
del grupo, para conseguir así un resultado óptimo en conjunto.
En este momento es necesario aclarar que aunque inicialmente se
empezaron a desarrollar los UAV como aviones, también se
pueden considerar representados por estas siglas los helicópteros
no tripulados y todas aquellas aeronaves que vuelen de forma
totalmente autónoma. Es por ello por lo que se amplía su campo
de utilización a más actividades de naturaleza mucho más
delicada, como lo son el apoyo en rescates de montaña o en zonas
de difícil acceso, exploración de cuevas o cualquier tipo de
lugares desconocidos que entrañen peligro.
Además de todo esto y como muchos de los grandes avances
tecnológicos, los UAV tienen su base en la industria militar. En
este sector cobran una gran relevancia, ya que posibilitan la
realización de misiones demasiado arriesgadas para una aeronave
tripulada y además, gracias a que no se necesita un habitáculo
para el humano en su interior ni equipos para su
acondicionamiento, permite diseñar aeronaves con geometrías
mucho más difíciles de detectar por los radares enemigos.
Principalmente se utilizan para tareas de vigilancia, combate y
misiones espía.
Como último punto de la exposición del gran avance que suponen
los UAV en nuestro mundo actual, cabe señalar que a medida que
vaya evolucionando y creciendo la potencia de la Inteligencia
Artificial, llegará el día en que los aviones comerciales o
aeronaves de combate estén pilotados de forma totalmente
autónoma sin la necesidad de ningún tipo de intervención humana
más allá de la fijación de los objetivos.
6.3 IA en los UAV
Anteriormente se han enumerado algunas de las tareas que debe
realizar un UAV de forma autónoma pero, sin duda, la más
importante de todas ellas será la de la elección del rumbo óptimo.
Con toda certeza el número de variables que forman parte de esta
decisión es demasiado elevado como para analizarlo en este
trabajo, ya que se escapa a las pretensiones del mismo, pero si nos
centraremos en los algoritmos que actualmente se utilizan para, en
función de un conjunto de variables, calcular el mejor camino
entre un origen y un destino prefijados.
6.3.1 Búsqueda de la ruta óptima El algoritmo más utilizado en el presente en la búsqueda del mejor
camino posible es el algoritmo A*. Este algoritmo se basa en la
búsqueda mediante grafos del camino de menor coste entre los
nodos origen y destino. Es completo, por lo que el propio
algoritmo asegura que siempre que exista una solución, este la
encontrará.
La búsqueda se realiza a través de un espacio de nodos en el que
sólo se visitan los posibles nodos en los que se puede alcanzar una
mejor solución que la última encontrada. Para ello se hace uso de
una función heurística, que será la encargada de determinar el
nodo que supone la mejor opción.
El funcionamiento global del algoritmo se describe a
continuación:
- 41 -
En un primer paso cogemos como nodo a expandir el
nodo origen.
Expandimos el nodo origen dando lugar a todos sus
nodos hijos que cumplen que puede haber un camino al
nodo destino mejor que el que hasta ahora se ha
encontrado. Evidentemente estos hijos representarán
todos los posibles lugares a los que la aeronave podrá
llegar en un solo movimiento (considerando como un
movimiento el resultado de la actuaciones sobre los
elementos de control del rumbo de la aeronave en un
ciclo de decisión del algoritmo)
A continuación nos quedaremos con el que según la
función heurística vaya a tener un menor coste de entre
todos los nodos posibles a los que podemos llegar desde
los nodos expandidos y que no han sido, a su vez,
expandidos. Es por esto por lo que es crucial la buena
elección de la heurística a utilizar, así como los pesos
que se reparten a las diferentes variables (montañas,
tormentas, combustible, obstáculos móviles, etc.) que
influyen en la decisión.
Si el nodo al que llegamos es el nodo destino,
comprobamos si es mejor camino que el mejor
encontrado hasta el momento, sino, seguimos con el
mismo algoritmo.
Este proceso se repetirá cíclicamente hasta que no
existan otros nodos que sean capaces de mejorar el
mejor camino encontrado hasta el momento.
Un aspecto importante que se ha de tener en cuenta es
que la heurística sea admisible, es decir, que nunca se
debe tener un valor heurístico mayor que el coste
mínimo del nodo, lo cual ha de cumplirse para cualquier
nodo.
Con este algoritmo se consigue dar solución a los problemas que
se producen en algunos algoritmos de búsqueda en estructuras de
cierta complejidad, como por ejemplo el algoritmo voraz, que se
guían solo por la función heurística, la cual puede no indicar
siempre el camino de menor coste, o por el coste real de
desplazarse de un nodo a otro, pudiéndose dar la circunstancia de
que sea preciso llevar a cabo un movimiento de mayor coste para
llegar a la solución. Por este motivo en muy intuitivo el hecho de
que un buen algoritmo de búsqueda, como lo es el A*, debería
tener en cuenta los dos factores:
Valor heurístico de los nodos
Coste real del recorrido.
Centrémonos primero en la elección de la función heurística. Es
evidente que de su buena elección dependerá el buen
funcionamiento de todo el algoritmo por lo que hay que poner
especial atención es ello. Una buena función heurística será
aquella que nunca sobrestime el coste real de alcanzar el objetivo.
Las funciones heurísticas admisibles serán por naturaleza
optimistas, porque creerán que el coste de resolver el problema es
menor que el que es en realidad. Para construir una de estas
funciones admisibles podemos basarnos en dos técnicas:
Relajando la definición del problema.
Aprendiendo de la experiencia entrenando la función
con diversos tipos de problemas.
En el otro lado, tenemos la elección de los costes que suponen
cada uno de los nodos del recorrido, que habrán de ser elegidos
con especial cuidado atendiendo a una escala de prioridades que
estará formada por todo el conjunto de variables que la aeronave
tendrá en cuenta para la elección de la ruta. Como en la elección
de la función heurística, ahora también será necesario el
entrenamiento, para conseguir la experiencia necesaria que nos de
unos costes óptimos.
En la siguiente figura podemos ver un ejemplo de lo que sería una
búsqueda del camino óptimo muy simplificada. En ella podemos
apreciar como el espacio se ha dividido en un enjambre de nodos
a los que se les han asignado una serie de costes. Estos costes
podrían deberse en la vida real a multitud de factores:
combustible, obstáculos, clima, territorio enemigo, corrientes de
aire, etc. Además se puede observar como también hay nodos que
tienen coste infinito (los grises), es decir, que en ninguno de los
casos pueden ser elegidos. En la realidad estos nodos
representarían zonas no accesibles, como por ejemplo las
delimitadas por la propia elevación del terreno que se sobrevuela.
Es evidente, que si extrapolamos este algoritmo a un escenario
real, el número de nodos y de variables que influyen en el cálculo
de los costes es elevadísimo, lo que supone la ayuda de un gran
potencial computacional para poder llevar a cabo la elección de la
ruta óptima en tiempo real.
6.3.2 Gestión de flotas de UAV Otro aspecto importante a tener en cuenta en lo que a algoritmos
de navegación se refiere es la forma en la que se gestiona una flota
para poder controlar un grupo de UAV que trabajan en equipo
Fig.7. Elección de la ruta optima con A*
- 42 -
para la consecución de un objetivo común. El algoritmo utilizado
para tal fin está definido y consta de cuatro capas:
1ª) Describe el sistema de navegación encargado de la
planificación de la misión, elección de objetivos,
reparto de trabajo entre los distintos miembros de la
flota, comunicación entre ellos, etc
2ª) Es la encargada de analizar toda la información
proveniente de los sensores de los UAV
3ª) Es la que controla el sistema de interpretación (FIS).
Este sistema tiene como misión principal utilizar la
información de la capa anterior para evitar colisiones
con obstáculos dinámicos o estáticos.
4ª) En esta última capa es en la que se engloba el
sistema de navegación y el piloto automático.
Otras funciones importantes del sistema de control de flotas de
UAV serían:
Evitar colisiones entre los distintos vehículos que
forman la flota.
Control del entorno por visión mediante tratamiento y
reconocimiento de imágenes.
6.4 Proyectos de UAV
En el mercado de los UAV es evidente que, como en todo lo
relacionado con tecnología militar, los Estado Unidos están al
frente con un gran número de compañías que dedican muchos
fondos a su desarrollo. Además, también hay otros países punteros
en la materia, como por ejemplo Alemania, Japón o Israel, que
han conseguido grandes avances.
Centrándonos solo a nivel Europeo cabe destacar un gran número
de iniciativas bastante interesantes. Algunas de las más
interesantes se enumeran a continuación:
NEURON: quizás sea el UAV más famosos
(junto con el Barracuda) por su peculiar geometría.
El principal objetivo del programa es conseguir un
UAV de combate, capaz de atacar un objetivo sin
que sea detectado por ningún radar. Aquí España
tiene diversos frentes de colaboración a través de
EADS-Casa: realización del ala del avión en fibra
de carbono, de la estación de control y de la
integración del Data Link.
ADVANCED: es un programa que trata de diseñar
un UAV de gran altitud llamado HALE para su uso
como avión de reconocimiento. En este proyecto
España cobra mucha importancia, estando, junto
con otros países, al frente del mismo.
A través de los programas Marco también se están creando
distintas líneas de desarrollo de UAV. En el VPM se encuentra el
proyecto COMMETS, que se llevó a cabo en la Universidad de
Sevilla. Este proyecto consistía en el desarrollo e implementación
de una flota de UAV que fuese capaz de realizar en tiempo real
una monitorización y detección de incendios. El proyecto fue
ejecutado con éxito.
También en Sevilla, se está desarrollando el proyecto AWARE,
que consiste en la integración de una flota de UAV con redes de
sensores terrenos. En el proyecto también se contempla el
despliegue autónomo de la red a través de un conjunto de
helicópteros no tripulados y totalmente autónomos orientados
principalmente a seguridad civil y como herramienta de ayuda
ante catástrofes naturales.
ALO (Avión Ligero de Observación),
SIVA (Sistema Integrado de Vigilancia Aérea)
ALBA (Avión Ligero Blanco Aéreo)
Y otros más recientes como:
HADA (Helicóptero Adaptativo Avión)
MILANO (versión de largo alcance del SIVA)
DIANA (Avión Blanco de Bajo Coste).
Fig.8. EADS Barracuda
- 43 -
Por último vamos a ver algunos gráficos que estiman la evolución
en los próximos años del número de UAV que se van a construir y
de la cantidad de fondos que se van a invertir en su desarrollo.
7. REFERENCIAS
[1] Villena, J. Apuntes de la asignatura Inteligencia en redes de
Comunicaciones. 5º Ingeniería de Telecomunicación.
[2] Muñoz, M. A., Manual del vuelo
http://www.manualvuelo.com/
[3] Sistemas expertos:
http://es.wikipedia.org/wiki/Sistema_experto
[4] Información piloto automático:
http://es.wikipedia.org/wiki/Piloto_autom%C3%A1tico
[5] Nogueira, J. I... Apuntes de la asignatura Aviónica. 3º
Ingeniería de Telecomunicación.
[6] Empresa del sector de los UAV: http://www.iuavs.com/
[7] Información algoritmo A*:
[8] Información sobre UAV:
http://es.wikipedia.org/wiki/Veh%C3%ADculo_a%C3%A9r
eo_no_tripulado
[9] Información sobre proyectos de UAV:
http://es.wikipedia.org/wiki/Anexo:Veh%C3%ADculos_a%
C3%A9reos_no_tripulados
[10] Almudena Jiménez Sierra, Fco. Javier Muñoz Rodríguez,
Gonzalo Torres Porta,2006, Aplicación de métodos de IA
para la stoma de decisiones en simulaciones de móviles:
http://eprints.ucm.es/8938/1/TC_2006-14.pdf
[11] Raúl Morales, 2008, Incorporan un algoritmo a un AUV
para predecir el tiempo con más exactitud:
http://www.tendencias21.net/Incorporan-un-algoritmo-a-un-
avion-no-tripulado-para-predecir-el-tiempo-con-mas-
exactitud_a2844.html
[12] A. Barrientos, J. del Cerro, P. Gutiérrez, R. San Martín, A.
Martínez, C. Rossi, 2007, UAV para uso civil. Tecnología y
aplicaciones:
http://webdiis.unizar.es/~neira/docs/ABarrientos-
CEDI2007.pdf
Unidades de UAS por regiones
2012 2013 2014 2015 2016 2017
USA 189 267 1772 1722 1747 1787
Europe 283 403 572 655 492 174
Mid East 98 178 171 110 109 23
Asia 687 788 662 604 542 679
Financiación por regiones (M$)
2012 2013 2014 2015 2016 2017
USA 2105 2035 1865 1765 2095 2060
Europe 470 655 697 761 623 566
Mid East 492 280 266 43 122 448
Asia 478 510 609 625 718 613
Fig.9. Neuron
- 44 -
Sistemas Expertos en meteorología Carlos Lentisco Sánchez
Ingeniería de Telecomunicaciones Universidad Carlos III de Madrid
Av. de la Universidad, 30 28911 Leganés (Madrid)
Tania Romero Rodríguez Ingeniería de Telecomunicaciones Universidad Carlos III de Madrid
Av. de la Universidad 30 28911 Leganés (Madrid)
RESUMEN
In this paper, we describe the formatting guidelines for ACM SIG
Proceedings.
Categorías y Descripciones de Temas
[Inteligencias Artificial]: Sistemas expertos y aplicaciones
metorológicas
Términos Generales
Meteorología, Medidas, documentación, diseño y teoría.
Palabras clave
Inteligencia, meteorología, sistemas expertos, predicción
meteorológica.
1. INTRODUCCIÓN
“La inteligencia consiste no sólo en el conocimiento, sino también en la destreza de aplicar los conocimientos en la práctica”
Aristóteles define perfectamente en esta frase lo que entendemos
por inteligencia, la inteligencia es un atributo que tenemos por
naturaleza y el ser humano como creador se ve impulsado a dotar a sus creaciones (artificiales y no naturales) de este atributo,
consiguiendo de esta forma obtener un sin fin de beneficios y
aplicaciones destinados a mejorar la calidad de vida del ser
humano, o por lo menos, así debería ser.
Las aplicaciones basadas en inteligencia artificial son
innumerables y van desde la biomedicina o educación hasta la
predicción de las condiciones meteorológicas que realizan los
sistemas expertos, objeto de estudio y razón de ser de este documento.
Los fenómenos meteorológicos son ocurrencias físicas
observables dentro de la atmósfera, algunos de estos fenómenos
son por ejemplo lluvia, nieve, granito o niebla. Estos eventos pueden alterar y alteran la actividad humana proponiendo en
algunos casos situaciones de peligro y amenaza.
Esta es la razón que justifica la búsqueda del ser humano por
predecir fiablemente las condiciones meteorológicas.
A lo largo de este documento nos introduciremos más en los
sistemas expertos repasando su evolución histórica hasta nuestros días para abordar posteriormente y con mayor profundidad un
ejemplo de estos sistemas. Centrándonos en el sistema Prometeo.
2. EVOLUCIÓN HISTÓRICA
El interés del ser humano por reproducir las habilidades mentales
humanas se remontan muy atrás en la historia, desde la antigua
Grecia (mito del coloso de Rodas) y pasando por la edad medieval
(estatuas parlantes) hasta el androide Von Kempelen que jugó al ajedrez con Napoleón y el motor analítico de Charles Babbage
que calculaba logaritmos.
Hemos abierto con una cita de Aristóteles y no sin un porqué,
Aristóteles (322-384 antes de Cristo) fue el primero en formular un conjunto de leyes que gobernaban la parte racional de la
inteligencia. Desarrolló un sistema informal para razonar con
silogismos, que se podían extraer conclusiones mecánicamente a
partir de una serie de premisas iníciales.
La idea de inteligencia artificial ha ido acompañada pues por la
filosofía, en 1315 d.c. Ramón Lull adelanto que se podría obtener
razonamiento útil mediante medios artificiales. Thomas Hobbes
(1588-1679 d.c.) relacionó la inteligencia artificial con la computación numérica.
El último elemento en la discusión filosófica es la relación que
existe entre conocimiento y acción, el objetivo es pues crear un
agente que tome decisiones que sean razonables o estén justificadas. El algoritmo de Aristóteles (análisis basado en
objetivos) se implementa 2300 años más tarde por Newell y
Simon con la ayuda de su programa SRGP.
De inicio no se propone que hacer cuando varias alternativas nos llevan al mismo objetivo o que hacer si ningún camino lleva a la
solución.
Las ideas filosóficas necesitan formalizarse formalmente por las
matemáticas y Boole es el primero que desarrolla el concepto de lógica formal.
- 45 -
Aparece el teorema de incompletitud que demostró que en
cualquier lenguaje que tuviese la capacidad suficiente para
expresar las propiedades de los números naturales existen aseveraciones verdaderas no decidibles en el sentido de que no es
posible decidir su validez con ningún algoritmo.
Más tarde Turing afirma que su máquina es capaz de computar
cualquier función computable pero que ninguna máquina puede decidir si se producirá una respuesta dado una entrada o si por lo
contrario seguirá computando indefinidamente.
Otro principio importante de cara a abordar la inteligencia artificial es el concepto de intratabilidad que dice que un problema
es intratable si el tiempo que se necesita para resolverlo crece
exponencialmente con el tamaño de los casos.
Además de la lógica y cálculo otro pilar básico de la inteligencia
artificial se proporciona mediante la probabilidad, siendo
Cardano el primero que propone el concepto en si de
probabilidad. La economía empleando dicho concepto aporta su beneficio con la teoría de decisiones y juegos.
Más cerca de nuestro tiempo actual y con la Neurociencia (1861
hasta presente) se ahonda más en la IA (Inteligencias Artificial) ya que esta se basa en el estudio del sistema neurológico y en
particular, del cerebro.
Santiago Ramón y Cajal que terminó acudiendo a sesiones
espiritistas para intentar comprender aquello que no podía
comprender utilizo la técnica de Golgi para la observación de
neuronas individuales en el cerebro
La ciencia está todavía lejos en este aspecto ya que no hay ninguna teoría de cómo se almacenan recuerdos individuales.
La conclusión increíble de todo esto, por si no es ya de por si
increíble, es que una colección de pequeñas células genera
razonamiento, acción y conciencia. Los cerebros generan inteligencias.
A pesar de que una computadora puede ejecutar una instrucción
en un nanosegundo (mucho más rápido que una neurona) el cerebro acaba siendo 100.000 veces más rápido en su conjunto.
Más cercano a nuestra época y en el 1940 introducimos el campo
de ingeniería computacional, para que la inteligencia artificial
llegue a ser posible se necesitan dos cosas, inteligencia y un artefacto. El artefacto es la computadora y la ingeniería de
computación tiene como objetivo desarrollar eficaz y
eficientemente un computador inteligente. Como podemos ver la
génesis de la inteligencia artificial desde sus orígenes es extensa y complicada.
La inteligencia artificial nace en 1956 y los conceptos que se
deducen de ella se explican en la asignatura por lo que no
ahondaremos en ellos y pasaremos a presentar los sistemas expertos.
3. SISTEMAS EXPERTOS
Se considera a alguien experto en un problema cuando un
individuo tiene un conocimiento especializado sobre dicho
problema
Podría afirmarse que para resolver un problema en la práctica
habría que conocer la respuesta de antemano, ¿si no conocemos la
solución como sabremos que lo hemos resuelto?
El programa DENDRAL es el primero que enfocan este problema, diseñado por Feigebaum y Lederberg encuentran una solución al
problema de inferir una estructura molecular a partir de la
información proporcionada por un espectro de masas. Se resolvía
de la siguiente manera: generación de todas las posibles estructuras que correspondieran a la formula, predicción a
posteriori del espectro de masas y comprobación con el espectro
real.
A continuación comienza el proyecto de programación heurística (PPH) se dedico a determinar el grado con el que la nueva
metodología de sistemas expertos podía aplicarse a otras áreas de
la actividad humana.
Los sistemas expertos emulan el razonamiento de un experto en un dominio concreto. Con ellos se busca una mejor calidad y
rapidez en las respuestas dando así lugar a una mejora de la
productividad del experto, en la mayoría de las ocasiones no
suplen al experto pero si lo ayudan en su labor.
Para un persona sería una experiencia traumática realizar una
búsqueda de reglas posibles al completado de un problema,
mientras la persona responde a las preguntas formuladas por el
sistema experto este recorre las ramas más interesantes del árbol hasta dar con la respuesta al fin del problema.
Estos SSEE (sistemas expertos) son aplicaciones informáticas, son
una amalgama de programas cimentados sobre una base de
conocimientos de uno o más expertos en un área. Estos sistemas imitan a los humanos en la resolución de problemas, que no
necesariamente tienen que estar relacionados con la IA, aunque en
este documento es en ese tipo de sistemas expertos en los que nos
vamos a centrar.
Los sistemas expertos tienen una gran flexibilidad ya que solo
basta con introducir una nueva regla sin necesidad de cambiar el
funcionamiento del programa.
Otra de las ventajas de este tipo de sistemas es la gran cantidad de información que manejan, manejar tal volumen de información es
una tarea compleja para el analista humano.
- 46 -
Un SE se basa en conocimiento declarativo (hechos sobre objetos)
y de control (información sobre el seguimiento de una acción).
Este tipo de sistemas tienen una serie de requisitos para poder ser considerados eficaces.
En primer lugar deben ser capaces de dar explicaciones sobre los
razonamientos a los que llegan. Cada regla debe tener su
explicación y debe estar basada en hechos.
En segundo lugar, un SE, debe ser capaz de adquirir conocimiento
fruto de la experiencia. Es decir, tiene que ser capaz de modificar
los conocimientos almacenados si la experiencia indica que no
son correctos del todo.
Las partes básicas de un SE, como ya se vio en clase, son la base
de conocimientos, la base de hechos, el motor de inferencia, los
módulos de justificación y la interfaz de usuario.
Existen diversos tipos de SE atendiendo al modo de llegar a la solución de los problemas que se plantean. Están los sistemas
basados en reglas previamente establecidas (lógica difusa), los
basados en casos (CBR, razonamiento basado en casos) y los
basados en redes bayesianas (razonamiento basado en la estadística y en el teorema de Bayes).
Algunos ejemplos importantes dentro del ámbito de los SSEE son
DENDRAL (como se cito antes), XCon, Mycin, CLIPS, Prolog…
4. SISTEMAS EXPERTOS EN EL ÁMBITO
DE LA PREDICCIÓN METEOROLÓGICA
Este documento ha comenzado con una cita de Aristóteles, este
filósofo griego no solo reflexionó sobre la inteligencia sino que también fue el primero en hablar de la meteorología. Él acuño ese
término que proviene del griego meteoron (referente a objetos
altos en el cielo). De esta forma, sin saberlo, Aristóteles trabajo en
dos temas muy diferentes a priori que, en la actualidad, están muy relacionados y que están siendo tratados en este documento.
Aunque fue Aristóteles quien acuño el término meteorología, fue
su discípulo Teofrason quien habló por primera vez de previsiones
del tiempo basadas en experiencias vividas y recopiladas.
Sin embargo, fueron necesarios algunos avances técnicos para que
se llegara a poder medir la temperatura ambiental con un
termómetro (Galileo 1607), la presión con un barómetro
(Torricelli 1643), la velocidad del viento con un anemómetro (Hooke 1667) o la humedad con el higrómetro de cabello
(Saussure 1781). Y es que hasta que no existieron estos aparatos
de medida la predicción meteorológica era imprecisa y, en demasiadas ocasiones, arbitraria y localizada ya que las
previsiones se basaban en sucesos meteorológicos ya pasados y en
circunstancias pasadas que posiblemente podían no ser parecidas a
las del momento posterior de predicción, no siempre que hay nubes en el cielo llueve, por ejemplo. Fue Benjamin Franklin el
primer americano en registrar de modo seguro y detallado la
condición del tiempo sobre la base diaria y hacer una previsión
sobre esa misma.
El primero en realizar una explicación general de la circulación
atmosférica global fue George Hadley. A este le siguieron otros
estudios de Gaspard-Gustave Criolis y William Ferrel entre otros.
No fue hasta comienzos del siglo XX cuando el progreso en la compresión de la dinámica atmosférica dio comienzo a la creación
de la moderna previsión del tiempo basada en modelos
matemáticos. En 1922, Lewis Fry Richardson descubrió como
simplificar las variantes de las ecuaciones de los fluidos para facilitar una previsión del tiempo sencilla mediante soluciones
matemáticas. Aun con estas simplificaciones, el cálculo numérico
era bastante grande.
Finalmente, en los años 50 se empezaron a mostrar factibles los experimentos de cálculo numérico con computadores. Dando
lugar a la primera previsión realizada con este método usando los
modelos baroscópicos.
En los años 60 la meteorología adopto la teoría del caos y los
avances matemáticos obtenidos en este campo, de esta forma se
ayudó a estabilizar el límite de previsibilidad del modelo
atmosférico (efecto mariposa).
Otro hito importante en la meteorología es el lanzamiento de satélites meteorológicos. El primero fue el TIROS-1, lanzado en
1960, que marcó el inicio de una difusión global de la información
climática.
Y así llegamos hasta el día de hoy, en el que el uso de
computadores y modelos matemáticos para la previsión del
- 47 -
tiempo están totalmente afianzados y en el que los satélites juegan
un papel crucial a la hora de saber como se desplazan las tormentas, ciclones,…
En la actualidad existen muchos y muy diversos SSEE
relacionados con los fenómenos atmosféricos. Algunos de ellos
son: Sistema Automático de Información Hidrológica (SAIH), pronóstico de vientos en el Mediterráneo (MEDEX), pronóstico
de ciclones tropicales, análisis del tipo de nubes en imágenes
satelitales, estudio de imágenes satelitales para clasificar el hielo
marino y Prometeo diseñado para la generación y distribución automática de la predicción a partir de modelos matemáticos,
entre otros. Este último se tratara en este documento con una
mayor extensión y profundidad. Además, existen sistemas
expertos que, basándose en los datos meteorológicos recogidos por otros sistemas, llevan a cabo labores de otra índole como
puede ser por ejemplo facilitar a los conductores información
meteorológica en tiempo o real o ayudar a los órganos gestores de
tráfico para un uso más dinámico y en tiempo real de los datos
meteorológicos.
4.1 Sistema Automático de Información
Hidrológica (SAIH)
El SAIH es una red de recogida de datos de precipitación y de control de caudales circulantes.
En la zona del mediterráneo son especialmente útiles estos
sistemas porque las crecidas de los ríos son muy comunes (existe
una creciente ocupación humana de las vegas y riberas fluviales) y muy repentinas. Estas inundaciones causan grandes daños, tanto
materiales como humanos, económicos o sociales, por lo que se
puso de relieve la necesidad de medidas eficaces de previsión,
predicción y control de las crecidas de los ríos.
Sin embargo, esto no es sencillo, existen dos problemas
principalmente: hay un tiempo muy corto para avisar a la
población expuesta al riesgo y una escasa información hidrológica
en los momentos clave. Se hacen necesarios datos en tiempo real o incluso poder preveer mediante modelos el comportamiento de
las cuencas.
El primer sistema de este tipo que se creo en España fue el de la
Confederación Hidrográfica del Júcar en 1984 tras el desastre del embalse de Tous (el cual se podría haber prevenido con un buen
sistemas automático q trabajara con los datos como hace el
SAIH).
Los datos captados por los sensores del sistema se almacenan en los puntos de control. A su vez, estos puntos de control transmiten
la información vía radio y vía satélite al Centro de Proceso (para
el caso del SAIH del Júcar este centro se encuentra en Cuenca). El
centro de proceso es una sala de control del SAIH donde se centralizan las labores de gestión y mantenimiento de la
información que se recibe y, en el caso de España, se suele situar
en la sede de la Confederación correspondiente. Para el caso del
Júcar la sede de la Confederación del Júcar está en Cuenca.
4.2 Pronóstico de vientos en el Mediterráneo
(MEDEX)
MEDEX (MEDiterranean EXpert system) es un paquete software
que usa tecnologías de inteligencia artificial para predecir la
creación, continuación y fin de vientos huracanados. Este software hace uso de sistemas expertos que simulan la experiencia de un
meteorólogo de aproximadamente 25 años de experiencia en el
Mediterráneo para hacer frente a la imprecisión inherente a este
tipo de conocimientos. Pero, ¿por qué surge la idea de MEDEX?
La zona del mediterráneo, como ya se ha indicado anteriormente,
es una de las de más difícil pronóstico principalmente debida esta
circunstancia a la topografía montañosa que lo rodea. La
predicción de los vientos aleatorios de esta zona requiere muchos años de experiencia y de muchos datos los cuales no se tienen. De
esta forma, MEDEX es diseñado como un sistemas de predicción
(que proporciona probabilidades de eventos de vientos
huracanados para complementar las decisiones de pronóstico de sistemas) y un sistema de aprendizaje (fue entrenado con la
experiencia de 25 años en el mediterráneo y aprende con la
utilización de los usuarios).
MEDEX hace uso de sistemas expertos y de tecnologías de conjuntos difusos. Las reglas que siguen sus sistemas expertos en
sus inicios fueron derivadas por Brody y Nestor (1980). La ayuda
de los sistemas difusos, cuyas respuestas no son si o no, sino
rangos de 0 (“absolutamente no”) a 4 (“definitivamente si”). Las reglas están expresadas en términos de lógica difusa, de forma que
los umbrales son reemplazados por conjuntos difusos. Finalmente,
las salidas difusas son porcentajes (de 0 a 100%) que indican la
probabilidad de la predicción
.
4.3 Meteosafety
El proyecto Meoteosafety pretende mejorar la seguridad vial en
las carreteras españolas haciendo un uso inteligente de la información recibida por parte de los sistemas meteorológicos
existentes.
Está liderado por el Instituto de Robótica y Tecnologías de la
Información y la Comunicación (IRTIC) de la Universidad de Valencia (UV) y también está financiado, en parte, por el Centro
de Estudios y Experimentación de Obras Públicas (CEDEX). Se
inició en el 2008 y la creación del prototipo final se llevo a cabo a
finales del 2010, la cual está en fase de implantación en este momento.
- 48 -
Este proyecto cuenta con dos líneas de actuación:
- Actualización dinámica y en tiempo real de los paneles
luminosos de carretera, para que los usuarios tengan en
cada momento la información meteorológica. El sistema experto Meteosafety trata los datos provenientes los
diferentes sistemas meteorológicos para ofrecer dichas
predicciones.
- Análisis de las acciones a tomar para reducir las consecuencias de los fenómenos meteorológicos
adversos (envío de datos al Centro de Gestión de
Tráfico, por ejemplo)
Además de estos dos frentes de actuación se pretende
aprovechar el conocimiento adquirido para asesorar a los
organismos responsables de carreteras y analizar la influencia
de los factores meteorológicos sobre la accidentalidad de las
mismas y así poder ofrecer soluciones. Para facilitar la implantación de este innovador sistema los
trabajos se han basado en los estándares y tecnologías que ya
existen en el mercado.
La integración de estos sistemas expertos va a ayudar a realizar un gran avance para la seguridad de los conductores y
para la gestión eficaz del tráfico y de las carreteras,
4.4 PROMETEO: Sistema Experto basado en
redes Neuronales
1. Introducción
Prometeo, de la estirpe de los Titanes, fue según la mitología el
creador de la humanidad, que este hizo con barro y agua. Es por
tanto un buen nombre para definir a este sistema experto ya que el
ser humano se ve atraído a dotar de inteligencia (al igual que Prometeo) los sistemas consiguiendo de estos beneficios prácticos
para la humanidad.
Este sistema utiliza las predicciones a baja resolución de los
modelos numéricos sobre el grid peninsular y busca configuraciones análogas en las serie diaria 1979-1993 de la base
de datos ERA (del Centro Europeo de Meteorología). Estas
configuraciones análogas permiten entrenar una red neuronal
utilizando como salida los datos locales de cualquier observatorio del Instituto Nacional de Meteorología obteniendo, de esta forma,
un sistema para mejorar la resolución de los modelos numéricos.
Los modelos actuales de predicción meteorológica se basan en la
integración numérica de un conjunto de ecuaciones diferenciales de compleja resolución. El tiempo de cómputo necesario que
tenemos que asumir como coste es tan elevado que el tamaño de
la rejilla no es suficiente para dar pronósticos locales que se
adecuen a las propias características de la zona.
Un ejemplo de esto es el Centro Europeo de Predicción a Plazo
Medio cuya rejilla no permite obtener un pronóstico
meteorológico a una resolución menor a 100 Km.
A pesar de ello contamos con un registro completo de las características de los”microclimas” gracias al I.N.M (Instituto
Nacional de Meteorología).
Nos encontramos con el problema de tener diferencias no
despreciables en los patrones climáticos de estaciones cercanas observando que los patrones de correlación son muy diferentes y
mostrando la limitación de los modelos numéricos a la hora de
realizar pronósticos de forma local.
2. Sistema Prometeo
El proceso de inferencia se basa en dos etapas: se realiza un cálculo de analogías entre la salida del modelo numérico para el
día problema y los datos recogidos por ERA que hemos
comentado anteriormente, obteniéndose un conjunto de días
análogos.
Posteriormente se infieren pronósticos a mayor resolución en base
a los datos numéricos y registros para los días análogos obtenidos
utilizando un modelo de regresión múltiple y una red neuronal.
En la figura anterior podemos ver las etapas que se realizan para
llegar finalmente a la predicción meteorológica, vamos a ir documentando progresivamente dichas etapas.
La recogida de datos ERA (datos que utiliza Prometeo) consiste
en la producción de un re-análisis a partir de los datos recogidos
mediante diversos medios.
Con los datos obtenidos se construyen las condiciones iníciales
para introducir en el modelo numérico del CEPPM obteniendo
predicciones sobre la evolución temporal de la atmósfera.
- 49 -
Una vez hecho esto debemos calcular un conjunto de días
análogos para un día problema, para obtenerlos se compara el estado de la atmósfera del día problema con los estados que
tenemos de ERA. El número de variables asociadas con el grid del
modelo es demasiado grande por lo que seleccionamos variables
representativas que satisfacen nuestros objetivos.
Las variables tienen en cuenta el comportamiento de la atmósfera
en la escala sinóptica (global) y el comportamiento en la
mesoescala (local).
La discrepancia de dos días se obtendría en base a la distancia euclidea de los vectores numéricos resultantes de la mesoescala y
la escala sinóptica en los días analizados.
3. Modelos de regresión y redes
neuronales
Una vez obtenidos los días análogos como hemos visto
anteriormente se puede obtener un pronóstico local donde
tengamos un observatorio del INM, para ello lo que realiza es la
extracción de una relación entre los valores del modelo numérico como son la dirección del viento o temperatura y el valor a
pronosticar y registrado en el observatorio.
Para ello lo más sencillo es utilizar un modelo de regresión
múltiple para obtener una relación lineal óptima entre las variables.
Sin embargo en la figura siguiente podemos ver la necesidad de
obtener un modelo no lineal que nos permita más flexibilidad en
el modelo.
Otro problema importante es determinar el número óptimo de
análogos. Si usamos un conjunto reducido no obtendremos buenos
resultados de estimación. Por otra parte, si usamos un conjunto
muy amplio corremos el riesgo de ocultar la dinámica particular del conjunto de observaciones.
Se ve aquí por tanto la importancia de las redes neuronales en
estos sistemas expertos.
Vamos a profundizar un poco en este concepto para tener más
claro en qué consiste una red neuronal y como se aplica al caso de nuestro estudio.
Como hemos comentado brevemente el cerebro humano tiene
10^11 de neuronas y 10^14 sinapsis (conexiones) en el sistema
nervioso, esto implica que por razones físicas somos capaces de mejorar el tiempo de conmutación de las neuronas, el problema es
que las neuronas naturales mejoran la conectividad en un orden de
1000 veces superior.
Vamos a explicar con mayor detalle los modelos de regresión y redes neuronales desde un punto de vista más matemático.
Los modelos de regresión estudian las relaciones entre una serie
de variables (independientes) „xi‟ y otras variables dependientes o
de respuesta denotadas por „y‟ en función de los valores de las „xi‟.
Donde:
Donde h(.) es la función que liga las componentes β i son los
coeficientes, N es el número de variables independientes y β0 es la
pendiente.
Como hemos comentado lo más sencillo es utilizar un modelo
lineal, este modelo lineal se puede implementar como un modelo
una red neuronal simple. La red neuronal tiene una unidad de
sesgo constante a 1, una entrada „x‟ y una salida:
- 50 -
El modelo lineal tiene por lo tanto 3 componentes, la variable aleatoria y (con media μ y varianza σ2), un componente que
relaciona las variables independientes (observaciones) „xi‟ con el
predictor lineal η y una función que relaciona la media con el
predictor lineal.
Como hemos comentado lo más sencillo es utilizar un modelo de
regresión múltiple lineal, este es una generalización de lo que
acabamos de contar si se considera que la variable aleatoria se
distribuye como una normal y la función h(.) asume que es la identidad .
El modelo quedaría por lo tanto de la siguiente forma:
Donde . El objetivo es encontrar los coeficientes βi
que minimizan la suma de cuadrados de los errores.
Este problema es equivalente al de una red neuronal con una sola capa donde los βi son los pesos y la función de activación es la
identidad.
El problema es que necesitamos un modelo no lineal que nos de la
flexibilidad que nos falta.
Para ello la función de activación debe ser una función no lineal,
el modelo quedaría de la siguiente forma:
Donde como ya sabemos „xip‟ son las entradas e „yi‟ las salidas.
Cada procesador realiza una actividad muy simple: valor
sigmoidal de la combinación lineal de las actividades recibidas
por la neurona:
4. Salidas del sistema
A continuación vamos a mostrar las salidas del sistema PROMETEO para un par de predicciones entre distintas comarcas
como pueden ser Cantabria y Asturias. Estas comarcas se
encuentran en el territorio norte de la península Ibérica pero deben mostrar sus diferencias locales como se sobreentiende.
Los pronósticos se actualizan cada 12 horas y tras la supervisión
de un experto se envían a una página web.
Como podemos ver en la figura anterior tenemos múltiples variables de salida que contienen el estado de las rachas de viento,
niebla, nubosidad, lluvia si la hubiere, granizo, o el estado de la
marea.
Mostramos aquí los resultados:
5. CONCLUSIONES
A lo largo de este documento hemos hecho una introducción a la
inteligencia artificial cuya primera piedra pone Aristóteles en su
obra Metafísica, hemos visto la parte más histórica de la
inteligencia artificial viendo su evolución hasta nuestros días.
Hemos justificado por lo tanto la razón de ser de este documento y dado el porqué de la razón que hace tan importante la IA.
Una vez hecho esto nos hemos centrado en los sistemas expertos,
los hemos definido y comprendido para pasar a los sistemas
expertos en el ámbito de la meteorología.
Hemos visto los SEs SAIH, MEDEX y METEOSAFETY para
pasar a un ejemplo práctico de esto: el sistema experto
PROMETEO.
Hemos introducido PROMETEO y visto en que etapas resuelve el
proceso de predicción describiendo el modelo de regresión lineal
y no lineal desde el punto de vista de las redes neuronales.
- 51 -
Por último hemos visto algún resultado práctico del sistema
Prometeo.
Visto todo lo anterior podemos concluir la importancia de la IA
no solo para un proceso que puede no parecer crítico como la
predicción meteorológica (realmente si es crítico y beneficioso),
sino en cualquier ámbito que involucra a la especia humana.
Es por tanto una herramienta que en sí misma es altamente
interesante y beneficiosa y que solo bajo un mal uso del ser
humano puede ser destinada para fines pocos éticos. Es por tanto
labor nuestra usar el conocimiento con fines justificados y beneficiosos para nosotros.
Desde el punto de vista meteorológico, permite evitar la sesga de
vidas por catástrofes naturales y nos ha permitido comprender
mejor los sistemas expertos.
El sistema PROMETEO nos resulta pues, un sistema de alta
importancia que nos permite realizar predicciones locales gracias
a los modelos de regresión no lineales que hemos explicado en
este documento, logrando de esta forma, una buena precisión y resolución en la predicción que como su nombre indica no deja de
ser eso, una predicción.
6. BIBLIOGRAFÍA [1] Wikipedia
http://es.wikipedia.org/wiki/Sistema_experto
http://es.wikipedia.org/wiki/Historia_de_la_meteorolog%C3%AD
a
http://es.wikipedia.org/wiki/Sistema_Autom%C3%A1tico_de_Inf
ormaci%C3%B3n_Hidrol%C3%B3gica
[2] Brody, L. R. & Nestor, M.J.R. (1980). Regional Forecasting Aids for the Mediterranean Basin (Handbook for Forecasters in
the Mediterranean, Part 2) (MEDEX)
[3] Kandel, A. (1992). Fuzzy Expert Systems, CRC Press, Boca
Raton, FL, 314 pp. (MEDEX)
[4] Zadeh, L.A. (1983). The role of fuzzy logic in the
management of uncertainty in expert systems. Fuzzy Sets Syst.,
11: 199. (MEDEX)
[5]MEDEX
http://www.nrlmry.navy.mil/~medex/
[6] SAIH
http://www.mma.es/portal/secciones/acm/aguas_continent_zonas_
asoc/saih/index.htm
[7] METEOSAFETY
http://www.tecnocarreteras.es/web/items/1/6/meteosafety-un-uso-
inteligente-de-la-informacion-meteorologica
[8] PROMETEO
[Bishop97] Bishop, B. Neural Networks for Pattern Recognition.
Clarendon Press, 1997
Juan Miguel Marín Diazaraque. Introducción a las Redes Neuronales Aplicadas
PROMETEO: Un Sistema Experto para el Pronóstico
Meteorológico Local basado en Redes Neuronales y
Cálculo de Analogías. grupos.unican.es/ai/meteo/articulos/caepia99.pdf
http://www.monografias.com/trabajos30/sistemas-
expertos/sistemas-expertos.shtml#ejempl
http://grupos.unican.es/ai/meteo/Book.html
- 52 -
Traducción automática. Técnicas y aplicaciones Isabel Cuadrado Gutiérrez Ingeniería de Telecomunicación Universidad Carlos III de Madrid
David Ferrer Figueroa Ingeniería de Telecomunicación Universidad Carlos III de Madrid
ABSTRACTO
En este texto se aborda un tema de gran relevancia en la
actualidad, el concepto de la traducción automática. Se analizará
esta desde su origen hasta la actualidad, tratando la evolución de
las distintas técnicas empleadas para obtener la mayor calidad
posible en las traducciones.
Asimismo, se hace un breve repaso a las aplicaciones más
utilizadas y al desarrollo futuro previsto en este campo teniendo
en cuenta, entre otros factores, la rentabilidad del negocio y la
calidad de la traducción.
Categorías y descripciones I.2.6.g [Computing Methodologies]: Machine learning
I.2.7.f [Computing Methodologies]: Machine translation
Términos generales
Documentación, Algoritmos, Teoría
Palabras clave
1. INTRODUCCIÓN Desde el origen de los tiempos, el hombre, como ser social, ha
necesitado comunicarse con otras personas. Si bien en un
principio el entorno del ser humano era restringido, conforme ha
ido avanzando el tiempo, el hombre ha ido expandiendo su área de
acción, lo cual le supone un problema cuando ha de hacerlo con
alguien que no habla su misma lengua. Esta necesidad de
comunicación unida a la cantidad de información disponible hoy
en día en todo tipo de lenguas hace que sea más que necesaria la
mecanización de la traducción.
La traducción supone todo un reto para los seres humanos dado
que no tenemos el mismo dominio en ambas lenguas, pero el
hecho de intentar que todo el proceso de traducción lo lleve a cabo
un sistema automatizado se convierte en un trabajo todavía más
complejo.
Por este motivo, hoy en día uno de los principales objetivos del
ser humano es conseguir que, mediante el uso de tecnología, se
puedan pasar las palabras habladas y escritas en una lengua a otra
sin perder información por el camino ni decir cosas diferentes a
las del texto original.
Uno de los pioneros en dar a conocer la traducción automática
fue Warren Weaver que además de introducir este concepto
sugirió algunos métodos para encarar la disciplina como son el
uso de técnicas criptográficas, los análisis estadísticos, la
exploración de la lógica subyacente, la aplicación de los teoremas
de Shannon. Los primeros desarrollos informáticos se realizaron a
finales de la década de 1950 pero no se obtuvieron los resultados
que se esperaba.
En la actualidad, no hay ningún sistema capaz de obtener
resultados de igual calidad que un traductor humano.
Especialmente, si la traducción se realiza sobre un texto de
lenguaje común o coloquial. Nadie ha sido capaz hasta ahora, ni
empleando el mejor programa que hay en el mercado, de ofrecer
la fluidez y habilidad que nos proporcionan los nativos de un
idioma y los traductores humanos. No nos cansaremos de reiterar
lo complicada que puede llegar a ser la traducción, debido en gran
medida a que el significado de las palabras depende siempre del
contexto en el que se formulan.
Todos los traductores de los que disponemos en la red hacen que
en la gran mayoría de ocasiones la traducción se haga inteligible
entre otros motivos porque realizan mal las puntuaciones, tienen
errores gramaticales, desplazan las palabras y son bastante
imprecisos. La deficiencia con la que cuentan algunos sistemas en
cuanto a traducciones se refiere es tal que sólo son capaces de
traducir algunas palabras o frases hechas como ocurre por ejemplo
con algunos sistemas de reservas de vuelos.
Se ha observado sin embargo, que cuando se pretende realizar una
traducción entre dos lenguas que no tienen raíces comunes (como
por ejemplo el español y el alemán) la calidad de la traducción
empeora mucho en comparación con la que se consigue
traduciendo entre lenguas de raíces afines (por ejemplo, las
lenguas romances: Español, portugués, francés, etc.).
Se ha comprobado que uno de los factores más importantes para
obtener una traducción de alta calidad, es el grado de
especialización, ya que cuanto más especializado esté el sistema al
Permission to make digital or hard copies of all or part of this work
for personal or classroom use is granted without fee provided that
copies are not made or distributed for profit or commercial advantage
and that copies bear this notice and the full citation on the first page.
To copy otherwise, to republish, to post on servers or to redistribute
to lists, requires prior specific permission and/or a fee.
Copyright © 2011 Isabel Cuadrado Gutiérrez y David Ferrer
Figueroa
Inteligencia en Redes de Comunicación. 2011
- 53 -
tipo de texto y vocabulario que se pretende traducir mejor será la
calidad del texto obtenido.
Así pues, un sistema especializado en traducir cotizaciones en
bolsa produce traducciones muy buenas, incluso para lenguas que
no son afines. Sin embargo, esta idea no se puede aplicar a
campos como la medicina.
La traducción es un proceso más tedioso de lo que parece ya que
con sustituir todas las palabras por su significado correspondiente
no es suficiente, tenemos que tener en cuenta otra gran cantidad
de factores como son el orden en que aparecen las palabras, la
influencia que tienen unas sobre las otras, el contexto en el que
son escritas, etc. Esto es debido a que todos los idiomas cuentan
con tres factores fundamentales en las construcciones de oraciones
como son la morfología de las palabras, la sintaxis de las frases y
la semántica, un texto por muy sencillo que parezca puede contar
con palabras o frases ambiguas.
Sin embargo, hoy en día existen métodos estadísticos que
traducen textos sin tener en cuenta la gramática, pero la tendencia
actual es aplicar todas las metodologías a lo que llamamos corpus
lingüísticos.
2. HISTORIA: La idea de la traducción automática se remonta al siglo XVII. En
1629, René Descartes ya propuso un lenguaje universal, con ideas
equivalentes en otras lenguas que compartiesen un mismo
símbolo.
En el siglo XIX, Jean-François Champollion consiguió, tras
muchos intentos fallidos, descifrar los jeroglíficos egipcios a
través del primer texto bilingüe conocido, la Piedra Rosetta. Esta
piedra es un fragmento de una estela egipcia que contiene un
mismo texto escrito en tres lenguas distintas: Egipcio demótico,
antiguos jeroglíficos egipcios, y griego antiguo.
Imagen 1. Piedra Rosetta
Para poder descifrarla, Champollion tuvo que buscar patrones
entre los textos, símbolos repetidos y posteriormente encontrar su
significado.
La idea de utilizar ordenadores para traducir idiomas fue
propuesta en 1946 por A.D. Booth entre otros.
En la década de 1950, se llevó a cabo el conocido como
“Experimento de Georgetown”, donde se tradujeron exitosamente
más de cincuenta frases del inglés al ruso. Este experimento
supuso un punto de inflexión en esta área de trabajo, y también el
comienzo de una época dorada en el campo, donde se invirtió una
gran cantidad de dinero.
En 1954, en el Birkbeck College (Universidad de Londres) se
consiguió realizar una traducción muy básica entre el francés y el
inglés usando la máquina APEXC. Otro ejemplo, fue la lectura y
escritura de textos Braille por ordenador.
Por aquel entonces se esperaba que la traducción automática fuese
un problema resuelto en unos 4 o 5 años. Pero la realidad fue muy
diferente, y conforme se observaba que los frutos obtenidos no
eran los esperados, la financiación dedicada a esta área se fue
reduciendo notablemente.
Por aquel entonces, la traducción automática se realizaba casi por
completo mediante sistemas basados en reglas. Como su nombre
indica, estos sistemas de traducción requerían de expertos en
lingüística que formasen los diccionarios de ambos lenguajes
teniendo en cuenta tanto reglas gramaticales como sintácticas. Por
ejemplo, que en español los adjetivos siguen al nombre y en inglés
es al revés. No obstante, la gran complejidad de los idiomas, con
todas sus variantes, hacía que los sistemas resultantes se
encontrasen muy lejos de una traducción de calidad.
Con los avances tecnológicos propios de la década de los 80, se
consiguió abaratar y aumentar la potencia de los ordenadores, y
esto permitió a los expertos centrar su investigación en otros
modelos de traducción, los llamados modelos estadísticos. Desde
entonces, los investigadores han ajustado sus algoritmos
basándose en esta metodología.
Otro momento de gran importancia en el campo sucedió con el
boom de Internet. Desde entonces han salido a la luz ingentes
cantidades de textos iguales en diversos idiomas. Este hecho ha
permitido los sistemas comparar muchos más textos y conseguir
traducciones mejores.
Sin embargo, prácticamente desde que se comenzó a trabajar en
este aprendizaje máquina, ha habido diversidad de opiniones
acerca de si una máquina podrá ser capaz algún día de producir
traducciones de texto con una gran calidad. Si bien grandes
expertos en el área consideran este objetivo como imposible, y
relegan el papel de la traducción automática a una herramienta
para el traductor humano, otros creen que en un futuro sí será
posible automatizar las traducciones con una calidad óptima
3. TRADUCCIÓN AUTOMÁTICA Este subcampo de la lingüística computacional investiga el uso de
programas para traducir texto o voz entre dos idiomas. [1]
Existen diferentes aproximaciones para traducir lenguajes. La
aproximación más sencilla consiste en cambiar directamente
palabras provenientes de un lenguaje en palabras de otro. Sin
embargo, este método puede inducir a una mala traducción,
puesto que en muchas ocasiones, la información que prima se
basa en el contexto y la frase en las que se encuentra la palabra a
traducir.
- 54 -
Una manera de solventar el problema anterior consiste en situar el
contenido a traducir en el contexto del que proviene. Así, se
pueden acotar los posibles significados del texto y sus
traducciones. Por ello, muchos programas hoy en día permiten
focalizar la búsqueda en función de las profesiones o de los
campos a los que va dirigido el texto.
No obstante, la ayuda de las personas sigue siendo muy útil (y
necesaria en muchos casos) para obtener mejores resultados en la
traducción. Por ejemplo, si se le indica al sistema que palabras del
texto son nombres propios, acrónimos, o palabras en general que
no se deben traducir, el traductor puede ofrecer resultados más
precisos.
4. COMPONENTES DE UN SISTEMA DE
TRADUCCIÓN AUTOMÁTICA La traducción automática puede dividirse en tres fases principales.
Primero el sistema tiene que analizar la entrada en el lenguaje
original para crear una representación interna. Entonces,
normalmente se manipula esta representación interna para
transferirla a una forma adecuada del lenguaje destino.
Finalmente, genera la salida en el lenguaje de destino.
Normalmente, un sistema de traducción automática contiene
componentes de análisis, transferencia y generación. Estos
componentes incorporan un gran conocimiento de las palabras
(conocimiento léxico) y del lenguaje (conocimiento lingüístico).
Este conocimiento es almacenado en uno o más lexicones y
posiblemente en otras fuentes de conocimiento lingüístico, como
gramáticas. La interfaz de usuario es invariablemente una parte
crucial de la mayoría de los sistemas de traducción automática. La
interface permite a los usuarios verificar, desambiguar y si es
necesario, corregir la salida del sistema. Otra característica común
dentro del procesamiento de lenguaje natural es el uso de grandes
“corpora” (plural de “corpus”). Un corpus es una gran colección
de texto que ha sido correctamente etiquetada, y se emplea para
adquirir el conocimiento léxico y lingüístico requerido.
El lexicón es un componente importante de cualquier sistema de
traducción automática Contiene toda la información relevante
acerca de palabras y frases que se requiere para los distintos
niveles de análisis y generación. Una entrada típica del lexicon
para una palabra contendría la siguiente información acerca de la
palabra: La parte de discurso, las variantes morfológicas, las
palabras típicas, frases o construcciones típicas que acompañan a
esta palabra, algún tipo de información semántica acerca de la
palabra e información acerca del equivalente de la palabra en el
lenguaje de destino. Algunos sistemas prefieren dividir el lexicón
en lexicones de fuente, destino y transferencia que enlaza los otros
dos. El formato exacto de los lexicones depende del diseño
ingenieril.
5. TIPOS DE TRADUCCIÓN
AUTOMÁTICA
5.1 Basada en reglas Este es el método inicial explicado anteriormente; consiste en
dividir el texto original en fragmentos, y convertir estos
fragmentos en partes del texto en el lenguaje de destino.
El proceso a seguir en este tipo de traducciones es el siguiente:
Primero, se crea una representación simbólica del texto y
posteriormente se pasa de esa representación al lenguaje de
destino. Sin embargo, esta representación se puede dividir en
diversos niveles según su profundidad: Se pueden traducir todas
las palabras independientemente de las demás, o bien, se puede
crear una interlingua, donde existe una representación intermedia
completa. En la Imagen 2 se puede observarlas aproximaciones
basadas en diccionario (color rojo), en transferencia (color verde)
e interlingua (color azul).
Imagen 2. Modelos de traducción automática basados en
reglas
5.1.1 Basada en diccionario
Se basa en el uso de entradas de diccionario. Esto quiere decir que
se hará una traducción directa palabra por palabra, que por lo
general, carece de relación con las palabras colindantes.
Si bien esta técnica es la más rudimentaria, es válida para la
traducción de listas de frases (ej. Frases incompletas o catálogos
sencillos de productos y servicios).
También se puede utilizar para facilitar la traducción manual si la
persona a cargo de la traducción tiene un elevado nivel de
comprensión en ambos idiomas, y por lo tanto, es capaz de
corregir errores de sintaxis y gramática.
En la Imagen 3, se puede apreciar un ejemplo de un mal uso de la
traducción basada en diccionario.
- 55 -
Imagen 3. Traducción basada en diccionario
5.1.2 Basada en transferencia: Este método tiene en cuenta que para poder realizar
adecuadamente una traducción es necesario tener una
representación intermedia que sea capaz de entender el significado
de la frase original y así, poder producir la traducción adecuada.
Normalmente, se sigue el siguiente patrón a la hora de realizar una
traducción basada en transferencia: Primero se analiza el texto de
entrada sintáctica y morfológicamente para crear la representación
interna. Posteriormente, se genera la traducción desde esta
representación interna empleando vocabulario y reglas
gramaticales.
Esta técnica produce resultados satisfactorios en
aproximadamente un 90% de los casos.
5.1.3 Basada en un lenguaje intermedio:
En este caso, también se considera necesario emplear un lenguaje
intermedio para realizar la traducción. Sin embargo, ahora este
lenguaje tiene una importancia mucho mayor, es la interlingua. El
lenguaje original, es convertido a esta interlingua que
estructuralmente, es independiente de ambos lenguajes (origen y
destino). Finalmente, el texto traducido se obtiene desde esta
interlingua.
5.2 Basada en contexto: Este método emplea técnicas que buscan la mejor traducción
posible para cada una de las palabras basándose en su contexto
(palabras colindantes). Así pues, el texto se divide en ventanas de
unas pocas palabras, y se busca la traducción idónea para cada una
de las palabras, desechando todas las acepciones que no tienen
sentido dentro de la ventana utilizada.
Posteriormente, se desplaza esta ventana una posición (palabra), y
se repite el proceso anterior. Como se puede observar, una sola
palabra se traduce en varias ocasiones hasta obtener un resultado
óptimo.
Finalmente, se amplían las ventanas para que las frases, o el texto
en general tengan también significado, y se hace otra búsqueda.
Este proceso se va ampliando hasta que implica a una parte de
texto suficientemente grande.
Los resultados proporcionados por este método son muy buenos,
aunque sin embargo, conlleva un elevado coste computacional por
todas las iteraciones que son necesarias para traducir un texto.
Sin embargo, como contrapartida, es muy sencillo ampliar la
traducción a nuevos idiomas, ya que al no precisar de un lenguaje
intermedio, la traducción se realiza únicamente con diccionarios y
un corpus apropiado.
5.3 Basada en corpus La traducción automática realizada en base a un corpus lingüístico
consiste en el análisis de textos lingüísticos con sus respectivas
traducciones. Podemos diferenciar entre dos tipos de mecanismos
que emplean los corpus como son los basados en métodos
estadísticos y los basados en ejemplos. Para comprender el
funcionamiento de ambos métodos que explicaremos a
continuación hay que tener claros los conceptos siguientes:
- Corpus bilingüe paralelo: Es la selección de un texto original y
de su traducción en otra lengua, colocado todo de forma natural
sin haber realizado ningún análisis ni separación.
- Corpus bilingüe alineado: Es la selección de un texto original y
de su traducción en otra lengua colocada siguiendo algún tipo de
orden pudiendo éste ser realizado por palabras, frases o párrafos.
- Alineamiento: Este término se define como la acción de
identificar en dos textos en idiomas diferentes, qué partes de uno
de ellos (párrafos, frases, palabras) se corresponden con las del
otro.
5.3.1 Traducción automática estadística El empleo de técnicas estadísticas en la traducción automática
cuenta con defectos y virtudes como suele ocurrir con muchos
aspectos hoy en día. Un beneficio destacable es el poder conseguir
que un sistema aprenda a traducir gracias a una inmensa cantidad
de ejemplos de los que se realiza su traducción previamente.
Asimismo, este hecho hace a su vez que se vean los importantes
defectos que van a arrastrar estos sistemas de traducción, como
son la necesidad de disponer de estos corpus y el hecho de que el
sistema obtenido es muy sensible al sistema de entrenamiento
utilizado.
Debido a este motivo se han obtenido resultados bastante
satisfactorios cuando se emplea traducción estadística en campos
restringidos de traducción que están especializados en un lenguaje
determinado, por el contrario cuando el traductor sale de este
campo y abarca un ámbito de lenguaje más coloquial, predominan
todavía los sistemas que se basan en conocimiento.
Los sistemas de traducción estadísticos parten de lo que se conoce
como corpus bilingüe. Para que se entienda mejor el concepto, un
ejemplo de corpus bilingüe sería por ejemplo los subtítulos de una
película.
El proceso comienza con la obtención de un corpus bilingüe, y
una vez que se dispone de éste, se pasa al proceso de alineación.
La finalidad de la alineación del corpus es crear una
correspondencia entre las palabras de un idioma y otro, y es en
este punto donde la estadística empieza a ser importante.
Para hacernos una idea de cómo va a funcionar el sistema
imaginemos que tenemos dos textos iguales en dos idiomas
diferentes. Si nos ponemos a compararles oración por oración nos
- 56 -
damos cuenta de que ciertas palabras en uno de ellos siempre se
corresponden con otras en el otro texto. Por ejemplo, si en todas
las oraciones inglesas de un texto en las que aparece la palabra
“boy” vemos que la versión en español tiene la palabra “niño”
relacionaríamos una con la otra obteniendo su traducción.
Del mismo modo en esta etapa el sistema observa muchos pares
de oraciones escritos en dos idiomas diferentes, siendo unas
traducciones de las otras y a partir de lo que observa construye
asociaciones entre palabras. Para lograr buenas asociaciones es
necesario observar muchas oraciones, ya que con una única
oración sin saber nada del idioma es imposible determinar con
certeza el significado de algunas palabras, así podemos decir que
cuanto más grande sea el corpus con más certeza crearemos
asociaciones.
Una vez completado el alineamiento de todos los pares de
oraciones, buscamos entre nuestras asociaciones las que encajan
en nuestra oración realizando así la traducción.
Sin embargo, utilizando únicamente estas asociaciones no siempre
es posible traducir de forma correcta una oración, ya que por
ejemplo podemos encontrarnos con palabras que muestran
ambigüedades como por ejemplo la palabra “ganar” en una
sentencia en inglés puede ponerse como “win”,”gain”,”get” y no
sabemos cuál de todas es la correcta para nuestra oración.
Por ello en la traducción automática estadística se emplean dos
modelos: el de traducción y el de lenguaje. Con estos modelos
podremos puntuar a las posibles traducciones eligiendo finalmente
a la que tenga mayor puntuación. Con el modelo de traducción
puntuamos lo bien que está traducida una palabra, mientras que
con el modelo de lenguaje puntuamos lo bien que está escrita la
traducción.
Estos modelos no son los únicos que participan en el cálculo de la
traducción, existen varios dependiendo del paradigma de
traducción que se siga. El que nos vamos a centrar en explicar es
el basado en frases, para ello nuestro corpus tiene que estar
alineado a nivel de oraciones de forma que tendremos dos
documentos con el mismo número de oraciones tal y como se
muestra a continuación:
Imagen 4. Ejemplo de corpus basado en frases
Posteriormente, se continua alineando al nivel de palabras: Para
cada par de oraciones del corpus paralelo, se enlazan las palabras
de la oración fuente con las palabras de la oración destino.
Finalmente se realiza la extracción de frases bilingües,
entendiendo estas como la unión de dos frases tal que no exista un
enlace entre alguna de las palabras de la frase bilingüe y una
palabra que esté fuera de la misma:
Imagen 5. Ejemplo de extracción de frases bilingües
En este ejemplo se puede ver que la frase bilingüe “This will”-
“Este será” no es válida, pues el enlace “be”-“será” asocia una
palabra dentro de la frase con una fuera. De esta forma serán
válida frases como “This will be”-“será”, “will be”- “será”,
“interesting”-“interesante”, “interesting example”-“ejemplo
interesante”, "This will be an interesting example”-“Este será un
ejemplo interesante”.
Una vez extraídas todas las frases de todos los pares de oraciones
del corpus podemos calcular el modelo de traducción. Ésta técnica
de traducción parte de la definición de un modelo estadístico en el
que se trata de estimar la probabilidad de que, dadas dos frases
cada una en un idioma, una sea la traducción de la otra, y así
poder decidir cómo de buena es una traducción para una frase
determinada; todo esto a partir de funciones y cambios
estadísticos.
Este modelo de traducción junto con el de lenguaje (que también
basándose en funciones estadísticas estimará la probabilidad de
que una traducción ya realizada sea la más adecuada para ese
texto en concreto y esté hecha de forma correcta) intentarán
conseguir una traducción con la mejor calidad posible.
5.3.2 Traducción basada en ejemplos La idea en la que se fundamenta la traducción basada en ejemplos
tal y como su nombre indica, es realizar las traducciones a partir
de ejemplos similares a las oraciones que se pretenden traducir y
de los cuáles ya conocemos su traducción. Se precisa contar con
una gran cantidad de corpus bilingües alineados para obtener estos
ejemplos de traducciones y almacenarlos en bases de datos para
- 57 -
que resulte más fácil encontrarlos a partir de las palabras que
contienen los ejemplos.
Además, hay que tener en cuenta otro concepto dentro de la
traducción basada en ejemplos, las memorias de traducción. Al
igual que en el caso de los ejemplos, las memorias de traducción
buscan en el corpus bilingüe frases similares a las que se quiere
traducir en un momento determinado y se mira cómo se tradujo
dicha frase tomándola como ejemplo. El traductor podrá emplear
esta información como referencia una vez la haya encontrado.
La forma de llevar a cabo la traducción de un sistema basado tanto
en ejemplos como en memorias se realiza de la siguiente forma:
en primer lugar se introduce al sistema el texto del que queremos
obtener la traducción, seguidamente el sistema le divide en
unidades de texto buscando en la base de datos aquellos ejemplos
que se asemejan a nuestras unidades. Si la traducción se basa en
memorias, el sistema extrae todos los ejemplos que encuentra
proporcionándoselos a un traductor humano que será el encargado
de construir las frases adecuadas Sin embargo si la traducción
está basada en ejemplos, no hay intervención humana en el
proceso realizándose todo el proceso por el sistema automatizado
que se arriesga a tomar las decisiones que producirán el texto de
salida.
A la hora de realizar la búsqueda de los ejemplos, hay que tener
cuidado con la longitud de las unidades de texto elegidas para
realizar dicha búsqueda dado que si establecemos segmentos con
una longitud muy pequeña podemos encontrarnos con demasiados
problemas de ambigüedad que en muchos casos provocarían que
el sistema se confundiese en sus decisiones al realizar la
traducción.
Actualmente muchos sistemas basados en ejemplos funcionan
utilizando la oración como unidad de texto, pero cabe destacar
que para explotar la capacidad con la que cuentan estos sistemas
debemos emplear unidades más pequeñas que la oración y así a
partir de ellas, realizando combinaciones, producir oraciones
completas.
5.4 Traducción híbrida Estas técnicas aprovechan los puntos fuertes de las metodologías
basadas en reglas y estadística.
Actualmente varias empresas dedicadas a la traducción
automática (Asia Online, LinguaSys, Systran, PangeaMT, UPV)
afirman tener sistemas híbridos de este tipo.
Se pueden distinguir dos variantes principales dentro de esta
metodología:
5.4.1 Reglas de post-procesado por las estadísticas Las traducciones son realizadas utilizando un motor basado en
reglas. Posteriormente se emplean reglas estadísticas en un intento
de ajustar o corregir la salida del motor de reglas.
5.4.2 Estadísticas guiadas por reglas: Las reglas se utilizan para preprocesar los datos, en un intento de
orientar mejor el motor estadístico. Las reglas son empleadas
también en el post-proceso de la producción estadística para
realizar funciones tales como la normalización. Este enfoque tiene
mucho más poder, flexibilidad y control cuando se traduce.
6. DESAMBIGUACIÓN EN LA
TRADUCCIÓN La desambiguación consiste en encontrar la traducción correcta
cuando hay varias traducciones posibles. Este problema fue
enunciado en la década de 1950 por Yehoshua Bar-Hillel. Él
indicaba que sin una enciclopedia universal, una máquina nunca
sería capaz de distinguir entre dos significados de una misma
palabra.
Hoy en día existen numerosas aproximaciones diseñadas para
paliar este problema. Pueden dividirse en someras y profundas.
Las aproximaciones someras asumen que no hay un conocimiento
del texto. Simplemente aplican métodos estadísticos a las palabras
que rodean a la palabra ambigua para obtener el resultado mejo.
Las aproximaciones profundas sin embargo, pre asumen un
conocimiento comprensivo de la palabra.
Sin embargo, a día de hoy, las aproximaciones someras han
demostrado dar mejores resultados en las traducciones.
Grandes expertos en el mundo de la traducción (como Claude
Piron, que fue traductor para las Naciones Unidas y la
Organización Mundial de la Salud), indican que la traducción
automática, como mucho, será capaz de automatizar la parte más
sencilla del trabajo de un traductor; sin embargo, la parte más
costosa y que consume mayor cantidad de tiempo, tendrá que
seguir siendo realizada por una persona cualificada, ya que
normalmente implica hacer una investigación extensa para
resolver ambigüedades en el texto de origen.
Para poder realizar esta investigación a un nivel tan profundo sería
necesario que el software de traducción emplease también parte
de sus recursos a buscar la desambiguación correcta. Sin embargo,
esto requiere un nivel de desarrollo en Inteligencia Artificial que
no se ha alcanzado aún.
7. SERVICIOS DE TRADUCCIÓN
AUTOMÁTICA Si bien, como se ha indicado anteriormente, ningún sistema de
traducción hoy en día es capaz de producir una traducción
perfecta en campos que no se encuentren restringidos, hay una
gran variedad de sistemas automáticos que producen resultados
muy notorios.
A continuación vamos a nombrar sólo dos de estas aplicaciones.
No obstante, para mostrar el gran impacto que tiene este mercado,
y la cantidad de empresas que hay, mostramos en la siguiente
tabla, una comparación entre las empresas más importantes y el
número de lenguajes en los que traducen.
Tabla 1. Número de idiomas disponibles por empresa
Compañía Número de idiomas
Asia Online 77
Google Translate 65
WorldLingo 43
PROMT 43
Apertium 42
Systran 36
Systran 36
- 58 -
7.1 Systran Systran es una de las empresas más antiguas en traducción
automática. Fue fundada por el Dr. Peter Toma en 1968 y ha
trabajado durante muchos años para el departamento de defensa
de los Estados Unidos de América y para la Comisión Europea.
En un origen, basó sus métodos de traducción en reglas, aunque
posteriormente ha ido migrando a memorias de traducción (corpus
paralelos).
Hoy en día es una de los sistemas más utilizados aunque muchas
veces el cliente lo desconoce. Este sistema se encuentra integrado
en aplicaciones como en el traductor de textos de los ordenadores
que emplean el sistema operativo Mac OS X, en el traductor
online de Yahoo!, Yahoo! Babel Fish, y fue también utilizado por
el buscador Google hasta 2007.
7.2 Google translate Posiblemente es una de las aplicaciones más conocidas para
traducir textos hoy en día. Esta herramienta de uno de los gigantes
de Internet, Google, proporciona traducción automática entre 65
idiomas (Si bien, entre muchos de ellos se realiza una traducción
intermedia al inglés). Para lograrlo, el sistema busca rápidamente
en Internet de entre la gran cantidad de textos ya traducidos que
existen, aquella combinación de palabras que proporciona un
resultado mejor. El sistema empleado para la traducción es
estadístico, y por tanto, su misión no es fragmentar y reunir las
frases para obtener el significado, sino que proporciona un
resultado obtenido tras analizar los textos equivalentes más
probables. Las fuentes de datos provienen en la mayoría de los
casos de traducciones humanas: Desde textos clásicos hasta
obras modernas. En el primer caso los resultados son muy
interesantes, pero cuando se enfrenta a nuevos textos, en muchos
casos, Google Translate se pierde en la intención, el contexto real
y el estilo.
8. PROBLEMAS EN LA TRADUCCIÓN
AUTOMÁTICA La traducción automática en sí misma es un problema difícil por
dos motivos principalmente: El primero es que los lenguajes
naturales son muy ambiguos. Esta ambigüedad se da en todos los
niveles (tanto léxico, sintáctico, semántico como pragmático).
Una palabra of rase puede tener más de un significado. Decidir el
significado adecuado en cada momento es crucial para hacer un
análisis correcto. El segundo motivo es que cuando los humanos
emplean el lenguaje natural, emplean a la vez una enorme
cantidad de sentido común, y conocimiento acerca del mundo, que
les ayuda a resolver la ambigüedad. Conseguir que la traducción
automática consiga el mismo conocimiento del mundo en un
contexto sin restricciones requiere de un gran esfuerzo.
9. INVESTIGACIÓN ACTUAL Y
RENTABILIDAD DE LA TRADUCCIÓN
AUTOMÁTICA Las investigaciones llevadas a cabo hoy en día en los sistemas de
traducción automática están centradas en especial en la búsqueda
y mejora de técnicas de aprendizaje máquina para adquirir el
significado de las palabras y la gramática de forma automática.
Estas tareas necesitan emplear inmensas cantidades de corpora y
aplicar técnicas estadísticas como por ejemplo redes neuronales
para obtener correlaciones en el corpus. Los corpora que se
emplean en estas investigaciones pueden ser para un único idioma
o bien pueden ser corpora bilingües alineados, que tal y como se
ha comentado con anterioridad se trata de textos traducidos en dos
lenguas y ordenados haciendo corresponderse ciertas partes del
texto origen con el texto destino.
Las memorias de traducción son otra línea de investigación hoy en
día. Consisten en recordar automáticamente las traducciones
completas de frases o expresiones comunes para evitar procesarlas
repetitivamente.
Actualmente, hay gran actividad en el mundo de la traducción
automática en Japón y la Unión Europea, y por extensión en
EEUU.
Todavía se continuará investigando hasta que se obtenga un
sistema de traducción que, desde el punto de vista lingüístico y
comercial, sea rentable. Como hemos comentado ya a lo largo del
trabajo los sistemas han sido útiles y rentables cuando nos
centramos en campos y ciencias específicas de un grupo, por ello
se está tendiendo a realizar sistemas que se basan en lo que
denominaríamos sublenguajes como entre otros podemos
encontrar, el jurídico, el científico, el médico, el filosófico, etc.
Estos sublenguajes no requieren traducciones de calidad elevada y
pueden resultar muy valiosos para las personas que desempeñen
actividades dentro de estos campos. La traducción resultará más
sencilla haciendo estas subdivisiones dado que el vocabulario será
más reducido y la sintaxis está más limitada, ya que son lenguajes
con formas fijadas, más estáticos, abundan en ellos fórmulas y
suelen estar sometidos a controles permanentes.
Un ejemplo claro de lo que acabamos de exponer es el de Meteo,
un programa que desde el año siguiente a su instalación (1977) ha
estado produciendo partes meteorológicos para el servicio
meteorológico de Canadá diariamente. En la actualidad, podemos
hablar de unos resultados tan buenos como son que el programa
traduzca alrededor de 37.000 palabras diarias con un 90%.de
precisión.
Resultados como los obtenidos con un sistema como es Meteo
hacen que se pueda demostrar lo rentable que resulta la traducción
automática en algunos casos, a pesar de que para otros ámbitos
todavía no lo sea., como ocurre con el lenguaje espontáneo,
coloquial que se resiste a una formalización precisa y a ajustarse a
reglas gramaticales, hechos que resultan necesarios para la
obtención de una buena traducción. De esta forma, tendremos que
esperar para ver buenos resultados en lo que al lenguaje común se
refiere por lo que de momento sólo podemos hablar de traductor
como un complemento de ayuda al ser humano.
10. CONCLUSIONES Podemos concluir que el desarrollo de los sistemas de traducción
ha sido posible gracias a dos hechos importantes que les han
favorecido claramente: en primer lugar la explosión de
información al alcance de todo el mundo y en idiomas diferentes
de lo cual el gran culpable es Internet y en segundo lugar la
globalización. Esto significa que hay una enorme necesidad de
comunicación y de hacerse con información la cuál debe estar
disponible en diversos idiomas para que pueda ser accesible a
todo el mundo
Sólo basta con fijarse en las cifras para hacerse una idea de la
valía que tiene el mercado de la traducción automática hoy en día;
se estima que a nivel mundial vale casi 10.000 millones de euros.
- 59 -
Hemos comprobado que los sistemas encargados de traducir por
ejemplo grandes obras literarias (como puede ser El Quijote) se
encuentran aún muy alejados de obtener una traducción de buena
calidad, pero por el contrario aquellos que traduzcan partes
meteorológicos, textos técnicos, etc. tienen un peso importante
hoy en día para la sociedad.
El mayor problema con el que cuentan todavía los sistemas de
traducción radica en la calidad que se obtiene tras la realización
de la traducción. Aún tenemos que recortar distancias entre el
producto obtenido y la verdadera traducción, porque aunque cada
vez vayamos imitando mejor la labor que lleva a cabo un
traductor humano, todavía nos queda un largo camino que recorrer
para igualarlo.
11. REFERENCIAS [1] Wikipedia
http://es.wikipedia.org/wiki/Traduccion_automatica
[2] Cohen, J.M., "Translation", Encyclopedia Americana, 1986,
vol. 27, pp. 12–15.
[3] Wikipedia
http://es.wikipedia.org/wiki/Piedra_de_Rosetta
[4] Hutchins, W. John; and Harold L. Somers (1992). An
Introduction to Machine Translation. London: Academic
Press. ISBN 0-12-362830-X.
[5] Rao, Durgesh D. (1998)
Machine translation: A gentle introduction.
ISSN: 0971-8044
[6] Jos Hallebeek
“El corpus paralelo”. Universidad de Nijimegen. Nederlands
[7] José A. Troyano
“Alineación de textos y traducción automática”. ITALICA.
Universidad de Sevilla
[8] Petra Prochäzková (2006)
“Fundamentos de la lingüística del corpus. Concepción de
los corpus y métodos de investigación con corpus”.
[9] Andreas Eisele (2007)
“Hybrid machine translations: Combining rule-based and
statistical MT systems”. Saarland University & DFKI. LT
Lab.
[10] WIRED
http://www.wired.com/wired/archive/14.12/translate.html
[11] European Association for Machine Translation
- 60 -
1
Resolución de Puzzles Deslizantes
Lara Rojo Celemín
Ingeniería de Telecomunicación Universidad Carlos III de Madrid [email protected]
Iván Suárez Morejudo
Ingeniería de Telecomunicación Universidad Carlos III de Madrid [email protected]
ABSTRACT
En 1878, Sam Loyd daba un premio de $1.000 a quien fuera
capaz de resolver su famoso 14-15 Puzzle. Se trataba de un puzzle
deslizante de 16 piezas que no tenía solución, lo que hizo que
muchas personas se volvieran locas tratando de resolverlo.
En este trabajo tratamos de presentar diferentes algoritmos para
resolver el 15-Puzzle desde el punto de vista de la Inteligencia
Artificial. Para ello, utilizamos el algoritmo de búsqueda en
árboles A*, del que daremos una visión general que luego
particularizaremos a nuestro caso del 15-Puzzle.
Aunque en este trabajo sólo nos hemos centrado en resolver el
rompecabezas de 16 piezas, los algoritmos explicados pueden
utilizarse para resolver cualquier puzzle deslizante n x n con
solución.
Términos Generales
Puzzles, Algoritmos, permutaciones pares, heurística, Inteligencia
Artificial, resolución humana.
Keywords
Puzzles deslizantes, 15-puzzle, Sam Loyd, Algoritmo A*,
herística, Turing.
1. INTRODUCTION
El objetivo de este trabajo es presentar diferentes algoritmos para
la resolución de puzzles deslizantes. Aunque sólo nos hemos
centrado en el 15-puzzle, los algoritmos aquí presentados pueden
ser aplicados a puzzles de cualquier tamaño, siempre y cuando
estos tengan solución.
Sin embargo, no sólo nos centraremos en cómo resolverlos de
forma manual sino también explicaremos como implementar
dichos algoritmos en ordenadores. Para ello, utilizaremos
búsquedas en árboles aplicando el algoritmo de búsqueda A*, el
cual explicaremos y particularizaremos.
El primer algoritmo que presentaremos es el algoritmo propuesto
por Richard Hayes [4] en el cual el n-puzzle se irá reduciendo a
(n – 1)puzzle resolviendo la primera fila y la primera columna.
En el segundo, [5] propone colocar en orden las casillas de las
primeras (n – 2) filas. Finalmente, las piezas de estas dos últimas
filas se colocarán por columnas. Este método, como veremos más
adelante, será el más eficiente.
Finalmente, daremos una visión desde el punto de vista de la
psicología sobre las habilidades obtenidas resolviendo este tipo de
rompecabezas así como las partes de nuestro cerebro que se ven
afectadas. Además explicaremos las diferencias de nuestra mente
con respecto a las máquinas y las variables que influyen en la
forma de resolver problemas, como es el caso de la ansiedad.
2. EL PUZZLE
2.1 Definición
El (n2 - 1)puzzle consiste en un tablero de (n x n) con n casillas,
numeradas del 1 al (n2 - 1) , ordenadas de manera aleatoria. La
casilla n2 se encuentra vacía para poder realizar los movimientos
necesarios, de forma horizontal o vertical, para poder cambiar el
orden de las casillas. Recibe multitud de nombres según el
número de fichas 8-puzzle para la versión 3x3, 15-puzzle para la
versión de 4x4, u otros nombres menos comunes como Puzzle
Gem, Puzzle Boss o Cuadrado Místico. El objeto del
rompecabezas es ordenar las fichas utilizando el espacio vacío
para desplazarlas.
Figura 1: 15-Puzzle resuelto.
- 61 -
2
Es un problema clásico de modelación de algoritmos usando
heurística, de modo que estos sean eficientes con buenos tiempos
de ejecución y usando óptimas soluciones. El uso de la heurística
común en este problema conlleva el recuento del número de fichas
que se encuentran fuera de lugar, y encontrar la suma de las
distancias Manhattan desde su posición actual hasta su posición
correcta.
2.2 Historia
No se sabe muy bien a quien atribuir la invención de este
rompecabezas ya que la historia es confusa. Los libros, en un
principio, la atribuyen a Sam Loyd debido a que en 1878 “llevara
al mundo a la locura” por un premio de $1.000 a quien fuera
capaz de resolver el famoso puzzle de 14-15, el cual no tenía
solución debido que se necesitaba un número impar de
movimientos y, como veremos más adelante, sólo un número de
movimientos par tiene solución.
El puzzle se extendió rápidamente por todas las ciudades de
Estados Unidos, Canadá incluso llegó a Europa.
En realidad, el puzzle no fue inventado por Sam Loyd, a pesar que
él lo defendiera durante años, sino que era una variación del
rompecabezas creado por Palmer Noyes Chapman con los bloques
14-15 invertidos.
Figura 2: Ilustración de Sam Loyd sobre su puzle.
Palmer Noyes Chapman, en Agosto de 1880, presentó ante la
oficina de patentes el registro del 15-puzzle. Sin embargo, su
solicitud le fue denegada ya que en Febrero de 1878 se había
registrado otra patente de un puzzle similar llamado “Puzzle de
bloques” por Ernest U. Kinsey.
Previamente, su hijo lo distribuyó en 1879 por diferentes ciudades
de Estados Unidos. Por suerte, uno de dichos rompecabezas fue a
parar a la Escuela Americana de Sordos de Hartford, quienes lo
comenzaron a fabricar en su taller de carpintería para venderlo en
las calles de Hartford y Boston. Matthias Rice, propietario de un
negocio de carpintería de lujo en Boston, se interesó en la
fabricación del mismo y convenció a Yankee Notions
(Distribuidor de bienes de lujo) para su comercialización con el
nombre de Puzzle Gem.
Casi un siglo después, Ernö Rubik se interesó por el
rompecabezas buscando una forma de que funcionara sin el
espacio vacío que permitía mover las piezas. Finalmente, su
trabajó desembocó en la creación del famoso Cubo de Rubik.
3. ALGORITMOS
Para resolver el 15-puzzle podemos aplicar distintos algoritmos
que nos lleven a la solución. Como es lógico, unos algoritmos son
más eficientes que otros. A continuación se presentan dos
algoritmos pero en ambos, la condición necesaria para que tengan
solución es que el número de permutaciones sea par.
3.1 Permutaciones pares
Como hemos dicho anteriormente, el 15-puzzle sólo tiene
solución si el número de movimientos para resolverlo es par. El
número de posibles estados iniciales es n!, siendo n el número de
fichas. Por tanto, en nuestro caso, tendremos más de 130.000
millones de posibles estados iniciales. Sin embargo, sólo la mitad
de esas combinaciones tiene solución.
Para poder saber la paridad del estado inicial se define el concepto
de Inversión, es decir, la violación del orden de la posición de
acuerdo a su valor. En otras palabras, la inversión de una ficha
será la suma del número de fichas que se encuentran en una
posición superior a dicha ficha y que deberían estar situadas en
una posición inferior. La inversión total será la suma de las
inversiones individuales. Si este número es par, el puzzle tendrá
solución. En caso contrario, no habrá solución.
Por ejemplo, en el puzzle propuesto por Loyd, la inversión total
será uno y, como este número es impar, el número de
permutaciones será impar y, por tanto, el puzzle no tiene solución.
Una vez que se conoce la paridad del puzzle, podremos aplicar
algún tipo de algoritmo para resolverlo. En nuestro caso,
presentamos dos posibles soluciones.
3.2 Algoritmo I
Este algoritmo fue propuesto por Parberry en 1997 para resolver
puzles deslizantes n x n. Su método se basa en reducir el n-puzzle
en un (n-1)-puzzle resolviendo la primera fila y la primera
columna de cada puzzle, quedando como resultado un (n-1)-
puzzle. Sin embargo, una vez que se llega a un 3x3-puzzle, este
método deja de funcionar ya que no tenemos libertad de
movimiento para no afectar a las piezas colindantes y se tiene que
resolver usando “la fuerza bruta”.
Más tarde, en 2001, Richard Hayes, utilizando el algoritmo de
Parberry, consigue evitar el problema de resolver el puzzle usando
la fuerza bruta.
- 62 -
3
El algoritmo se desarrolla en tres pasos:
1. Colocar las piezas de la primera fila
2. Colocar las piezas de la primera columna.
3. Volver al primer paso con el (n-1)puzzle.
Figura 3: Reducción del 15-puzzle a 3-puzzle.
Para colocar tanto las piezas de la primera fila como de la primera
columna de manera eficiente, se toma como referencia las
diagonales de la posición en la que debe ir la ficha en cuestión. En
función de la posición original de la ficha, utilizaremos una
diagonal u otra.
Si la ficha se encuentra a la izquierda de la columna en la que
debería ir o en la misma columna, utilizaremos la diagonal de la
figura 4a. En cambio, si la ficha se sitúa a la derecha, utilizaremos
una de las diagonales descritas en las figuras 4b y 4c.
Figura 4: Descripción de las diagonales.
No obstante, las dos últimas fichas de la fila serán colocadas de
manera especial. En este caso, se coloca en la posición 1 x (n-1) la
ficha (n-2) y, en la posición 2 x (n-2) la ficha (n-2) siguiendo el
mismo procedimiento explicado con anterioridad. Por último, se
desplaza la ficha(n – 2) a la posición 1 x (n – 2) y la (n – 1) a su
posición.
Figura 5: Colocación de las últimas piezas.
Para las columnas, se sigue un procedimiento similar: se colocan
las primeras piezas y cuando queden sólo dos, se pondrá la
penúltima pieza en la última posición y la última pieza en la
columna adyacente a la última posición.
Sin embargo, hay algunas combinaciones que no pueden ser
resueltas aplicando este algoritmo. Para ello, buscamos una
posible combinación tal que se pueda resolver a través del
algoritmo previamente descrito.
Las únicas combinaciones que no tienen solución ocurren cuando
la pieza (n- 1) de una fila se sitúa en la posición (n – 2) o cuando
la pieza (n – 1) de una columna se encuentra en ((n – 2), 0). Por
ello, lo único que debemos hacer es mover dicha pieza de esa
posición.
Figura 6: Caso especial.
3.3 Algoritmo II
A partir de la información obtenida en [4], podemos resolver el
15-Puzzle ordenando la primera y segunda fila de manera
consecutiva, para luego terminar de ordenar las dos últimas filas
por columnas. De esta manera se consigue llegar al estado final
del puzzle en un promedio de 80 movimientos, una cifra bastante
eficiente teniendo en cuenta el número de movimientos posibles.
La implementación de dicho método se basa en el Algoritmo de
búsqueda A*.
3.3.1 Algoritmo de búsqueda A*
El algoritmo de búsqueda A* es un algoritmo computacional
clasificado dentro de la búsqueda por grafos, para encontrar el
camino de menor coste entre el nodo origen y destino. Está
motivado debido a que en algoritmos de búsqueda en grafos
informados, como el algoritmo voraz, estos siguen un camino
basado únicamente en la función heurística. Dicha función no nos
indica el coste real de desplazarse de un nodo a otro, sino una
aproximación que puede no ser óptima, llevando a realizar
movimientos extra que terminan derivando en un mayor coste
para alcanzar la solución.
Por ello un algoritmo óptimo de búsqueda informada deberá tener
en cuenta el factor del valor heurístico de los nodos, y el coste real
del recorrido. Por ello el algoritmo A* usa la siguiente función de
evaluación f(n) = g(n) + h'(n), siendo el primer término g(n) el
coste real del camino recorrido para llegar al nodo n, y h’(n) el
valor heurístico del nodo a evaluar desde el actual n hasta el final.
Además A* necesita de dos estructuras de datos auxiliares, para
mantener un conjunto de soluciones parciales almacenadas:
Abiertos: se trata de una cola de prioridad ordenada
según el valor f(n) de cada nodo.
Cerrados: información de los nodos ya visitados.
En cada iteración del algoritmo se realiza una consulta de la
estructura de Abiertos, se consulta el primer nodo de la lista
ordenada, si no se trata de un nodo objetivo, se calcula la f(n) de
- 63 -
4
todos sus hijos, se insertan en la cola de Abiertos, y finalmente el
nodo evaluado se traspasa a la estructura de Cerrados.
Se trata de un algoritmo de búsquedas de tipo primero en anchura
para g(n) con primero en profundidad para h’(n). Esto quiere decir
que:
Para g(n) se establece un nodo raíz, y se exploran y
evalúan todos los vecinos de este nodo, y a
continuación para cada uno de los vecinos se
exploraran sus correspondientes vecinos adyacentes, y
se realiza esto hasta que hayamos explorado todo el
árbol.
Para h’(n) el modo de exploración es diferente, en la
búsqueda en profundidad partimos de un nodo que
vamos expandiendo de manera recurrente para un
camino determinado, en el momento que ese camino no
se puede propagar más, volvemos atrás y comenzamos
de nuevo a expandir el nodo vecino del cual partimos y
que ya ha sido procesado. Es un algoritmo que nos
permite recorrer todo el árbol de manera ordenada pero
no uniforme.
La complejidad y carga computacional de este algoritmo está
dispuesta por la calidad heurística usada en el problema. Por ello
para una mala heurística la complejidad será exponencial, y para
una heurística óptima tendremos una complejidad lineal y por ello
un tiempo de ejecución del mismo modo, siendo necesario por
ello, que con una heurística optima se verifique que:
h’(x) <= g(y) - g(x) + h’(y)
,donde h’(y) es un estimador de h(x) que indica la distancia a la
solución.
Las propiedades del algoritmo son las siguientes:
Es un algoritmo completo, en caso de existir solución la
encontrará.
El algoritmo no desarrolla un camino por interacción,
formula varios y selecciona lo más competentes.
Para garantizar que se trata de un algoritmo óptimo, la
función h(n) deberá ser válida, sin exagerar el valor real
de encontrar la solución.
SI h’(n) realiza una estimación exacta de h(n), el
algoritmo converge rápidamente a la solución.
Si h’(x) = 0, la búsqueda es controlada por la función
g(x).
Si h’(x) = g(x) = 0 se trata de una búsqueda aleatoria.
Si h’(x) = 0 y g(x) = 1, se trata de una búsqueda que se
desarrolla primero en anchura.
Si h(x) no se sobrestima por h’(x), se encuentra un
camino optimo pero se han buscado rutas alternativas
que han conllevado un sobre cálculo desaprovechado.
En caso contrario si h(x) se sobrestima por h’(x), no se
asegura que se avance por el camino de menor coste.
Si para todos los nodos n del grafo se verifica que g(n)
= 0 se trata de una búsqueda voraz.
Si para todos los nodos n del grafo se verifica que h(n)
= 0, se trata de una búsqueda de coste uniforme no
informada.
Pero en este algoritmo no todo son ventajas, existe un gran
problema a la hora de ejecutar un algoritmo basado en A*, que es
la gran cantidad necesaria de memoria. Esto es debido a que se
debe almacenar todos los posibles siguientes nodos de cada
estado, derivando por ello en una cantidad de memoria
exponencial respecto al tamaño y complejidad del problema.
Como alternativas a este problema se presentan variaciones de
este algoritmo como pueden ser RTA*, IDA* o SMA*.
Figura 7: Ejemplo de aplicación del algoritmo A*.
A continuación explicamos el funcionamiento del algoritmo
mediante un ejemplo. En dicho ejemplo buscamos el camino a
recorrer más corto para ir desde el punto verde al rojo, esquivando
el muro azul el cual no podemos atravesar. Como observamos el
área de búsqueda se ha dividido en una simple rejilla,
simplificando así el problema a una matriz bidimensional,
representando así cada cuadrado de la rejilla como un elemento de
la rejilla, y pudiendo así almacenar sus propiedades y valores,
como si es posible atravesarlo. A partir de ahora a dichos
cuadrados los llamaremos nodos.
Figura 8: Área de búsqueda en rejilla. En verde, punto de
inicio. En rojo, punto final.
- 64 -
5
Comienza la búsqueda:
1. Comenzamos por el nodo de inicio (verde), añadimos este a
una lista abierta, la cual está formada por los nodos que
pueden formar parte del camino a seguir, pero que aún
debemos comprobar.
2. Revisamos todos los nodos alcanzables y colindantes al nodo
de inicio, ignorando los cuadrados intransitables como puede
ser el muro. Los añadimos a la lista abierta, marcando en
cada uno de ellos una referencia al nodo de inicio como su
nodo padre. Bordeamos los nodos de la lista abierta en color
verde, y marcamos la referencia al nodo padre con una flecha
gris.
Figura 9: Nodo de inicio y sus nodos alcanzables.
3. Traspasamos el nodo inicio a la lista cerrada, ya que no es
necesario para nada de momento. El borde de su color en la
imagen será azul, debido a que se encuentra en la lista
cerrada.
4. Ahora deberemos seleccionar el nodo con el valor de F (F =
G+H) más bajo. Donde G es el valor de movimiento del
nodo inicio a otro nodo de la rejilla siguiendo el camino
necesario, y siendo F el valor del movimiento estimado para
ir desde ese nodo hasta el nodo final, donde este último valor
no es más que una hipótesis ya que no conocemos aún la
distancia exacta.
a. En este ejemplo al valor de G le daremos un valor
de 10 a los movimientos ortogonales, y de 14 a los
movimientos diagonales. Para el cálculo del valor
G del nodo, sumaremos al valor G de su padre el
valor del tipo de movimiento que realicemos.
b. En el caso del valor H este se puede estimar de
muchas maneras diferentes. En este caso
utilizaremos una aproximación mediante la
distancia Manhattan, donde solo tendremos en
cuenta el número de cuadrados horizontales y
verticales (solo existe movimiento ortogonal) que
debemos desplazarnos de manera directa
(ignorando y no teniendo en cuenta los obstáculos
que pudieran existir en el recorrido) para llegar
desde el nodo inicio al nodo de destino. Como
observamos se trata de una aproximación del
recorrido a seguir, de ahí que se trate de un valor
heurístico.
En la Figura [9] podemos observar los valores obtenidos, donde el
valor G está representado en la esquina inferior izquierda, H se
encuentra en la esquina inferior derecha, y el valor F de resultante
de la suma de G y H se encuentra en la esquina superior izquierda.
También vemos que hemos elegido el nodo que colinda a la
derecha con el nodo inicio (marcado con el borde azul), ya que se
trata del nodo con menor valor de F, en este caso 40.
Figura 9: Valores de las funciones.
5. Traspasamos el nodo seleccionado de la lista abierta a la
cerrada, ya que no vamos a operar más con él, y cambiamos
por ello el color de su borde de verde a azul.
6. Verificamos que los nodos contiguos que sean accesibles y
no se encuentren en la lista cerrada, y añadimos a la lista
abierta a aquellos que no pertenecen aún a ella, marcando
como nodo padre al seleccionado anteriormente.
7. Comprobamos para los nodos contiguos que ya se
encontraban en la lista abierta, si su valor G es inferior al
nuevo valor de G que recalcularíamos con el nodo
actualmente seleccionado. Si el valor G del nuevo camino es
menor, seleccionamos este nuevo nodo, y cambiamos el
padre de los nodos contiguos por este otro, recalculando de
estos nodos su nuevo valor de G y F.
- 65 -
6
En nuestro caso como observamos, el valor obtenido de G
para el nodo inferior derecho moviéndonos en diagonal
desde el nodo inicio tiene un valor de 14, frente al valor G
igual a 20 que tendría si el camino recorrido por dicho nodo,
proviniera del nodo superior, que previamente provenía por
su izquierda del nodo inicial. Por ello seleccionamos este
nuevo nodo (marcándolo como azul), desechamos el anterior.
En el caso de existir un caso con dos posibilidades
seleccionamos aquella con valor F menor.
8. Marcamos y apuntamos el nuevo nodo seleccionado como
padre para los nodos contiguos. Comprobamos los nodos
contiguos y calculamos sus valores de G, H y F. Podemos
observar el proceso en la Figura [10].
Figura 10: Marcamos y calculamos las funciones de las casillas
colindantes al nuevo nodo.
9. Comprobamos si el nodo situado a la izquierda del ahora
seleccionado tiene un coste G menor a través del nodo actual,
frente a llegar desde el nodo inicial. Como no es así lo
desechamos.
10. Repetimos de manera recursiva este proceso, hasta que
finalmente añadimos el nodo destino a la lista abierta. Una
vez llegado a ese estado obtendremos algo similar a lo que
podemos apreciar en la Figura [11].
Figura 11: Resultados tras aplicar el algoritmo.
11. El camino buscado que une el nodo inicial con el final, es
aquel el cual apuntan las flechas partiendo desde el nodo
final, recorriéndolas hasta el nodo inicial. En la Figura [12],
observamos el camino obtenido para esta interacción.
Figura 12: Camino obtenido para llegar del nodo origen al
destino aplicando este algoritmo de búsqueda.
Aplicando este algoritmo para el caso del 15 Puzzle, nuestros
nodos serán las posibles combinaciones que conseguimos
desplazando las fichas a través de la casilla vacía. A través del
siguiente ejemplo explicaremos su funcionamiento.
Partimos del siguiente estado inicial, Figura [13]. Primero
comprobaremos el número de permutaciones, que en este caso es
par (4). A continuación, creamos las dos listas o estructuras de
datos: Abierta y Cerrada. En la abierta, insertamos nuestro estado
inicial.
Figura 13: Estado Inicial de nuestro Puzzle.
Ahora tenemos que analizar los nodos alcanzables a nuestro nodo
origen, es decir, definimos los posibles movimientos que podemos
realizar. En este caso, sólo tenemos dos posibilidades (Figura
[14])
Figura 14: Posibles movimientos.
- 66 -
7
Hay que calcular el valor de la función f(n). Dado que estamos
realizando un ejemplo sencillo y sólo hacemos movimientos
ortogonales (horizontal o vertical), tomaremos como función g(n)
el número de movimientos realizados hasta llegar a ese estado. En
cuanto a la función heurística h(n), utilizaremos la suma del
número de casillas que se encuentran en una posición superior
con respecto a la casilla analizada, sin tener en cuenta la casilla
vacía. Para ello, la forma más sencilla es colocar nuestro tablero
en forma de vector:
Estado inicialA: 1 2 3 4 5 6 7 8 9 10 12 15 13 14 – 11
Estado final: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 –
gA(n)= 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 3 + 1+1= 6
Estado inicialB: 1 2 3 4 5 6 7 8 9 10 12 15 13 14 – 11
Estado final: 1 2 3 4 5 6 7 8 9 10 11 – 13 14 11 15
gB(n)= 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1+1= 3
Por tanto, obtendremos los siguientes valores para la función f(n):
fA(n) = gA(n) + hA(n) = 1 + 6 = 7
fB(n) = gB(n) + hB(n) = 1 + 3 = 4
A continuación pasamos nuestro estado origen a la lista Cerrada y
añadimos en la lista Abierta nuestros nuevos estados ordenados en
orden creciente de acuerdo al valor obtenido de la función.
Nuestro nodo origen será ahora el estado de la figura [14]b. Ahora
sólo obtendremos un nuevo estado: Figura [15]
Figura 15: Nuevo estado inicial.
La función f(n) será ahora 5, así que será nuestro siguiente nodo
origen.
Aplicando dos veces más este algoritmo, llegamos a la solución
del puzzle en tan sólo 4 movimientos.
Figura [16]: Últimos estados iniciales.
Finalmente, en la Figura [17] se muestra el árbol resultante tras
aplicar el algoritmo:
Figura [17]: Árbol resultante.
4. ENFOQUE PSICOLÓGICO PARA EL
PLANTEAMIENTO DE ALGORITMOS
En las últimas décadas, debido al desarrollo tecnológico, ha
tenido una especial importancia el debate sobre si la mente
humana puede compararse con el ordenador. Para ello, se han
realizado estudios que abordaban la resolución de problemas tanto
en humanos como en ordenadores. En Psicología han destacado
dos autores que han tratado este tema: Turing afirmó que la mente
humana se puede comparar con el ordenador debido a que ambos
pueden razonar lógicamente, mientras que Searle se opuso a esta
afirmación defendiendo que, si bien es cierto que ambos pueden
manejar símbolos, sólo la mente humana es capaz de atribuir
significado a los símbolos que maneja, por ello, según este autor
la mente no es un programa informático. No obstante, para
resolver determinadas tareas no es necesaria la intervención del
significado, por ejemplo, en la solución de este puzle basta con
manejar los símbolos adecuadamente.
Turing es considerado uno de los padres de la ciencia de la
computación ya que formalizó los conceptos de algoritmo y
computación mediante su famosa máquina de Turing. Además, es
uno de los precursores de la Inteligencia Artificial ya que
consideraba que las máquinas podrían llegar a pensar. Lo cual
enunció a través de la prueba que lleva su nombre, en la que
pretendía comprobar de manera estándar si una máquina puede
apuntar a ser sensible o sintiente.
Con respecto a la anatomía cerebral, cabe destacar que el cerebro
se divide en dos hemisferios y para resolver este puzle se
requieren ambos. Por un lado, el hemisferio izquierdo se relaciona
con el razonamiento y la habilidad numérica, puesto que es
analítico, racional, secuencial, organizado, matemático, simbólico,
etc. Mientras que, por otro lado, el hemisferio derecho se
corresponde con la habilidad visoespacial. Las habilidades
- 67 -
8
mencionadas son necesarias para resolver el puzle y estos datos se
pueden apoyar mediante técnicas cerebrales como el EEG que
muestran las áreas cerebrales que se activan ante esta tarea.
Además, las alteraciones en determinadas zonas del cerebro
suelen ir acompañadas de una dificultad a la hora de resolver este
tipo de problemas.
Esta especialización cerebral se produce por la necesidad que
tiene el cerebro de ahorrar energía, lo que nos da una similitud
con la programación que nos conlleva siempre a diseñar
programas especializados para hacer un uso eficiente de los
recursos disponibles y/o limitados de la máquina para su
ejecución.
En cuanto a la solución de problemas, los seres humanos aplican
una serie de estrategias según el tipo de problema. Para resolver
este puzle la estrategia óptima es la división del problema en
subproblemas o submetas. Esta estrategia se basa en la idea de
“divide y vencerás”, por lo que se trata de reducir un problema
amplio en varios más pequeños que acerquen a la persona a la
meta.
Para la Gestalt, la solución de problemas es algo más que aplicar
de forma mecánica la experiencia, es realizar una reestructuración
perceptiva. Este enfoque diferencia entre pensamiento productivo
y reproductivo: el pensamiento productivo es la producción de
una solución nueva a partir de una organización creativa del
problema (se usa cuando se ha comprendido la estructura del
problema), por ello, para la Gestalt éste es el verdadero
pensamiento; por otro lado, el pensamiento reproductivo consiste
en aplicar en situaciones similares la misma solución. Para la
resolución del puzle se requiere el pensamiento productivo.
Por otro lado, según Greeno, los problemas se pueden dividir en
tres clases principales: Problemas de deducción de la estructura,
Problemas de organización y Problemas de transformación. Este
puzle es un problema de transformación, puesto que tiene todos
los elementos del estado inicial y, a medida que se va avanzando y
se van aplicando operadores, se va transformando el problema
hasta llegar a la meta.
Sumado a ello, cabe mencionar los cuatro pasos necesarios para
resolver un problema propuestos por Polya (1945). En primer
lugar, es necesaria la comprensión del problema, esto supone no
sólo descodificar el lenguaje del enunciado, sino también adoptar
una actitud de solución de la tarea e identificar el problema.
Algunos ejemplos de preguntas que se pueden proponer en esta
fase son: ¿cuál es la meta?, ¿cuáles son los datos?, ¿qué
condiciones? y ¿es suficiente la información?. En segundo lugar
se elabora un plan. Las preguntas características de este paso son:
¿conozco algún problema relacionado con éste?, ¿es necesario
dividir el problema? y ¿es necesario resolver alguna parte antes
que otra?. En tercer lugar, se ejecuta el plan, se comprueba cada
paso y se resuelve el problema. Algunas de las preguntas de esta
paso son: ¿es necesario este paso?, ¿es correcto?. Por último, el
cuarto paso contempla la visión retrospectiva o revisión de la
tarea, esto es, verificar el resultado y el razonamiento. Algunos
ejemplos de preguntas son: ¿se puede obtener el mismo resultado
por algún otro método?. Estos cuatro pasos son descriptivos y
normativos y, como puede observarse, mantienen relación con el
proceso que lleva a cabo un ordenador a la hora de resolver este
tipo de problemas.
No obstante, en determinadas ocasiones la mente humana no
sigue estos pasos ininterrumpidamente, sino que llega a un punto
en el que la persona no se ve capaz de resolver el problema y lo
abandona durante un tiempo en el que la mente de forma
inconsciente sigue pensando en el problema hasta dar con la
solución. Este fenómeno recibe el nombre de insight y es uno de
los aspectos que diferencia a los seres humanos de los
ordenadores. Sumado a ello, los seres humanos presentan otras
variables que influyen en la forma de resolver problemas, por
ejemplo, la ansiedad, que facilita hasta cierto punto la resolución
de la tarea y, pasado ese punto, la dificulta. Por ello, la relación
entre rendimiento y activación se representa siguiendo la Ley de
Yerkes-Dodson:
Figura 18: Ley de Yerkes-Dodson.
Otro punto a destacar es el papel que tiene el aprendizaje en la
resolución de este tipo de puzle. Por un lado, existen teorías sobre
la solución de problemas basadas en habilidades generales, como
la Gestalt y el Procesamiento de la Información, mientras que
otras teorías defienden que la solución de problemas se basa en
habilidades específicas, como la teoría de Expertos y novatos.
Para el primer enfoque se puede aprender a resolver este tipo de
problemas de forma que el aprendizaje afecte a las habilidades
generales. No obstante, según el enfoque de Expertos y novatos el
aprendizaje solo se produce en una habilidad específica, puesto
que, por ejemplo, aprender a resolver un puzle no mejora la
capacidad para resolver problemas de índole social. La eficacia en
la solución de un problema no depende de la disposición de
estrategias o habilidades generales y transferibles, válidas para
cualquier problema, sino de los conocimientos específicos, útiles
para solucionar ese problema. El rendimiento experto sería el
modelo para la solución eficiente de un problema. Hay dos tipos
de expertos: los técnicos y los estratégicos. Los técnicos resuelven
un problema de su dominio de forma automática y rutinaria. Los
estratégicos resuelven un problema nuevo o poco familiar dentro
de su dominio sin contar con procedimientos automáticos, por
ello, requieren un control metacognitivo.
Los expertos son mejores que los novatos resolviendo problemas
incluso cuando se enfrentan con problemas fuera de su área de
pericia porque manejan más recursos cognitivos.
La eficacia en la solución de problemas no se debe a
diferencias en la capacidad cognitiva general, sino a las
diferencias en conocimientos específicos.
- 68 -
9
El conocimiento procedural: Por un lado, los expertos y
los novatos utilizan distintos heurísticos en la solución
de los mismos problemas. Además, los expertos
controlan mejor la ejecución del problema. Por último,
los expertos utilizan un amplio número de algoritmos de
forma automática y, además los generalizan a diversos
problemas. Los expertos aplican técnicas y no
estrategias (uso deliberado e intencional).
Sumado a ello, la teoría de Expertos y novatos destaca el papel del
conocimiento previo, lo que nos lleva a una de las teorías más
relevantes de la Psicología de la Educación: el Constructivismo.
Pese a que la idea de que una persona no es experta en todo sino
que sólo en unos dominios, como propone la teoría de Expertos y
novatos, es opuesta a la teoría de Piaget, también es cierto que
ambas teorías recogen la importancia de la experiencia o
conocimiento previo debido a la influencia que tiene a la hora de
resolver un problema de este tipo. Por ejemplo, si una persona a
aplicado anteriormente una estrategia inadecuada para resolver el
puzle, en el futuro será menos probable que vuelva a aplicar la
misma estrategia, por lo que dará antes con la estrategia óptima y
solucionará la tarea con mayor rapidez.
Por su parte, esta relación entre la conducta y sus consecuencias
ya la propuso el Conductismo cuyo fundador fue Watson,
destacando el condicionamiento instrumental u operante
desarrollado por Skinner, cuya premisa principal es que aquella
conducta que vaya seguida de una consecuencia negativa (castigo)
tendrá menor probabilidad de repetirse, mientras que la conducta
seguida de una consecuencia positiva (refuerzo) probablemente se
repita en un futuro.
Referencias
[1] Fifteen Puzzle
http://en.wikipedia.org/wiki/15-puzzle
[2] Slocum, J. Sonneveld D. 2006. The 15 Puzzle: How it drove
the World crazy. The Slocum puzzle Foundation.
[3] Juego del Puzzle
http://es.scribd.com/doc/41776980/Juego-Del-Puzzle-1
[4] Hayes, R. 2001. The Sam Loyds 15 Puzzle.
[5] Parberry, I. 1997. A Real-Time Algorithm for the (n2-1)-
Puzzle. University of North Texas. Department of Computer
Science.
[6] Búsqueda en árboles
http://es.scribd.com/doc/19950923/Busqueda-Heuristica
[7] Algoritmo A*
http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqued
a_A*
[8] A* search algorithm
http://en.wikipedia.org/wiki/A*_search_algorithm
[9] Zorahn. 2010. Applying Search Algorithms to Turn-Based
Games. http://forum.codecall.net/blogs/zoranh/1323-
applying-search-algorithms-turn-based-games.html
[10] Carreteto, M. 2008. Psicología del Pensamiento: Teoría y
prácticas. Madrid: Alianza
[11] Carretero, M. 2009. Constructivismo y educación. Buenos
Aires: Paidós.
[12] Haines, D. E. 2003. Principios de Neurociencia. Madrid:
Elsevier.
[13] Hergenhahn, B. R. 2001. Introducción a la Historia de la
Psicología. Madrid Paraninfo.
[14] Alan Turing
http://es.wikipedia.org/wiki/Alan_Turing
[15] Weiten, W. 2004. Themes and Variations. Thomson-
Wadsworth
- 69 -
Desarrollo de un agente autónomo jugador de Super Mario Adrián Amor Martín
100072611 Ingeniería de Telecomunicación Universidad Carlos III de Madrid
Cristina García Muñoz 100072663
Ingeniería de Telecomunicación Universidad Carlos III de Madrid
RESUMEN En este documento se va a detallar cómo realizar un agente,
basado en árboles de decisión, que sea capaz de jugar de forma
autónoma al juego Super Mario en el marco del concurso Mario
AI 2011.
Descripción de categorías y temas. [Agente]: Un agente es un sistema informático que demuestra
que percibe su entorno a través de sensores y es capaz de actuar
sobre dicho entorno mediante efectores.
[Super Mario]: Videojuego de plataformas muy popular desde la
década de los 80, diseñado por Shigeru Miyamoto.
Palabras clave. Agente, árboles de decisión, inteligencia artificial, Super Mario.
1. INTRODUCCIÓN. Una de las principales inquietudes del ser humano es conseguir
hacer entes que se muevan “artificialmente”, es decir, que simulen
(e incluso mejoren) el comportamiento humano. Así, a lo largo de
la Edad Media se desarrollaron autómatas como el hombre de
palo de Juanelo Turriano, en Toledo, y artificios como El Turco,
que era capaz de jugar al ajedrez de manera autónoma (aunque se
descubriera poco después que era un engaño). Con el auge de la
computación se empieza a tener una capacidad de procesamiento
similar a la del ser humano, de manera que se desarrollan
programas que intentan simular un jugador automático. La línea
de investigación que más se desarrolló en el siglo XX fue la de
desarrollar un autómata capaz de vencer a un ser humano al
ajedrez, de manera que se empiezan a diseñar estrategias en la
década de los 50 por, entre otros, Shannon y Turing, y el
refinamiento de estas estrategias consiguen que, en 1998, se
produzca la derrota del campeón mundial del momento, Gary
Kasparov, a manos de una
máquina llamada Deep
Blue.
Debemos destacar también
el auge de la industria del
videojuego que, si bien
nace con la creación del
Pong (juego muy simple
entre dos personas),
experimenta un gran
incremento desde la década
de los 80. Una de las
razones de este
espectacular crecimiento es la capacidad de generar jugadores
automáticos mejores que el propio humano, de manera que el
jugador se debe esforzar en superar a la máquina. Esto se
convierte en un fenómeno social (se habla incluso de la llamada
generación gamer) y provoca también un incremento en la
investigación en inteligencia artificial, ya que muchos juegos
compiten en demostrar que su jugador no humano es mejor que
cualquier otro (como puede observarse con la guerra anual entre
juegos de fútbol). De esta manera, se producen cada vez jugadores
más inteligentes, llegando a imponer niveles de dificultad que
sólo son resolubles después de mucha experiencia en el juego.
De esta manera, se vio de manera casi inmediata que la fuerza
bruta para implementar un jugador automático (es decir, explorar
todas las posibilidades hasta el final para ver si con cierto
movimiento podemos llegar a la derrota o a la solución) es,
además de poco eficiente, irrealizable en la práctica debido a la
limitación de los sistemas de computación del momento. Se
impone así investigar sobre técnicas de búsqueda que permitan
resolver problemas, ya sean relacionados con derrotar a un
jugador humano o llegar a la solución de, por ejemplo, las torres
de Hanoi.
Todas estas técnicas para llegar a una solución deben maximizar
la eficiencia de cálculo, para lo que las opciones que se deben
evaluar deben ser las más inteligentes posibles, e intentar llegar a
la solución óptima. De esta manera, una primera aproximación
son los árboles de decisión en los que se contemplan todas las
posibilidades de actuación y se elige la más ventajosa (ya sea con
una función de evaluación o heurística, es decir, basada en la
práctica); otra aproximación son las redes neuronales, que
construyen asociaciones entre las entradas del problema y las
salidas, de manera que buscan la solución más eficiente; y otra
aproximación son máquinas de estados, que es otra manera de
hacer jugadores razonablemente inteligentes. Se evalúan todas las
entradas en cada máquina y se llega a un estado de actuación; el
objetivo es llegar al estado final que es la solución. A estos
efectos se implementan los llamados autómatas de Moore y de
Mealy, que no contemplaremos en este trabajo por considerar que
un agente no puede ser perfectamente definido por estas máquinas
de estados.
Una vez que situados en el contexto histórico actual, y haber
planteado las opciones que tenemos a la hora de hacer un jugador
automático, uno de los entretenimientos que sirve para ahondar en
el concepto de inteligencia artificial es generar un agente, que sea
capaz de hacer cosas que un ser humano, si no es experto,
normalmente no consigue. En esta línea surge el concurso Mario
AI Championship, o Mario AI Competition, consistente en
proporcionar una interfaz “fácil de usar” para el usuario de
manera que éste se encargue, únicamente, de generar un agente
Figura 1. Pong original.
- 70 -
que se pase todas las pantallas posibles. Posteriormente
ahondaremos en las posibilidades que se nos dan a la hora de
elegir el nivel que queremos que juegue nuestro agente, pero la
libertad es casi infinita.
Así, se convoca un concurso intentando escoger al agente que
demuestre un mejor comportamiento en la interfaz que se
proporciona al usuario. En este documento detallaremos cómo es
la interfaz y qué podemos utilizar para que nuestro jugador juegue
de manera autónoma de manera similar a como lo haría un
humano; las estrategias que podemos seguir a la hora de conseguir
el objetivo (que es que se pase la pantalla con la mayor
puntuación posible), evaluando su dificultad y la estrategia que
seguiremos finalmente; y las reglas que hemos usado, finalmente,
para conseguir un agente lo más complejo posible.
2. INTERFAZ CON EL ENTORNO. Antes de nada, lo que tenemos que analizar es qué necesitamos
del escenario para que nuestro agente sobreviva. Así, a primera
vista necesitamos:
Conocer cómo es el escenario, dónde están las caídas
(que en el código se llamarán gaps), dónde podemos
saltar, romper ladrillos, conseguir monedas, bonus…
Todo esto se nos da en la matriz levelScene; es una
matriz de tipo byte que incluye todos los elementos
relativos al escenario, es decir, dónde está el suelo, los
ladrillos… y que tiene como dimensiones [19x19], de
manera que Mario sólo es capaz de ver 10 posiciones
delante suya (ya que Mario está en el centro de esta
matriz). Los valores relevantes que debemos tener en
cuenta en una primera aproximación son:
o 0 si no hay nada.
o -60 para el suelo. Debemos destacar que este
valor no es constante desde que empieza el
suelo hasta el final, sino que tenemos un -60
en la primera línea de suelo y más hacia abajo,
0. Esto es importante a la hora de detectar
gaps para nuestro código.
o -62 para suelo que se puede acceder saltando
desde abajo (es decir, el agente no se cae si
está encima pero puede sobrepasarlo
saltando).
o -20 para ladrillos que se pueden romper.
o -22 para ladrillos que no se pueden romper
(cuadrados con interrogación en los que se
consigue un bonus).
o -90 para tuberías.
Es importante saber que la interfaz nos da varias
posibilidades de zoom, es decir, que podemos
especificar si queremos, por ejemplo, que se nos
informe de qué tipo de ladrillos tenemos, o simplemente
se nos diga que hay un ladrillo, o un obstáculo. Esto es
útil cuando se empieza a codificar un agente, pero si se
quiere añadir un poco de complejidad es necesario usar
el zoom más detallado que hay. Podemos ver un
esquema del comportamiento de la matriz en la figura 2.
Conocer dónde están los enemigos, y qué tipo de
enemigos podemos tener, es decir, si podemos
eliminarlos saltando sobre ellos o disparándoles, o no
les podemos eliminar. Esto se da mediante la matriz de
byte enemies, que tiene la misma dimensión que
levelScene, es decir, [19x19]. Así, los valores más
relevantes que tenemos son:
o 80 para un goomba. Se puede eliminar
saltando o disparando sobre él.
o 84 para una bala, que solo sale si tenemos los
cañones activados. Se puede eliminar de la
misma manera que el goomba, saltando sobre
él o disparando.
Figura 8. Bala.
Figura 7. Goomba.
Figura 6. Matriz de observaciones (levelScene).
Figura 2. Casilla con suelo.
Figura 3. Ladrillo rompible.
Figura 4. Ladrillo irrompible.
Figura 5. Tubería.
- 71 -
o 81 y 82 para un koopa. Un koopa se puede
eliminar disparándole, y si se salta sobre él
dejará un caparazón sobre el que, si salta, se
desplazará a lo largo de la pantalla
destruyendo todo lo que encuentre en su
camino.
o 91 para las flores que saltan de las tuberías. Se
puede eliminar saltando por debajo de ellas o
disparando.
De nuevo se puede hacer una distinción entre el zoom
que queremos, de manera que se distingue entre
enemigos que son destructibles saltando sobre ellos, o
aquellos que no se pueden destruir, como Spiky:
Debemos destacar, también, que la matriz enemies y
levelScene se pueden usar en la misma matriz, llamada
mergedObservation, que contiene los mismos valores
pero concatenando ambas matrices.
Posición en la que se encuentra Mario. Sus coordenadas
dentro de la matriz levelScene y enemies se nos da con
marioCenter, array de dos posiciones en la que la
primera posición corresponde a la coordenada Y de
Mario, y la segunda, a la coordenada X.
Posición absoluta sobre el escenario total en la que se
encuentra Mario. Esto se da con marioFloatPos, array
de dos posiciones en la que, en una posición se nos da
la coordenada X absoluta de Mario sobre el escenario
completo, y en la coordenada Y, la altura de Mario
sobre el fondo de la pantalla.
Posición absoluta sobre el escenario en la que se
encuentran los enemigos. Esto se da con
enemiesFloatPos, que es un array en el que se da el
identificador del enemigo y su posición según las
características que hemos descrito anteriormente.
Una vez que conocemos todas las variables que podemos
usar para determinar el comportamiento de nuestro agente, lo
que debemos evaluar es qué debemos cambiar en el código
para que haga lo que nosotros queremos. De esta manera, se
nos dan unos agentes ya hechos (pero casi sin inteligencia
asociada) y podemos observar que lo que debemos modificar
es el método getAction(), que devuelve un array de boolean
cuyo significado es el comportamiento que va a hacer Mario
en cada momento, es decir, si va a ir a la izquierda, derecha,
correr y disparar (es la misma tecla), agacharse y saltar. Para
definir eso habrá que poner a true las acciones que queremos
que haga en las posiciones correspondientes del array, y a
false las acciones que queremos que no haga. Con esto
podemos controlar el comportamiento de nuestro agente cada
vez que se llama a getAction(), que es en un intervalo de
tiempo lo suficientemente pequeño para ser capaz de pasarse
la pantalla.
Así, una vez familiarizados con el entorno de trabajo, ya
conocemos todo lo que podemos usar para crear nuestro
agente, es decir, toda la información relevante que influirá en
su comportamiento con el escenario y con los enemigos. A
continuación, debemos determinar cuál será nuestra
estrategia de comportamiento para nuestro agente.
3. POSIBLES ESTRATEGIAS DE
COMPORTAMIENTO. A continuación vamos a detallar posibles estrategias de
comportamiento que fueron evaluadas para hacer nuestro agente,
y justificaremos, finalmente, la estrategia elegida.
3.1 Redes neuronales. Una red neuronal es capaz de modelar la relación existente entre
las entradas a la red y sus salidas. De esta manera, lo que tenemos
que escoger es qué queremos como entrada, y qué queremos como
salida, ya que la relación entre ellos se encargará de definirlo el
modelo de red neuronal que utilicemos, como, por ejemplo, el
perceptrón. Un modelo general de red neuronal es el que se ve
aquí:
Figura 10. Flor.
Figura 11. Spiky.
Figura 12. Modelo general de red neuronal.
Figura 9. Koopa.
- 72 -
Como entrada querríamos saber, por ejemplo, si Mario puede
saltar, si Mario puede disparar, si Mario está en peligro de caer, o
si tiene un gap cercano, si Mario ve enemigos… en fin, las
entradas deberíamos definirlas con cuidado, mientras que las
salidas están claras: serán las acciones que debe tomar Mario, es
decir, si salta, si se mueve a la izquierda, si se agacha, si se para…
básicamente, definir el array action que debemos devolver en el
método getAction().
Este modelo no fue el que utilizamos porque lo vimos complejo
(debemos programar dos fases, la de entrenamiento para generar
el modelo, y la de juego en sí, aunque aprendería con el tiempo) y
computacionalmente costoso al tratarse de una red neuronal. Por
ello, esta estrategia fue descartada.
3.2 Búsqueda A* La siguiente solución que nos planteamos seriamente fue hacer
una búsqueda heurística, pues está claro que en nuestro problema,
que no es un problema cerrado, debemos tener en cuenta el factor
heurístico. Así, podemos usar una función de evaluación best-first
como la búsqueda A*. La búsqueda avariciosa (greedy search) la
descartamos por poder atascarse en bucles infinitos si las
estimaciones no son del todo correctas, así que nos decantamos
por la investigación sobre A*.
Como ya hemos dicho, A* hace una búsqueda best-first que evita
expandir caminos que ya son muy costosos de por sí, para no
desperdiciar recursos de computación. En cada nodo tiene que
evaluar una cierta función f(n) que es:
f(n) = g(n) + h(n)
donde f(n) es el coste estimado total hasta la meta pasando por el
nodo n (que es el que estamos evaluando), g(n) el coste sufrido
hasta alcanzar el nodo n, y h(n) el coste estimado total hasta la
meta pasando por n.
A* es capaz de alcanzar la solución óptima (el camino más corto
hacia la meta) si conseguimos que la función heurística no
sobreestime el coste real.
Una vez planteado el modelo que se debería usar, debemos
plantearnos las siguientes dudas:
¿Cuál es la meta? Obviamente, no es la meta final, ya
que Mario no es capaz de acceder a ella desde el
principio, por lo que lo más razonable es escoger el
punto de suelo que se encuentre más a la derecha de
nuestra matriz levelScene, y evaluar el camino hacia allí
tomando el camino más corto posible.
¿Qué función heurística debemos emplear? Aquí es
donde está la calidad del algoritmo A*; en realidad,
deberíamos evaluar si hay un enemigo, si hay un gap…
poniendo por delante de todo la supervivencia.
Pongamos un ejemplo: está claro que si avanzamos
hacia la derecha y hay un enemigo, no deberíamos
avanzar y, en vez de eso, deberíamos quedarnos parados
o saltar. De esta manera, al camino que sea “avanzar” le
ponemos un coste sensiblemente superior al de saltar o
quedarnos parados, descartando esa opción, y
posteriormente decidiremos en qué dirección debemos
ir.
Ése es un simple ejemplo de función heurística, sin
embargo, si lo pensamos un poco, la complejidad no
hace más que incrementarse, ya que debemos tener en
cuenta el enemigo que tenemos delante: si salta, lo más
conveniente es quedarse parado, o retroceder un poco y
saltar sobre él; si no salta, lo más inteligente es saltar
para intentar eliminarlo; si somos capaces de disparar,
deberíamos dispararle para destruirlo… y además de
todas las reglas que en una primera exploración se nos
ocurren, debemos tener en cuenta el movimiento que
van a seguir nuestros enemigos, es decir, si van a saltar,
si van a moverse hacia nosotros, o hacia el otro lado, si
son más rápidos o más lentos; es decir, debemos
conocer el sentido de su marcha pues es inútil saltar
sobre un goomba que no viene hacia nosotros, por
ejemplo. Así, deberíamos hacer un seguimiento de cada
enemigo para tener una función heurística buena.
El algoritmo, por tanto, debería calcular el camino menos costoso,
para lo que cada casilla de la matriz mergedObservation (si
consideramos escenario y enemigos a la vez) es un nodo,
evaluando la función para cada casilla y considerando cuál es el
camino que nos puede llevar hacia la meta. Para ello, necesitamos
una estimación futura de lo que va a pasar hasta que lleguemos
hacia la meta para que la función heurística esté bien definida.
No vamos a hablar sobre temas de implementación porque ésta no
fue la solución que escogimos, aunque fue la solución ganadora
en el concurso de 2009. No fue escogida porque para que
funcionara adecuadamente debíamos implementar un simulador
de cada elemento en pantalla, es decir, todos los enemigos, las
bolas de fuego que lanzamos para ser precisos… y eso es algo
cuya complejidad excede el espíritu de este trabajo; además, la
implementación de un algoritmo A* tampoco es trivial (debemos
evaluar la función en cada nodo) ni algorítmica ni
computacionalmente. Por ello, la solución que escogemos,
finalmente, es la de los árboles de decisión.
3.3 Árboles de decisión. En primer lugar, debemos referirnos a esta estrategia como un
punto medio entre hacer un algoritmo muy elaborado, como el
algoritmo A*, y hacer una estrategia completamente heurística, es
decir, ir “parcheando” el agente para que se pase una sola
pantalla.
Un árbol de decisión constituye un mecanismo de aprendizaje
mediante inducción supervisada, como las redes neuronales
(aunque con menos complejidad a priori).
Figura 13. Modelo general de árbol de decisión.
- 73 -
De esta manera, buscamos encontrar las reglas que mejor modelan
la relación entre las entradas, que en nuestro caso es el entorno
(tanto escenario como enemigos) y las salidas, que es el
comportamiento de Mario, es decir, si decidimos que salte, que
vaya a la izquierda, a la derecha...
Así, la manera de trabajar será ir aumentando la inteligencia del
agente en función de la dificultad de la pantalla, introduciendo
reglas y, por tanto, expandiendo el árbol que debemos evaluar.
Otra ventaja con la que contamos es que la implementación no es
muy costosa computacionalmente, ya que básicamente se trata de
evaluación de condiciones if-else; además, su implementación es
sencilla algorítmicamente, ya que al tratarse de este tipo de
condiciones, es fácilmente entendible.
El gran problema de usar estos tipos de algoritmos es que no son
tan generales como pueda ser el algoritmo A*, ya que se
programan en base a pantallas, es decir, de forma heurística. De
esta manera, puede llegar a ocurrir que sea óptimo para una
pantalla pero que sea incapaz de pasarse otra pantalla
completamente distinta; por ello, nuestro objetivo a la hora de
implementar este árbol es la generalización, es decir, que no haya
sobreentrenamiento en nuestro modelo de aprendizaje. Esto lo
mostraremos con varias pantallas con escenarios muy diversos.
Una vez que hemos decidido usar esta estructura por su sencillez
y los resultados aceptables que se obtienen, debemos pensar en
ciertos aspectos:
Prioridades, es decir, qué entrada es más importante
para garantizar la supervivencia del agente. Esto,
traducido a árboles de decisión, es qué condición vamos
a evaluar primero, si la condición de que haya un
enemigo delante o la condición de que haya un gap por
el que nos podamos caer.
Acciones a tomar, esto es, que si vemos, por ejemplo,
un enemigo que no salte, nuestra decisión sea saltar
sobre él o esquivarlo. Para ello deberíamos prever el
movimiento del enemigo, como ya discutimos en la
sección 3.2; el problema es que este simulador físico no
es fácil (se requieren muchas horas para calibrarlo) así
que estas reglas se determinarán de forma heurística
para el caso en el que haya enemigos.
Objetivos, es decir, si preferimos, por ejemplo, caminar
por encima de una fila de ladrillos porque haya una fila
de monedas o por el suelo porque haya más enemigos a
los que podemos matar, o simplemente garantizar
nuestra supervivencia que es a lo que este concurso se
limita.
Con todo esto en nuestra cabeza, pasamos sin más dilación a la
explicación del código realizado.
4. REGLAS DEL ÁRBOL DE
DECISIÓN. El código desarrollado dota al agente de una serie de habilidades
para superar los obstáculos que pueda encontrarse a lo largo de
distintas pantallas de nivel medio-alto. En este apartado
analizaremos en orden creciente de prioridad las herramientas con
las que cuenta Mario para salir airoso de las trampas que aparecen
en su camino.
La base de la que partimos permite al agente correr mientras
dispara bolas de fuego de manera intermitente. Los métodos a
continuación descritos modifican los valores base de manera
apropiada para hacer que el agente se adapte a las situaciones
detectadas.
Para obtener el máximo rendimiento de este planteamiento se
hace necesario un estudio previo de los peligros que van a acechar
al jugador automático a lo largo de los recorridos que atraviesa.
Una vez estudiados se puede establecer un orden de actuación
para dar más prioridad a la resolución de los problemas más
graves. La mejor manera de identificar de forma real el mayor
número de situaciones posibles es jugar manualmente
experimentando los problemas y viendo cómo pueden solventarse.
Fruto de este estudio previo del entorno pudimos descubrir que
las fuentes de fallo más habituales sin tener en cuenta las criaturas
que puedan aparecer son:
Hoyos: en principio bastaría con saltar al detectar una
aproximación a uno de ellos, sin embargo pudimos
comprobar que en ocasiones es necesario ajustar el
impulso ya que la superficie disponible para aterrizar el
salto no es infinita.
Combinaciones de obstáculos y escalones con hoyos:
los hoyos presentan una dificultad mayor si van detrás
de un escalón de bajada, ya que por el impulso de
avanzar ya caes al vacío. Además si el hoyo está detrás
de un obstáculo corremos el peligro de saltar más de la
cuenta y precipitarnos por el gap.
Bloqueo entre ladrillos: cuando hay ladrillos en
ocasiones el espacio que hay entre ellos y el suelo no
permite avanzar por lo que el agente se queda atascado
como si se tratase de un callejón. En particular ocurre
cuando los ladrillos no pueden romperse. En la figura
vemos que el hueco que queda es de una unidad y al ser
el agente grande no entra, por lo que tiene que dar la
vuelta y saltar por encima.
Bloqueo con cañones: la situación de los cañones
cuando también hay ladrillos impide el paso y el salto
del agente de la misma manera.
Obstáculo final demasiado alto: el final del escenario
por defecto presenta una colina alta que obliga al agente
a subir ayudándose de otras colinas intermedias.
Escaleras: las escaleras presentan un problema ya que
suelen tener un hoyo detrás y deben estar muy ajustadas
Figura 14. Bloqueo.
- 74 -
para no sobrepasarlas como también apuntábamos con
los obstáculos anteriormente.
Considerando todos estos retos sumados a la posibilidad de
aparición de criaturas y balas, se establece un método por
solución requerida.
Las reglas que se encuentran implementas en nuestro agente son,
por prioridad:
Evitar flor de las tuberías: esta amenaza se resuelve de
forma pasiva, parándose hasta que la planta está
escondida. En este caso detecto las flores con una
antelación de tres cuadros para tener un margen de
frenada ya que no es posible pararse en seco.
Evitar enemigo saltando
Bloqueo: como respuesta al peligro de quedar atascado
manifestado anteriormente, ya sea por la existencia de
ladrillos o por la colocación de un cañón, se implementa
este método. En cada consulta del método getAction()
se intenta detectar si nos encontramos en situación de
bloqueo. Detectamos bloqueo cuando tenemos un
objeto sobre nosotros que nos impide saltar y además el
hueco que hay por delante es nulo o insuficiente. Si
descubrimos que estamos en ese punto nos servimos de
unos contadores para dar varios pasos en sentido
contrario, volver a girar y saltar sobre el objeto que nos
impedía el salto.
Enemigo no saltarín, destructible saltando sobre él: si el
enemigo no salta, y lo detectamos justo delante (o una
casilla más adelante) de Mario, saltamos para intentar
eliminarlo.
Parar salto: es un método crucial ya que nos permite
hacer un ajuste menos fino de la potencia de los saltos.
Cuando el agente está en pleno salto se hace un barrido
por el suelo y si se detecta que el hueco se termina en
los dos próximos cuadros, el salto se frena y con la
inercia que lleva es suficiente para caer sobre la
superficie detectada. Esto soluciona los problemas que
aparecían cuando había que aterrizar sobre una
superficie pequeña.
Frenar: este es otro de los métodos que más a menudo
salvan a nuestro agente. Cuando tenemos un escalón de
bajada seguido de un hoyo no basta con pararse ya que
como no se consigue frenar en seco la inercia que llevas
sólo de avanzar hace que te precipites. Cuando se juega
manualmente este problema se resuelve anticipándose a
la situación lo que nos da tiempo para conseguir frenar
y caer de manera casi vertical. Sin embargo para el
jugador automático decidimos detectar la situación con
un par de casillas de antelación y ajustar la cantidad de
frenada en función de la altura que tenga el escalón. De
esta forma cambiamos de dirección durante un número
de intervalos proporcional a la cantidad de frenada
calculada y con ello conseguimos que caiga en tierra
firme.
Gap: el método que detecta los hoyos y asigna una
intensidad de salto que es por defecto la máxima ya que
contamos con el método de parar salto para ajustar
mejor la potencia del salto.
Obstáculo delante: contamos con dos métodos que
detectan que hay obstáculos delante y uno adicional que
identifica el tipo de obstáculo de manera que si es uno
con un hoyo detrás, la intensidad que se le pone al salto
es la mínima para que lo supere sin pasarse.
Gap salvable: para que el agente recorriese las pantallas
de forma más fluida introdujimos este método que
detecta cuando podemos saltar para acortar el camino
aunque no haya un hoyo entre medias del origen y el
destino del salto. De forma empírica establecimos unos
límites de lo que Mario es capaz de saltar y con ello
cada vez que detecta que saltando puede llegar
acortando el recorrido. Viene bien cuando hay tuberías
ya que en muchas ocasiones están emparejadas y acorta
bastante.
Subir ladrillo: este método detecta cuando hay ladrillos
por delante a una altura a la que pueda llegar con un
salto el agente de forma que éste se mueva por las zonas
más altas para coger monedas, evitar criaturas y posibles
bloqueos por debajo de las filas de ladrillos.
Bala: si detectamos una bala encima de Mario, o encima
y a la derecha de Mario, esperamos a que pase antes de
proseguir nuestro camino.
Colina alta final: en esta competición de Mario se ha
habilitado la opción de que el final sea en alto, es decir,
sobre una colina muy alta que no es alcanzable saltando
con Mario, sino que tiene que volver atrás y saltar desde
más arriba. Estamos hablando, por ejemplo, de esta
situación:
Figura 15. Escaleras con gap.
Figura 16. Escalón con gap.
- 75 -
En ese caso lo que hacemos es volver atrás hasta que
encontramos una estructura de ese tipo y llegamos a una
altura suficiente desde la que podamos saltar y alcanzar
la meta.
5. RESULTADOS OBTENIDOS. Como ya explicamos en la introducción, la posibilidad de
personalización del nivel al que juega Mario es muy grande.
Listaremos aquí algunas de las que hemos usado para mostrar el
comportamiento de nuestro agente:
-le: define los enemigos que queremos que aparezcan en
la pantalla. Al contrario de lo que pone en la página
oficial, [1], ya no se hace una máscara a nivel de bit
sino que requiere un String. De esta manera, si ponemos
–le g, los únicos enemigos que aparecerán serán
goombas. Debemos destacar que esta opción está
definida de forma distina a la que viene en la página
oficial del campeonato, que propone hacer máscaras de
bits cuando aquí funcionan Strings concatenados. De
esta manera las opciones que tenemos aquí (y son
importantes a la hora de caracterizar si Mario reconoce
bien a cada enemigo) son:
g: para los goombas.
gw: para los goombas voladores.
rk: para los koopa rojos.
gk: para los koopa verdes.
s: para spiky.
De igual manera que se hace para los goombas, si se le
añade una w al final de cada cadena, se convierten en
voladores.
De esta manera, si tenemos por ejemplo grkwgk en la
pantalla lo que tendremos es enemigos que son,
únicamente, goombas, koopas rojos voladores y
koopas voladores. Parece trivial insistir en esto, pero
no está bien documentado (hay que mirar el código
que da la competición) y puede ahorrar más de un
quebradero de cabeza.
-lg [on/off]: define si se quiere que haya gaps en
nuestro nivel o no, es decir, si Mario puede morir por
caer en un hoyo que no haya contemplado.
-ltb [on/off]: define si queremos que haya tuberías en
nuestro nivel (tuberías en las que pueden salir flores
como las que se detallaron en el apartado 2).
-lc [on/off]: con esto podemos hacer que en la pantalla
haya cañones (de los que salen balas) o no.
-ld <número>: define la dificultad del nivel.
-lt <número>: define el tipo de escenario en el que
queremos jugar: si es el estándar, en el castillo… no
tiene mucha más repercusión en el nivel salvo el fondo
de escenario.
-ll <longitud>: con esto puedes especificar la longitud
deseada del nivel.
-ls <valor>: define la “semilla” del nivel. El nivel se
genera aleatoriamente, pero los números aleatorios
dependen de una semilla; pues bien, con esto podemos
cambiar la semilla generando tantos niveles distintos
(con dificultad similar) como queramos.
Con la adecuada manipulación de esas opciones, observamos que
nuestro agente es lo suficientemente inteligente para superar:
El escenario por defecto.
El escenario por defecto, con nivel de dificultad 2, sólo
goombas, con una semilla de 256 y una longitud de 200.
El escenario por defecto, con nivel de dificultad 3, sólo
goombas, con una semilla de 985, con cañones y con
una longitud de 150.
El escenario por defecto, sin enemigos salvo flores y
balas, dificultad 4, con cañones y tuberías.
El escenario por defecto, con goombas voladores y no
voladores, semilla de 3 y longitud de escenario de 150.
El escenario por defecto con koopas verdes y rojos,
semilla de 1780, nivel de dificultad de 1 y longitud de
escenario 250.
El escenario por defecto, con koopas verdes y rojos,
semilla de 2, nivel de dificultad 4 y longitud de
escenario de 145.
No hemos probado muchos escenarios más por falta de tiempo,
aunque creemos que con el tiempo invertido los resultados de
nuestro agente son razonablemente buenos y generales, puesto
que sobrevive de manera admirable a ciertas pantallas que un
humano no se pasaría fácilmente, como hemos podido comprobar.
De esta manera, el techo de nuestro agente está en un nivel de
dificultad 4 tanto con enemigos (con koopas, aunque es lo mismo
con goombas y con una combinación de los dos) como sin ellos.
6. REFERENCIAS. [1] Página oficial de Mario AI Championship 2011:
http://www.marioai.com/.
[2] Historia del Pong: http://es.wikipedia.org/wiki/Pong.
[3] Historia sobre Inteligencia Artificial:
http://es.wikipedia.org/wiki/Inteligencia_artificial.
[4] Historia sobre jugadores automáticos de ajedrez:
http://es.wikipedia.org/wiki/Ajedrez_por_computadora.
[5] Reflexiones sobre la generación gamer:
http://www.cookingideas.es/como-motivar-a-la-generacion-
Figura 17. Colina alta final.
- 76 -
gamer-cambiando-las-notas-de-clase-por-puntos-de-
experiencia-20110111.html
[6] Apuntes de la asignatura Inteligencia en Redes de
Comunicaciones, 5º IT.
[7] Información sobre el algoritmo A*:
http://en.wikipedia.org/wiki/A*_search_algorithm.
[8] Resumen de la primera competición de Mario AI:
http://en.wikipedia.org/wiki/A*_search_algorithm.
[9] Agente basado en algoritmo A* (ganador de Mario AI 2009):
http://www.youtube.com/watch?v=DlkMs4ZHHr8.
- 77 -
IMPLEMENTACIÓN DE UN AGENTE PARA UN JUGADOR DE MARIO A.I.
Alejandro Pérez Cruz Ingeniería de Telecomunicación Universidad Carlos III de Madrid
NIA: 100072647 [email protected]
David de la Horra Iglesias Ingeniería de Telecomunicación Universidad Carlos III de Madrid
NIA: 100066695 [email protected]
RESUMEN En este documento presentamos una posible implementación de un agente que pueda jugar al juego SuperMario Bross. con una cierta inteligencia autónoma.
Categorías y descriptores de temas. [Inteligencia Artificial]: Agente reactivo que permite interactuar con el medio y realizar acciones para superar los distintos niveles del juego SuperMario Bros.
Términos generales Algoritmos de búsqueda, lenguaje de programación Java, diseño e implementación de un agente.
Palabras Clave Búsqueda, inteligencia artificial, agentes.
1. INTRODUCCIÓN A lo largo del siguiente documento expondremos las diferentes estrategias de búsqueda existentes y las posibles implementaciones que se deben tener en cuenta para desarrollar un agente que permita jugar de manera autónoma y con cierta inteligencia al SuperMario, consiguiendo superar el mayor número de niveles posibles y con la mayor puntuación posible.
Además se explicará la solución llevada a cabo y nuestra implementación del agente en Java para lograr un resultado satisfactorio en la competición para nuestro jugador. Se presentará pues el algoritmo utilizado (árboles de decisión) y el entorno en el que se desarrolla nuestra aplicación.
2. ESTRATEGIAS DE BÚSQUEDA Los algoritmos de búsqueda tratan de encontrar, en general, la solución más apropiada al problema en cuestión. Para ello se parte de un estado inicial y se trata de alcanzar un estado final deseado (meta, objetivo) por medio del uso de árboles de decisión en los cuales se van expandiendo nodos y desechando caminos de búsqueda según se avanza en el árbol.
Para ello existen diferentes estrategias de búsqueda que definen el orden para la expansión de nodos y que deben ser evaluadas según:
Completitud de la solución: hay que evaluar si la solución se encuentra siempre que esta exista.
Complejidad temporal: en este caso, lo que se debe evaluar es el número de nodos que han sido generados.
Complejidad espacial: hay que evaluar además el número de nodos que como máximo se han guardado en memoria.
Optimalidad de la solución: hay que evaluar si se encuentra la solución con menor coste.
Para evaluar cada estrategia se utilizan unos parámetros, que son:
1) Factor de ramificación (b).
2) Profundidad de la solución (d).
3) Máxima profundidad (m).
Una vez tenemos toda la información necesaria para evaluar nuestra solución, trataremos de implementar aquella estrategia que se adecúe más al fin que persigamos y que sea posible con los recursos de tiempo y memoria de los que se dispone.
En nuestro caso se dispone de información del dominio por medio de una matriz de 19x19 que nos proporciona información de la escena en la que se encuentra nuestro Mario y en la que dicho Mario se encuentra centrado en la posición (9,9) en todo momento.
Así pues, debido a que tenemos información del dominio puede ser lógico utilizar algún tipo de estrategia heurística que ayude a encontrar la solución a nuestro problema, es decir, en nuestro caso a permitir avanzar a nuestro jugador a lo largo de un nivel sin que sufra daño alguno.
- 78 -
3. ALGORITMOS
3.1 Árboles de decisión Es la estrategia que hemos seguido para desarrollar nuestro agente. Consiste en un modelo de predicción usado en el ámbito de la inteligencia artificial. Permiten construir un diagrama de decisiones y/o de predicción basados en reglas que sirven para representar una serie de condiciones que ocurren de forma sucesiva.
Un árbol tiene una serie de entradas, las cuales pueden ser un objeto o una situación descrita a partir de un conjunto de atributos. Como resultado del procesamiento de las entradas y a través de la estructura del árbol, basada en ciertas reglas, se consigue alcanzar las hojas del árbol en el que se encuentran las decisiones a tomar en función de las entradas que se tenían.
Así pues, lo importante en este tipo de algoritmos es definir bien las reglas de modo que se adapten correctamente a la situación que se plantea para que la solución que se alcanza sea la más apropiada dada la situación y el conocimiento del entorno que se tiene.
3.2 Algoritmos genéticos Este tipo de algoritmos se desarrolla en múltiples ámbitos de la inteligencia artificial y era uno de los que se nos proponía desarrollar desde la página web de la competición de Mario AI y por eso aparece en esta memoria.
Un algoritmo genético es una técnica de búsqueda basada en la teoría de la evolución de Darwin, que ha cobrado tremenda popularidad en los últimos años.
Esta técnica se basa en los mecanismo de selección que utiliza la naturaleza, de acuerdo a los cuales, los individuos más aptos de una población son los que sobreviven al adaptarse más fácilmente a los cambios que se producen en su entorno.
Así pues, los algoritmos genéticos son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización y que están basados en el proceso genético de los organismos vivos.
Durante la fase reproductiva se seleccionan los individuos de la población para cruzarse y producir descendientes que constituirán, una vez mutados, la siguiente generación de individuos. La selección de padres se efectúa al azar usando un procedimiento que favorezca a los individuos mejor adaptados, ya que a cada individuo se le asigna una probabilidad de ser seleccionado que es proporcional a su función de adaptación. De este modo, los individuos bien adaptados se escogerán probablemente varias veces por generación, mientras que los pobremente adaptados no se escogerán más que de vez en cuando.
Por lo tanto, un algoritmo genético es un método de búsqueda dirigida basada en probabilidad. Bajo una condición muy débil (que el algoritmo guarde siempre al mejor elemento de la población sin hacerle ningún cambio) se puede demostrar que el algoritmo converge en probabilidad al óptimo. Es decir, al aumentar el número de iteraciones, la probabilidad de tener el óptimo en la población tiende a uno.
3.3 Algoritmo de pathfinding A*
Presentamos este algoritmo porque también se recomienda desde la competición de MarioAI ya que ha dado buenos frutos a anteriores participantes que lo desarrollaron.
Este algoritmo se clasifica dentro de los algoritmos de búsqueda en grafos. Además, se demuestra que la búsqueda realizada por medio de este algoritmo alcanza la solución óptima (el camino de menor coste entre un nodo origen y uno objetivo) siempre que se utilice un heurístico admisible, es decir, que no sobreestime el coste real.
Este algoritmo utiliza una función de evaluación que tiene en cuenta tanto el coste real del recorrido como el valor heurístico de los nodos. La función es la siguiente:
푓(푛) = 푔(푛) + ℎ(푛)
Donde:
g(n): coste sufrido hasta alcanzar n (nodo actual).
h(n): coste estimado desde n hasta la meta.
f(n): coste estimado total hasta la meta pasando por n.
Dicho algoritmo mantiene dos estructuras de datos auxiliares: nodos abiertos (implementados como una cola con prioridad ordenada por el valor f(n) de cada nodo) y los nodos cerrados donde se guarda la información de los nodos que ya han sido visitados.
En cada paso, se expande el nodo que esté primero en abiertos, y en caso de que no sea un nodo objetivo, calcula el f(n) de todos sus hijos, los inserta en abiertos, y pasa el nodo evaluado a cerrados.
Así pues, este algoritmo es una combinación entre búsquedas de tipo en anchura con búsquedas en profundidad.
- 79 -
4. AGENTES Una vez hemos comentado un poco las diferentes estrategias de búsqueda para ayudarnos a solucionar nuestro problema, vamos a comentar un poco la teoría que hay por debajo del agente que debemos desarrollar.
4.1 Definición y principios básicos Un agente es una entidad capaz de percibir su entorno, procesar tales percepciones y responder o actuar en su entorno de manera racional, es decir, de manera correcta y tendiendo a maximizar un resultado esperado basándose en la evidencia proporcionada por sus sensores y en el conocimiento del que disponga. Así pues, un agente es autónomo en tanto en cuanto sus acciones y elecciones dependen más de su propia experiencia que del conocimiento introducido sobre el entorno por el programador. Según Michael Wooldridge un agente inteligente es el que es capaz de actuar con autonomía de forma flexible, destacando la reactividad, la proactividad y la habilidad social sobre otras propiedades. En general, los agentes poseen las siguientes propiedades:
Autonomía: es la independencia del usuario. El agente debe ser capaz de tomar decisiones por su cuenta.
Reactividad: el agente debe observar e interactuar con el
entorno.
Proactividad: debe haber una intención de cumplir con los objetivos fijados mediante planificación y razonamiento práctico.
Persistencia: es la capacidad para mantener un estado
(estado mental) que no se modifica caprichosamente.
Razonamiento: el agente debe ser capaz de interpretar la información del entorno, realizar inferencias y tomar las decisiones oportunas.
Aprendizaje: es la capacidad para cambiar su
conocimiento a partir de la experiencia.
Planificación: se define como la capacidad de construir planes propios para lograr objetivos a partir de las tareas que se sabe realizar o podemos pedir a otros.
Comunicación: es la capacidad para entenderse con
otros agentes en un lenguaje expresivo con actos comunicativos.
Cooperación: es la capacidad para solicitar o dar
servicios a otros agentes y trabajar en cooperación para conseguir un objetivo común.
Delegación: capacidad para realizar tareas delegadas por el usuario u otros agentes.
Movilidad: capacidad de suspender la ejecución a mitad
de una tarea y reanudarla en otro nodo.
Personalidad: capacidad para tener un estado mental que incluya creencias, deseos, intenciones, motivaciones... que determinen su comportamiento.
Continuidad temporal: se considera un agente como un
proceso sin fin, ejecutándose continuamente y desarrollando su función.
Veracidad: asunción de que un agente no comunica
información falsa a propósito.
Benevolencia: asunción de que un agente está dispuesto a ayudar a otros agentes si esto no entra en conflicto con sus propios objetivos.
Además, presentamos las arquitecturas generales de los agentes:
En nuestro caso, implementamos un agente reactivo debido a su simplicidad básicamente. Además, cabe decir que la conducta de una agente rara vez es la óptima. Esto es debido a que calcular el óptimo de un criterio de un modo suficientemente bueno para ser considerado razonable es muy difícil cuando en el problema planteado concurren múltiples restricciones.
- 80 -
4.2 Familias de agentes Por último, en este apartado más teórico sobre agentes describiremos algunas familias:
Agentes colaborativos: son aquellos que principalmente cooperan con otros agentes.
Agentes personales: actúan par un usuario o un grupo de
usuarios compartiendo tareas, datos, etc.
Agentes de información: investigan y analizan la información en la red y permiten fusionar la información de múltiples fuentes.
Agentes móviles: son aquellos que se desplazan para
ejecutarse. Suelen ser agentes de información.
4.3 Estados de Mario
Aunque en nuestra implementación no tenemos en cuenta el estado en el que se encuentra Mario, consideramos cultura del juego el que el lector sepa los diferentes estados en los que se puede encontrar Mario y las características de las que puede disponer.
Mario Fuego: Este es el mejor estado en el que puede
encontrarse Mario, en el podrá efectuar todos los movimientos posible incluyendo correr y echar fuego. Si Mario es herido por alguna de las criaturas pasará al estado Súper Mario tras parpadear un tiempo en la pantalla. Este es por defecto el estado en el que empieza la partida.
Súper Mario: Mario llega a este estado tras comer una
seta desde Mario o ser herido desde Mario Fuego, podrá realizar todos los movimientos excepto correr y echar fuego.
Mario Pequeño: Este estado es el más pequeño de todos
en tamaño, y esto repercute en que tenga que saltar más que Súper Mario o Mario Fuego para superar el mismo obstáculo, además de no disponer del botón correr y echar fuego.
4.4 Estados de movimientos
Mario podrá estar en diversos estados a lo largo de la partida, estos son vitales para posteriormente poder establecer las reglas de decisión. Estos estados vienen ya codificados en el paquete que nos descargamos de [8] Estos estados son: Andando: Este movimiento se produce cuando se pulsan
cualquiera de las teclas de dirección izquierda (KEY_ LEFT) o derecha (KEY_RIGTH). Esta acción es independiente del estado de Mario y también podemos pasar a cualquier otra acción.
Corriendo: Mario avanza a una velocidad superior a la normal, esto solo se puede conseguir si se encuentra en los estados Mario Fuego o Súper Mario. Para poder llegar a este estado es necesario mantener pulsadas las teclas de dirección ya sea izquierda o derecha y la de correr (KEY_SPEED).
Saltando: Esta acción se puede realizar en cualquier estado de Mario, pero debido al tamaño reducido de Mario pequeño como es obvio necesitara saltar más para poder sobrepasar el mismo obstáculo. Este movimiento contempla desde que presionamos la tecla de salto hasta que llegamos al punto más alto, el nivel del salto depende de cuánto tiempo esté pulsada la tecla de salto (hasta alcanzar un máximo).
- 81 -
Es importante tener en cuenta que para poder iniciar un salto no puede estar pulsada con anterioridad la tecla de salto, en ese caso no saltará.
Cayendo: Después de haber efectuado un salto, la gravedad nos hace caer, en este momento no podremos impulsarnos más e iremos hacia el suelo. Esta acción es independiente del estado en que se encuentre Mario y no requiere pulsar ninguna tecla. Eso si podremos mantener una de las teclas de dirección pulsadas para controlar la caída.
Agachado: Este movimiento hará que Mario reduzca su tamaño lo cual puede ser útil para esquivar una bala por ejemplo. Mario pequeño no se podrá agachar. Para alcanzar este estado se debe pulsar la tecla de dirección que apunta hacia abajo (KEY_DOWN). Cuando nos encontremos en este estado no se podrá saltar.
Disparando: Este movimiento solo se podrá hacer cuando se encuentre en el estado Mario Fuego. Para realizarlo habrá que hacer una pulsación de la tecla de correr (KEY_SPEED).
Herido: Este estado se alcanzará tras colisionar con algún enemigo, acto seguido dispondrá de un tiempo de aproximadamente medio segundo de inmunidad y luego cambiara de estado. Si el estado inicial era Mario Fire pasará a Supe Mario, si por el contrario Mario se encontraba en el estado de Supe Mario iremos a Mario Pequeño y por último si estábamos en Mario Pequeño moriremos y se acabará la partida.
4.5 Movimientos de nuestro agente Nuestro agente como ya mencionamos en el apartado de algoritmos será reactivo y se basara en distintas reglas de más o menos prioridad para decidir qué acción deberá realizar. Para ilustrar gráficamente los movimientos hemos construido un árbol para que se pueda ver el nivel de decisión el primer estado que es Final especial es el estado que tiene más prioridad y el estado Avanzar es el que tiene menos prioridad.
En nuestra implementación distinguimos ente:
Avanzar: Esta acción consiste en correr hacia la derecha, dicha acción tiene una prioridad muy baja, ya que como es lógico será interrumpida cuando encuentre un enemigo o tenga que saltar. Esta es la acción básica de nuestro Agente.
Saltar paredes: Como su propio nombre indica esta acción se aplicara cuando Mario encuentre un obstáculo en su campo de visión. Las reglas que aplicamos para este método son muy amplias debido a que deberá distinguir entre una amplia gama de superficies y también dependiendo de la superficie elegir la mas optima Hemos incorporado un contador de saltos cuyo objetivo es que cuando la tecla salto este mucho tiempo pulsada pero siga teniendo que saltar suelta la tecla (se ponga a KEY_JUMP=false en el código). Esto es muy necesario debido a que Mario no puede saltar si ya esta presionada la tecla de salto y si esto ocurriera antes de que Mario pudiera saltar, si por ejemplo esta en el aire, esto produciría que nuestro agente se quedase bloqueado.
Saltar escaleras: Este movimiento es uno de los más complicados debido a la complejidad que supone saltar de un escalón en un escalón. Primero deberá detectar la escalera, lo cual lo hacemos cuando se la encuentra o cae de un salto en un escalón. A continuación saltará de uno peldaño si ese es el último escalón, es decir, si después ya solo tiene vacio saltara al otro lado, en caso contrario deberá saltar al siguiente escalón. Esto lo realizará todas las veces que sea necesario.
Saltar enemigo: Para esta acción hemos puesto reglas genéricas aplicables a todos los enemigos, ya que después de analizar el código que nos proporcionan hemos visto que la mayoría tienen un valor mayor o igual a 80. Estas reglas son del estilo: saltar cuando detecte un enemigo delante suya, saltar cuando detecte un enemigo cayendo hacia él, etc. Para hacer bien este movimiento deberemos tener en cuenta muchas variantes ya que los enemigos pueden perseguir a Mario, caer del cielo, o incluso caer a sus “pies”.
Agacharse: Esto es un caso especial de esquivar un enemigo y lo hacemos cuando un misil va hacia Mario, en este caso se agacha hasta que pase. Para ello mantenemos pulsada la tecla con dirección hacia abajo (KEY_DOWN=true) e irá comprobando si en la posición de encima de su cabeza no tiene nada, sólo entonces podrá levantarse.
Retroceder: Si hay enemigos en una posición en la cual no va a poder esquivarlos saltando, retrocedemos. Esto se antoja de vital importancia en niveles muy altos donde pueden aparecer 10 enemigos de golpe, esto hará que retrocedamos y podamos analizar mejor la situación ya que si hubiéramos seguido avanzando podríamos haber sido heridos al no poder tener en cuenta todos a la vez.
INICIO:
Final especial
Esquivar flor
Esquivar bala
Saltar tubería/cañ
ón
Saltar escalera
Evitar hoyos Saltar pared Avanzar
- 82 -
Andar sobre tubo: Cuando estamos sobre un tubo no corremos, esto evitará que nos caigamos en un hoyo o justo al lado de un enemigo al caer. Para esto último deberemos hacer varías consideraciones ya que habrá que explorar diferentes opciones y añadir muchas reglas debido a la posible diversidad del escenario.
Escalón antes de hoyo: Cuando detectamos un escalón
antes de un hoyo calculamos si podemos realizar el salto, si es afirmativo saltamos y si no vamos más despacio. El ir más despacio tiene como objetivo poder caer en el siguiente escalón y una vez allí poder afrontar el salto con seguridad.
Final En Alto Para poder terminar una partida cuando el final es un alto que no es accesible a priori hemos hecho una serie de métodos que son: SaltoFinal, Doble, EstoyDebajo y buscarCamino por los que ira pasando para poder llegar a la meta.
4.6 Interfaz Gráfico Para empezar cabe el interfaz gráfico se facilita en [8]. Este interfaz es bastante completo y a parte de unos gráficos aceptables, nos da multitud de opciones para poder cambiar de nivel, apariencia, obstáculos…
Nuestro agente dispondrá de dos matrices de 19x19 las cuales le aportarán información de su entorno. Mario estará en la posición (9,9) en todo momento. En cualquiera de las dos matrices si no hay nada, esa posición tendrá el valor 0. La primera matriz será LevelScene, esta matriz le indicara los elementos fijos de la pantalla, tales como: paredes, tuberías, cañones…
Algunos de los más usuales son:
Vamos a mostrar una captura de la pantalla para que se pueda tener una idea más gráfica.
- 83 -
Como podemos apreciar en esta primera matriz salen todos los valores del entorno incluyendo las monedas cuyo valor es el único positivo (el 1). La segunda matriz es enemies también de 19x19 y en su interior tendrá los valores de los enemigos. Algunos de los enemigos más usuales son:
Una vez tenemos identificados los números que tendrá la matriz enemies, vamos a ver sobre la pantalla como quedaría. También es llamativo resaltar que la mayoría de enemigos tiene un valor superior a 80, eso nos facilitara a la hora de implementar el código para que esquive a cualquier enemigo desconocido y sin que necesidad de tratarlo como un caso especial. Para eso utilizamos la pantalla anterior aunque solo tengamos un par de enemigos del mismo tipo.
Como podemos ver en la imagen aunque el fuego que arroja Mario no es un enemigo como tal, también viene indicada en la matriz enemies con un 25. Como hemos podido comprobar estas matrices nos van a ser de vital importancia para poner las reglas ya que nos irán proporcionando información detallada de la posición y el numero de enemigos en cada instante.
- 84 -
5. SOLUCIÓN ÓPTIMA Obviamente el algoritmo que hemos implementado en dos semanas dista de ser el óptimo y deseado, la mayoría de los participantes mejor clasificados disponen de algoritmos genéticos Y en particular los tres mejores clasificados del 2010 usaron el pathfinding A*
6. BIBLIOGRAFÍA [1] http://es.wikipedia.org/wiki/%C3%81rbol_de_decisi%C3%B
3n [2] http://julian.togelius.com/mariocompetition2009/GIC2009Co
mpetition.pdf [3] http://es.wikipedia.org/wiki/Algoritmos_gen%C3%A9ticos [4] http://eddyalfaro.galeon.com/geneticos.html [5] http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqued
a_A*. [6] http://es.wikipedia.org/wiki/Agente_inteligente_(inteligencia
_artificial) [7] http://www.ati.es/novatica/2000/145/vjulia-145.pdf [8] http://www.marioai.com/
- 85 -
Inteligencia en Redes de Comunicaciones
Robot de Robocode
Felipe Llinares López 100072665
Juan José Torres
García 10072753
ABSTRACTO En esta memoria describimos una implementación
que hemos realizado de un robot de competición para
el programa Robocode.
General Terms Algoritmos, Rendimiento, Diseño.
1. INTRODUCTION Robocode es, en parte un juego, y en parte un
language de programación.
Es un juego en el que unos tanques controlados por el
ordenador luchan entre sí por su propia
supervivencia, dentro de un tablero de juego.
Los tanques, llamados robots, están puramente
controlados por un algoritmo interno para cada uno
de ellos. Es decir, es un juego de Inteligencia
Artificial. Dichos algoritmos se escriben en el
lenguaje de programación Java.
El propio programa da muchas facilidades para hacer
robots, y es muy sencillo escribir el algoritmo de un
robot básico que se mueva, detecte a los enemigos y
les dispare. Sin embargo, los algoritmos pueden llegar
a complicarse mucho. Hay quien dedica mucho
tiempo a hacer robots muy difíciles de combatir. De
hecho, incluso hay una liga profesional de Robocode.
Nuestro trabajo ha consistido en hacer un robot
bastante competitivo. Quizá no tan efectivo como los
mejores de la liga profesional, pero sí es capaz de
vencer con facilidad a los robots sencillos, e incluso
es capaz de ganar algunas veces a los más
complicados.
En esta memoria, explicamos de forma breve en qué
consisten los algoritmos que hemos utilizado. Está
dividida en dos partes:
- 86 -
Sistema de Disparo
Sistema de Esquiva
El sistema de disparo intenta predecir el movimiento
de los robots enemigos, para así disparar a donde van
a estar cuando la bala llegue a su posición, mientras
que el sistema de esquiva mueve al robot intentando
esquivar de la forma más efectiva las balas de los
robots enemigos.
2. Sistema de Disparo
2.1 Introducción El lema de Robocode es “Build the best, destroy the
rest”. Por tanto, no debe resultar una sorpresa que
diseñar un sistema efectivo de disparo es esencial
para obtener un bot competitivo.
Hay multitud de aproximaciones a dicho problema.
La más sencilla de todas es conocida como “Head-
On-Targeting”
Consiste simplemente en disparar hacia donde vemos
al enemigo. Si bien a primera vista puede parecer algo
totalmente razonable, la reducida velocidad de las
balas, entre 11 pixeles por turno para las balas más
poderosas hasta 20 pixeles por turno para las más
débiles, hace que si utilizamos “Head-On-Targeting”,
lo más probable es que para cuando la bala llegue a la
posición del bot enemigo, éste ya no se encuentre allí.
Por tanto, diseñar un buen sistema de disparo es
mucho más complejo de lo que puede parecer en un
principio y ha sido objeto de estudio por muchos
aficionados a la Inteligencia Artificial dentro del
mundo de Robocode.
Debido a la limitación máxima de diez páginas que
pesa sobre el contenido de este trabajo,
renunciaremos a la posibilidad de exponer el estado
del arte sobre los sistemas de Inteligencia Artificial
para disparo en Robocode y nos centramos en
describir de forma detallada cuál es la forma en la que
nosotros hemos atajado el problema.
En nuestra opinión, el problema de diseñar un sistema
de disparo es claramente un problema que se presta a
ser tratado desde la rama del Aprendizaje Máquina.
Es fácil plantearlo como un problema de aprendizaje
supervisado, concretamente, como un problema de
estimación, o si consideramos un comportamiento
puramente determinista, de regresión.
2.2 Preprocesador de Datos Cada vez que escaneamos a un robot enemigo (lo
cual, con un algoritmo de escaneo adecuado, ocurre
cada turno), el kernel que controla la ejecución de la
batalla invoca el método onScannedRobot, el cuál
recibe como parámetro un objeto de la clase
ScannedRobotEvent.
Dicho objeto contiene información muy interesante
sobre el estado del robot enemigo, como la distancia
al enemigo, su dirección, velocidad, energía restante o
el ángulo relativo entre nuestra dirección y su centro.
Además, dedicando suficiente esfuerzo, es posible
programar un módulo de pre procesado de datos que
obtenga muchas otras medidas de segundo, tercer o
incluso cuarto orden a partir de los datos que se
obtienen directamente del objeto ScannedRobotEvent
y de invocaciones anteriores de dicho método.
Por ejemplo, a partir de la velocidad y la dirección se
puede obtener la velocidad radial y angular, así como
el sentido de giro del robot enemigo respecto a
nuestro centro. Igualmente, a partir de nuestra
posición (la cual es conocida en todo momento), la
distancia al robot enemigo y el ángulo relativo entre
nuestra dirección y el centro del robot enemigo
podemos calcular la posición absoluta del robot
enemigo. Otro dato interesante es la distancia del
robot enemigo a los muros, que puede ser medida
tanto en pixeles como en el número de turnos que
tardaría el robot enemigo en chocar con los muros si
siguiese la misma trayectoria.
Si además usamos los datos obtenidos en el evento
anterior, podemos obtener medidas con dimensión
temporal como la aceleración del robot enemigo, el
número de turnos que lleva sin cambiar sentido de
- 87 -
giro, sin acelerar o sin decelerar o simplemente
parado.
La forma de obtener dicho dato es bastante original.
Cada vez que vemos al enemigo, consideramos que se
genera una onda esférica en el centro de nuestro robot
y que se propaga a la misma velocidad que lo haría la
bala que dispararíamos en ese momento si
pudiéramos hacerlo (hay que recordar que en
Robocode, no es posible disparar repetidamente de
forma ilimitada porque hay calentamiento en el
cañón).
En el momento de generar la onda, almacenamos
información sobre la posición en la que se encontraba
el enemigo. A cada turno, comprobamos si la onda ha
llegado al enemigo. Cuando es así, podemos saber
cuál ha sido su desplazamiento desde que disparamos
la bala “virtual” hasta que dicha bala habría
impactado. Una vez realizada dicha medida, tenemos
una nueva muestra para nuestro conjunto de datos de
entrenamiento, formada por todos los datos de
entrada comentados anteriormente (velocidad,
dirección, aceleración, etc.) y el ángulo de desviación
que debimos usar.
En la figura se muestran las ondas originadas para el
cálculo de los valores exactos de la variable de salida.
Las ondas negras tienen una bala real .mientras que
las blancas son balas “virtuales”.
Así, nuestro sistema tratará de utilizar una serie de
datos que obtenemos de las invocaciones del método
onScannedRobotEvent para tratar de estimar
mediante ciertos algoritmos cómo se moverá nuestro
rival durante el tiempo que tardará la bala en llegar a
él y así calcular el ángulo correcto con el que
debemos compensar nuestro cañón a la hora de
disparar.
Realmente, la limitación en los datos que tomaremos
cada vez que escaneamos al robot enemigo está
simplemente en nuestra imaginación y habilidad
como diseñadores. Un buen pre procesado de datos,
en el que adquiramos datos verdaderamente
relevantes para el problema, es la primera clave para
diseñar un sistema de disparo efectivo. En ese
sentido, vemos que el problema no se diferencia en
absoluto de cualquier otro sistema que hemos
- 88 -
estudiado durante la asignatura en el tema de
Aprendizaje Máquina.
2.3 Algoritmos Una vez hemos adquirido y procesado los datos que
conformaran nuestro conjunto de entrenamiento,
debemos diseñar algoritmos para estimar el ángulo de
desviación óptimo al disparar a partir de dichos datos.
La primera cosa que debemos mencionar es que,
gracias al concepto introducido anteriormente de
balas “virtuales”, podemos utilizar simultáneamente
varios algoritmos distintos. Así, a cada momento,
elegimos cuál es el algoritmo que está obteniendo
mejores resultados en términos de porcentaje de
acierto y la bala real es disparada según la predicción
de dicho algoritmo. El resto simplemente generan una
bala “virtual” de la cual nos ocuparemos para ver si
hace impacto “virtual” o no.
Utilizando dicha idea, nuestro sistema de disparo se
compone de cuatro algoritmos:
Sistema de disparo de corto alcance: En
situaciones en las que nuestro enemigo está
cerca, esto es, a menos de 100 píxeles, se puede
aproximar el movimiento del bot enemigo
durante breves periodos de tiempo por un
movimiento circular. En esa situación, es
posible diseñar un algoritmo que, asumiendo
dicho movimiento circular, prediga de forma
exacta donde se encontrará en enemigo y
dispare ahí. Dado que la similitud al
movimiento circular es grande pero no exacta,
la probabilidad de fallar existe. Sin embargo,
este algoritmo funciona bien a distancias
cortas.
Least Mean Squares: La utilización del
archiconocido algoritmo LMS en Robocode
es, creemos, una contribución original nuestra
ya que no hemos encontrado referencia
alguna en la wiki. Tras volcar conjuntos de
datos obtenidos tras varias batallas en
ficheros y procesarlos con MATLAB,
llegamos a la conclusión que una regresión
lineal era sorprendentemente precisa. Debido
a la elevada complejidad computación de las
regresiones lineales exactas (inversión de
matrices principalmente) y a que en este
contexto es mucho más interesante emplear
un algoritmo adaptativo, llegamos a la
conclusión de que LMS podía obtener buenos
resultados, como así hemos comprobado en la
práctica.
Dynamic Clustering: El algoritmo de moda
para disparar en Robocode a fecha de
Diciembre de 2012. El método es una
- 89 -
combinación de KNN con estimación de
densidades de probabilidad. A cada instante
que debemos disparar, buscamos en nuestro
conjunto de datos las K situaciones más
similares a la actual que hemos vivido en el
pasado, donde cada situación se caracteriza
por los datos de entrada que hayamos
decidido usar. Con dichas K situaciones más
similares, trataremos de estimar la PDF de la
variable de salida para nuestro estado actual y
elegiremos como ángulo de desviación aquel
que tenga la máxima densidad de
probabilidad. En otras palabras, usamos el
criterio de máxima verosimilitud. Es
importante reseñar que tanto el método de
estimación de la PDF, como el parámetro K,
como los datos de entradas para identificar
situaciones son algo que debe elegir el
diseñador. Sobre los datos de entrada ya
hemos hablado. Respecto a los otros dos
parámetros, nosotros utilizamos el método de
las ventanas de Parzen con kernel gaussiano
para la estimación de la PDF y K = 25 como
parámetro del KNN ya que es la
configuración que mejor tasa de acierto nos
ha proporcionado en nuestros benchmark.
Este algoritmo es utilizado por los robots más
competentes de todo Robocode.
LMS Weighted Dynamic Clustering: Nuestra
segunda aportación original a los algoritmos
de disparo en el mundo de Robocode. Uno de
los problemas, a nuestro juicio, del algoritmo
Dynamic Clustering es que es tremendamente
heurístico. Viendo el código de varios bots
open source que implementan dicho
algoritmo, comprobamos que cada bot
tomaba sus propios datos de entrada y les
asignaba pesos de una forma bastante oscura
a priori. Por tanto, nos planteamos si había
una forma de que nuestro robot aprendiese
también, a la hora de buscar las situaciones
más similares en el paso KNN del algoritmo
de Dynamic Clustering, que datos de entrada
son realmente más importantes. Nuestra idea
fue emplear los pesos del filtro LMS, en valor
absoluto y normalizados, como indicador de
qué datos son más importantes. Así,
sustituimos la distancia Euclídea por una
distancia con pesos y el resto del algoritmo se
mantiene igual.
- 90 -
Predicciones para la futura posición del enemigo
según los distintos algoritmos
Como dijimos, los cuatros algoritmos anteriormente
descritos son constantemente simulados de forma
concurrente. Sus tasas de acierto virtual son
monitorizadas y, aquel con mayor tasa de acierto
virtual, es el que guiara la dirección de nuestra
siguiente bala real. En la práctica, hemos comprobado
que el algoritmo LMS Weighted Dynamic Clustering
es aquel que suele ofrecer mejores resultados. Sin
embargo, mantener los cuatro a la vez es, sin duda, la
mejor elección: no sólo hace nuestros disparos más
impredecibles sino que hace nuestro bot mucho más
adaptable a enemigos de distintas características.
3. Sistema de Esquiva
3.1 Introducción Al igual que nuestro bot intenta estimar la posición
del bot enemigo para impactarle incluso aunque se
mueva, de igual forma el bot enemigo intentará
estimar nuestra posición.
Nuestro deber es ponerle al bot enemigo lo más difícil
posible dicha estimación. Es decir, debemos decidir
hacia qué dirección y sentido queremos mover
nuestro bot y cuánto, en términos de velocidad, para
que las bolas enemigas no nos den. Dicho de otra
forma, tenemos que elegir dónde vamos a estar cierto
tiempo después al momento de disparo del enemigo,
tal que el movimiento de la bola enemiga no
interseccione con el de nuestro robot.
De nuevo, hay multitud de formas de afrontar el
problema, y el espacio que podemos dedicarlas en
esta memoria es escaso. Por tanto, nos centraremos en
nuestra forma de resolver el problema.
Hemos utilizado un algoritmo bastante común entre
los robots más poderosos actuales, conocido como
Wave Surfing, o surfeo de ondas, que exponemos a
continuación.
3.2 Preprocesador de Datos Como ya hemos comentado, con un algoritmo
adecuado, nuestro robot escaneará al robot enemigo
cada turno. La idea básica de Wave Surfing consiste
en que cada vez que esto ocurre, generamos una onda
imaginaria esférica, como la que se generaba para el
algoritmo de disparo, pero esta vez centrada en el
robot enemigo.
Dicha onda se irá propagando a lo largo del tiempo, y
llegará un momento en el que su frente rompa contra
nuestro robot. Como generamos una onda cada turno,
cada vez que el robot enemigo dispare una bala, habrá
una onda asociada a ella.
- 91 -
Lo interesante del algoritmo estriba en que la bala
enemiga viaja en uno de los puntos del frente de su
onda asociada. Por tanto, haciendo una estimación de
cuál es ese punto, podemos predecir dónde estará la
bala enemiga cuando el frente de la onda rompa con
nuestro robot.
Si además, nuestro robot se mueve a lo largo del
frente de dicha onda, podemos moverlo a un punto en
el que creamos que la bala no estará, de forma que la
esquivaremos. Y ese tipo de movimiento es conocido
como surfear la onda.
Cada vez que escaneamos al robot enemigo, que es
cuando queremos generar la onda, se llama al método
onScannedRobot, que como ya hemos comentado,
tiene datos de sobra como para apuntar todo lo que
necesitamos saber de la onda. Concretamente, el
momento en el que la generamos, su velocidad (en
función de la potencia con la que dispara nuestro
enemigo), su dirección (que sería hacia donde está
apuntando el enemigo), la posición en la que se
genera (que es la posición del enemigo), y la posición
de nuestro propio robot en el momento que se genera.
Cada turno, tenemos que actualizar la posición de
todas las ondas que teníamos apuntadas (en función
del tiempo que ha transcurrido desde que se
generaron y de su velocidad individual), y borrar las
ondas que ya han traspasado nuestro robot.
Además, en cada turno, tenemos que elegir cómo
movernos a lo largo del frente de la/las ondas que
tenemos apuntadas, para esquivar las balas enemigas.
La forma en la que lo hagamos es lo que diferencia a
los distintos algoritmos de Wave Surfing.
3.3 Algoritmo Nuestro algoritmo en concreto, análogamente a lo que
hacíamos para disparar, consiste en estimar con
cuánto ángulo de desviación respecto a donde está
nuestro robot está disparando el robot enemigo.
Para ello, nos basamos en las balas que nos
impactaron anteriormente. Cada vez que nos impacta
una bala, buscamos entre las ondas que tenemos
apuntadas a cuál estaba asociada. En dicha onda,
tenemos apuntado el punto de donde salió, que es
dónde estaba el enemigo cuando disparó la bala que
nos ha dado, y también tenemos dónde estaba nuestro
robot en el momento de disparo. Sabiendo el punto en
el que nos ha impactado la bala, que es justamente
nuestra posición en el momento del impacto,
podemos estimar con cuánto ángulo de desviación
disparó el robot enemigo.
La idea es guardarnos con que ángulos de desviación
nos está impactando más veces el robot enemigo. De
esta forma, a la hora de movernos, nos moveremos
hacia un punto cuyo ángulo de desviación tenga poca
probabilidad de impactarnos.
Más en detalle, lo que hace el algoritmo de
movimiento es buscar la onda que está más cerca de
nuestro robot, ya que está asociada a la bala más
cercana y por tanto más peligrosa. A continuación,
estima donde estaría nuestro robot cuando la onda nos
impacte, si nos moviésemos a lo largo del frente de
dicha onda (surfeándola) hacia la derecha y hacia la
izquierda, y a diferentes velocidades. A continuación,
para cada uno de esos puntos, calcula cuánto sería el
ángulo de desviación con el que tendría que haber
disparado el robot enemigo para impactarnos, y busca
entre los impactos anteriores cuál de dichos ángulos
de desviación nos ha impactado menos veces
anteriormente. Y pone al robot en movimiento hacia
dicho punto y con dicha velocidad.
De esta forma, cuando la onda nos impacte, estaremos
en el punto de su frente de onda cuyo ángulo de
desviación con el que tendría que haber disparado el
robot enemigo para darnos tiene menos probabilidad
de darnos, basándonos en los disparos que nos
impactaron anteriormente.
Hay que tener en cuenta, que todo esto se recalcula
cada turno, de forma que nos iremos acercando de
una forma suave al punto más seguro.
- 92 -
Empíricamente, hemos descubierto que el algoritmo
más efectivo es moverse surfeando la onda hacia el
lado con menor probabilidad de impacto, a una
velocidad constante, y ese es el algoritmo que hemos
utilizado finalmente.
La gran ventaja de este algoritmo es que, aunque el
robot enemigo tenga un método para aprender y
estimar nuestros movimientos, si consigue
impactarnos alguna bala, nuestro algoritmo
reaccionará y empezará a mover el robot de forma
diferente para contrarrestar la forma de disparo del
robot enemigo.
4. Referencias
[1] La mayor parte de la información la hemos
adquirido de Robowiki
http://robowiki.net/wiki/Main_Page
[2] Para el algoritmo de disparo, hemos utilizado
información de las siguientes páginas:
http://en.wikipedia.org/wiki/Kernel_density_esti
mation
http://es.wikipedia.org/wiki/Knn
http://robowiki.net/wiki/Dynamic_Clustering_Tut
orial
http://en.wikipedia.org/wiki/Kd-tree
http://robowiki.net/wiki/GuessFactor_Targeting
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOC
AL_COPIES/AV0405/MISHRA/kde.html
http://robowiki.net/wiki/Maximum_Escape_Angl
e
[3] Para el algoritmo de esquiva, hemos utlizado
información de las siguientes páginas:
http://robowiki.net/wiki/Wave_surfing
[4] Hemos utilizado también los apuntes de la
asignatura.
Hemos utilizado también código open-source de
bots del repositorio de robocode.
- 93 -
Minería de Datos Óscar Palomo Miñambres
Universidad Carlos III de Madrid Avda. De la Universidad, 30
28911, Leganés (Madrid-España) [email protected]
Abstract En este artículo analizaremos las ideas básicas que sustentan el Data Mining y, más concretamente, la utilización de árboles de decisión como herramienta estadística avanzada. Presento también un ejemplo ficticio de la aplicación de estas técnicas: predecir clientes que tienen un alto porcentaje de impagos. 1. INTRODUCCIÓN
La minería de datos (DM, Data Mining) consiste
en la extracción no trivial de información que
reside de manera implícita en los datos. Es una
tecnología con gran potencial para ayudar a las
compañías a concentrarse en la información más
importante de sus Bases de Información. Las
herramientas de Data Mining predicen futuras
tendencias y comportamientos, permitiendo en
los negocios tomar decisiones proactivas y
conducidas por un conocimiento acabado de la
información.
Lo que en verdad hace el data mining es reunir
las ventajas de varias áreas como la Estadística, la
Inteligencia Artificial, la Computación Gráfica, las
Bases de Datos y el Procesamiento Masivo,
principalmente usando como materia prima las
bases de datos.
Existen cuatro razones fundamentales por las cuales el Data Mining es una realidad en nuestros días:
• Avances tecnológicos en almacenamiento masivo de datos y CPU.
• Existencia de nuevos algoritmos para extraer información en forma eficiente
• Existencia de herramientas automáticas que no hacen necesario el ser un experto en estadística
• Potencia de computo
2. MINERIA DE DATOS – DATA MINING
La técnica usada para realizar estas hazañas en
Data Mining se llama Modelado. Modelado es
simplemente el acto de construir un modelo en
una situación donde usted conoce la respuesta y
luego la aplica en otra situación de la cual
desconoce la respuesta. Por ejemplo, si busca un
galeón español hundido en los mares lo primero
que podría hacer es investigar otros tesoros
españoles que ya fueron encontrados en el
pasado. Notaría que esos barcos frecuentemente
fueron encontrados fuera de las costas de
Bermuda y que hay ciertas características
respecto de las corrientes oceánicas y ciertas
rutas que probablemente tomara el capitán del
barco en esa época. Usted nota esas similitudes y
arma un modelo que incluye las características
comunes a todos los sitios de estos tesoros
hundidos. Con estos modelos en mano sale a
buscar el tesoro donde el modelo indica que en el
pasado hubo más probabilidad de darse una
situación similar. Con un poco de esperanza, si
tiene un buen modelo, probablemente
encontrará el tesoro.
2.1 CICLO DATA MINING
El data mining se ha ido incorporando a la vida de empresas, gobiernos, universidades, hospitales y diversas organizaciones que están interesadas en explorar sus bases de datos. Podemos decir que
- 94 -
"en data mining cada caso es un caso". Sin embargo, en términos generales, el proceso se compone de cuatro etapas principales:
• Selección del conjunto de datos, tanto en lo que se refiere a las variables objetivo (aquellas que se quiere predecir, calcular o inferir), como a las variables independientes (las que sirven para hacer el cálculo o proceso)
• Pre procesamiento de los datos. Determinación, obtención y limpieza de los datos necesarios. Esta etapa consume generalmente alrededor del setenta por ciento del tiempo total de un proyecto de data mining. Determinación del modelo. Después de haber sido pre procesados y realizar la limpieza de datos, se sigue teniendo una cantidad enorme de variables o atributos. La selección de características reduce el tamaño de los datos, eligiendo las variables más influyentes del problema, sin apenas sacrificar la calidad del modelo de conocimiento obtenido del proceso de minería. Los métodos para la selección de los atributos que más influencia tienen en el problema son básicamente dos: - Aquellos basados en la elección de los mejores atributos del problema. - Aquellos que buscan variables independientes mediante test de sensibilidad, algoritmos de distancia o heurísticos. Realizado esto se comienza realizando unos análisis estadísticos de los datos, y después se lleva a cabo una visualización gráfica de los mismos para tener una primera aproximación. Según los objetivos planteados y la tarea que debe llevarse a cabo, pueden utilizarse algoritmos desarrollados en diferentes áreas de la Inteligencia Artificial.
• Análisis de los resultados. una vez obtenido el modelo, se debe proceder a su validación comprobando que las conclusiones que arroja son válidas y suficientemente satisfactorias. En el caso de haber obtenido varios modelos
mediante el uso de distintas técnicas, se deben comparar los modelos en busca de aquel que se ajuste mejor al problema. Si ninguno de los modelos alcanza los resultados esperados, debe alterarse alguno de los pasos anteriores para generar nuevos modelos. Por ejemplo, tenemos un conjunto de datos y sabemos que algunos algoritmos de generación de clasificadores funcionara mejor sobre esos datos que otros ¿Cual usar?, ej.: J48 o SVM? Podemos hacer validación cruzada y quedarnos con el mas alto (en la practica esto es suficiente), pero en ocasiones la diferencia puede ser debida al azar y no ser significativa estadísticamente Ejemplo: buscamos un algoritmo preciso pero también rápido (lo vamos a utilizar en una situación dinámica que exige un entrenamiento rápido). Tenemos un algoritmo A (J48) que obtiene un 90% de aciertos, y otro B (NN) que obtiene un 92%, pero B es 100 veces más lento que A. ¿Merece la pena usar B?
• Integración, si procede, de los resultados en un sistema transaccional o similar.
Figura 1. Proceso Data Mining
- 95 -
2.2 EL ALCANCE DE DATA MINING
Dadas bases de datos de suficiente tamaño y calidad, la tecnología de Data Mining puede generar nuevas oportunidades de negocios al proveer estas capacidades:
Las herramientas de Data Mining pueden analizar bases de datos masivas en minutos. Procesamiento más rápido significa que los usuarios pueden automáticamente experimentar con más modelos para entender datos complejos. Alta velocidad hace que sea práctico para los usuarios analizar inmensas cantidades de datos. Grandes bases de datos, a su vez, producen mejores predicciones.
Las bases de datos pueden ser grandes tanto en profundidad como en ancho:
• Más columnas. Los analistas muchas veces deben limitar el número de variables a examinar cuando realizan análisis manuales debido a limitaciones de tiempo. Sin embargo, variables que son descartadas porque parecen sin importancia pueden proveer información acerca de modelos desconocidos. Un Data Mining de alto rendimiento permite a los usuarios explorar toda la base de datos, sin preseleccionar un subconjunto de variables.
• Más filas. Muestras mayores producen menos errores de estimación y desvíos, y permite a los usuarios hacer inferencias acerca de pequeños pero importantes segmentos de población.
2.3 TÉCNICAS DE DATA MINING
Como ya se ha comentado, las técnicas de la minería de datos provienen de la Inteligencia artificial y de la estadística, dichas técnicas, no son más que algoritmos, más o menos sofisticados que se aplican sobre un conjunto de datos para obtener unos resultados.
Las técnicas más representativas son:
• Redes Neuronales. Son un paradigma de aprendizaje y procesamiento automático inspirado en la forma en que funciona el sistema nervioso de los animales, es decir, un sistema de interconexión de neuronas en una red que colabora para producir un estímulo de salida. Esta tecnología puede ser desarrollada tanto en software como en hardware y con ella se pueden construir sistemas capaces de aprender, de adaptarse a condiciones variantes, o inclusive si se dispone de una colección suficiente grande de datos, predecir el estado futuro de algunos modelos. Estas técnicas son adecuadas para enfrentar problemas que hasta ahora eran resueltos sólo por el cerebro humano y resultaban difíciles o imposibles para las máquinas lógicas secuenciales.
• Regresión lineal.- Es la más utilizada para formar relaciones entre datos. Rápida y eficaz pero insuficiente en espacios multidimensionales donde puedan relacionarse más de 2 variables.
• Árboles de decisión.- Un árbol de decisión se describe como un modelo de predicción utilizado en el ámbito de la inteligencia artificial, ya que dada una base de datos se construyen diagramas de construcciones lógicas, muy similares a los sistemas de predicción basados en reglas, que sirven para representar y categorizar una serie de condiciones que suceden de forma sucesiva, para la resolución de un problema.
En este tipo de árbol, los nodos intermedios son los atributos de entrada de los ejemplos presentados, las ramas representan valores de dichos atributos y los nodos finales son los valores de la clase. Para elegir qué atributos y en qué orden aparecen en el árbol, se utiliza una función de evaluación: ganancia de información.
• Modelos estadísticos.- Es una expresión
simbólica en forma de igualdad o ecuación
- 96 -
que se emplea en todos los diseños experimentales y en la regresión para indicar los diferentes factores que modifican la variable de respuesta.
• Clustering. Métodos de agrupación de
datos que nos permiten clasificar los datos por su similitud entre ellos. Son utilizadas con frecuencia para entender los grupos naturales de clientes en empresas o bancos.
• Algoritmos genéticos. Son modelos inspirados incluir fácilmente ligaduras complicadas que limitan la solución a un problema en la evolución de las especies y que se aplican generalmente en problemas de optimización.
Según el objetivo del análisis de los datos, los algoritmos utilizados se clasifican en supervisados y no supervisados:
• Algoritmos supervisados (o predictivos): predicen un dato (o un conjunto de ellos) desconocido a priori, a partir de otros conocidos.
• Algoritmos no supervisados (o del descubrimiento del conocimiento): se descubren patrones y tendencias en los datos.
A continuación se describen un ejemplo de aplicación en el sector financiero y banca donde se ha visto involucrado el data mining.
3 APLICACIONES DE USO: CONCESIÓN DE CREDITOS BANCARIOS
Para el desarrollo de este ejemplo he utilizado WEKA (herramienta de aprendizaje automático y data mining, escrita en lenguaje Java, gratuita). Es un entorno para experimentación de análisis de datos que permite aplicar, analizar y evaluar las técnicas más relevantes de análisis de datos, principalmente las provenientes del aprendizaje automático, sobre cualquier conjunto de datos del usuario. Para ello únicamente se requiere que los datos a analizar se almacenen con un cierto formato, conocido como ARFF (Attribute-Relation
File Format).
La concesión de créditos bancarios en el momento que vivimos es un tema bastante complicado. La crisis económica que se esta viviendo en estos momentos obliga a los bancos a ser muchos más estrictos a la hora de conceder un préstamo/crédito a sus clientes. Se ha intentado, a partir de ciertos estudios y usando distintas metodologías, identificar las probabilidades que tiene un cliente de devolver un crédito de acuerdo con los datos de los que se dispone de él. Es importante destacar que los modelos cambian y dependen en ocasiones del momento en que se realizan, es decir, no es lo mismo dar un crédito hoy en día que hace unos años en los que se otorgaban créditos más fácilmente. Con ello quiero decir, que aunque los datos de los que disponemos son los mismos y unos casos conviene realizar el estudio con un subconjunto determinado y en otras con otro. En este caso, la minería de datos, junto con el uso de un modelo basado en árboles de decisión, nos ayudará a investigar las correlaciones existentes en los casos de morosidad. 3.1 Objetivos del análisis Antes de comenzar con la aplicación de las técnicas de WEKA a los datos de este dominio, es muy conveniente hacer una consideración acerca de los objetivos perseguidos en el análisis. Como se mencionó en la introducción, un paso previo a la búsqueda de relaciones y modelos subyacentes en los datos ha de ser la comprensión del dominio de aplicación y establecer una idea clara acerca de los objetivos del usuario final. De esta manera, el proceso de análisis de datos (proceso KDD), permitirá dirigir la búsqueda y hacer refinamientos, con una interpretación adecuada de los resultados generados. Los objetivos, utilidad, aplicaciones, etc., del análisis efectuado no "emergen" de los datos, sino que deben ser considerados con detenimiento como primer paso del estudio. En nuestro caso, un banco desea obtener reglas para predecir qué personas de las que piden un crédito no van a devolverlo.
- 97 -
Por otra parte, este análisis tiene un enfoque introductorio e ilustrativo para acercarse a las técnicas disponibles y su manipulación desde la herramienta. 3.2 Pre procesado de los datos La entidad bancaria cuenta con una gran base de datos correspondiente a los créditos concedidos a otros clientes con anterioridad. Para este caso los datos disponibles son: @attribute estado {soltero, casado, divorciado} @attribute DNI @attribute nomina real @attribute sexo {HOMBRE, MUJER} @attribute PAGO {si, no} El campo ¿Pagó? es binario (solo puede tomar
como valores sí o no) y es el atributo clave que
tiene el banco para estudiar la concesión del
crédito. No siempre existe un atributo clave. A
partir de los datos, las técnicas de DM podrían
generar un modelo de los datos, consistente en
un conjunto de reglas, que permitiesen predecir
en el futuro, el posible comportamiento de un
cliente que solicitase un préstamo.
Para generar gráficos con los datos del ejemplo, se seleccionará la pestaña Visualize. Por defecto, se muestran gráficos para todas las combinaciones de atributos tomadas dos a dos, de modo que se pueda estudiar la relación entre dos atributos cualesquiera. El aspecto de la pantalla es el mostrado en la figura siguiente
Figura 2. Relación entre datos dos a dos
Si seleccionamos uno de ellos podemos apreciar
la relación existente. Por ejemplo:
Figura 3. Relación Nomina-Pago
Podemos apreciar que todos aquellos clientes con nóminas superiores a 2000 euros van a devolver el préstamo. Por otra parte cuando la nómina es menor de esa cantidad la devolución no esta solo relacionado con este atributo sino que depende de otros factores. Podemos deducir por lo tanto que el modo visual nos ayuda a tener una idea de los datos pero no a conocerlos por completo. 3.3 Arboles de decisión Utilizar un conjunto de datos disponibles, en forma de tabla de atributos, para aprender a predecir la clase de datos NO VISTOS TODAVÍA. El predictor puede tomar diversas formas, según el algoritmo (árbol de decisión, reglas, función, red de neuronas, probabilidades, centroides, ..). Pero en último termino, un predictor es una estructura que toma una entrada (los distintos valores de los atributos que representan al dato) y devuelve una salida (la clase o cantidad predicha para ese dato) En este ejemplo he utilizado la técnica de generación de reglas en forma de árboles de decisión ya que es un modelo de datos sencillo y comprensible para todo el mundo. Obtenemos el siguiente esquema:
- 98 -
Figura 4. Árbol de decisión
Cabe destacar que para la realización del clasificador se ha utilizado validación cruzada (dividir varias veces el mismo conjunto de datos en entrenamiento y test y calcular la media. Así, las particiones de test no solaparan). El método de validación cruzada utiliza muy bien los datos al calcular el porcentaje de aciertos esperado, porque todos ellos se utilizan para test (en alguna partición). De hecho, todos los datos figuran como entrenamiento o test en alguno de los ciclos de validación cruzada. Pero es costoso en tiempo (hay que lanzar el algoritmo de aprendizaje n veces) 3.4 Análisis de los resultados Una vez obtenido el conocimiento es necesario validarlo para observar su comportamiento con datos no vistos. Es una práctica conveniente el realizar el experimento, el cálculo, dividiendo los datos en dos subconjuntos de distinta magnitud. Un subconjunto para entrenamiento (66%) y otro subconjunto para test (33%). Esto puedo ocasionar problemas, es posible que
por azar, los datos de entrenamiento y test estén
sesgados. Por lo tanto, la proporción entre las
clases que existe en el conjunto de datos original,
se intenta mantener en los conjuntos de
entrenamiento y test.
Ejemplo: si en el conjunto original un 65% de los
datos pertenecen a la clase positiva, la
estratificación intentara que esa proporción se
mantenga en entrenamiento y test
Se suele utilizar como método de validación, conseguir el mayor porcentaje de aciertos, aunque en ocasiones es importante evaluar el conocimiento obtenido con otras medidas:
• Comprensibilidad: si el conocimiento es
fácilmente comprensible para un ser
humano. Útil para evaluar si el
conocimiento es correcto o para tomar
decisiones en base al conocimiento
obtenido.
• Muy relacionado con el tamaño (numero
de reglas o nodos en el árbol de decisión)
• A veces merece la pena perder en
porcentaje de aciertos (= subadaptacion)
para ganar en comprensibilidad
(construyendo arboles de decisión mas
pequeños, discretizando atributos, etc.)
Algunos atributos pueden ser redundantes y
hacen más lento el proceso de aprendizaje. Otros
son irrelevantes (como el DNI para predecir si una
persona va a devolver un crédito). En ocasiones el
exceso de atributos puede llevar a
sobreaprendizaje, pues incrementa la
complejidad del modelo (sobre todo si hay pocos
datos). En este ejemplo sencillo podemos deducir
fácilmente algunas reglas que servirán para
determinar si se concede el préstamo a un
determinado cliente o no.
Si la nomina es > 2000 siempre pagan el préstamo. Un hombre soltero, con nomina < 800 euros tiene grandes probabilidades de no devolver un préstamo. 4 Extensiones del data mining
• Web mining: consiste en aplicar las
técnicas de minería de datos a
documentos y servicios del Web. Todos - 99 -
los que visitan un sitio en Internet dejan
huellas digitales (direcciones de IP,
navegador, etc.) que los servidores
automáticamente almacenan en una
bitácora de accesos (Log). Las
herramientas de Web mining analizan y
procesan estos logs para producir
información significativa. Debido a que los
contenidos de Internet consisten en varios
tipos de datos, como texto, imagen, vídeo,
metadatos o hiperligas, investigaciones
recientes usan el término multimedia data
mining (minería de datos multimedia)
como una instancia del Web mining para
tratar ese tipo de datos. Los accesos
totales por dominio, horarios de accesos
más frecuentes y visitas por día, entre
otros datos, son registrados por
herramientas estadísticas que
complementan todo el proceso de análisis
del Web mining.
• Text mining: dado que el ochenta por
ciento de la información de una compañía
está almacenada en forma de
documentos, las técnicas como la
categorización de texto, el procesamiento
de lenguaje natural, la extracción y
recuperación de la información o el
aprendizaje automático, entre otras,
apoyan al text mining (minería de texto).
En ocasiones se confunde el text mining
con la recuperación de la información.
Esta última consiste en la recuperación
automática de documentos relevantes
mediante indexaciones de textos,
clasificación, categorización, etc.
Generalmente se utilizan palabras clave
para encontrar una página relevante. En
cambio, el text mining se refiere a
examinar una colección de documentos y
descubrir información no contenida en
ningún documento individual de la
colección; en otras palabras, trata de
obtener información sin haber partido de
algo.
5 CONCLUSIONES
Nuestra capacidad para almacenar datos ha
crecido en los últimos años a velocidades
exponenciales. En contrapartida, nuestra
capacidad para procesarlos y utilizarlos no ha ido
a la par. Por este motivo, el data mining se
presenta como una tecnología de apoyo para
explorar, analizar, comprender y aplicar el
conocimiento obtenido usando grandes
volúmenes de datos. Descubrir nuevos caminos
que nos ayuden en la identificación de
interesantes estructuras en los datos es una de
las tareas fundamentales en el data mining.
Las herramientas comerciales de data mining que
existen actualmente en el mercado son variadas y
excelentes. Las hay orientadas al estudio del web
o al análisis de documentos o de clientes de
supermercado, mientras que otras son de uso
más general. Su correcta elección depende de la
necesidad de la empresa y de los objetivos a
corto y largo plazo que pretenda alcanzar.
En resumen, el data mining se presenta como
una tecnología emergente, con varias ventajas:
por un lado, resulta un buen punto de encuentro
entre los investigadores y las personas de
negocios; por otro, ahorra grandes cantidades de
dinero a una empresa y abre nuevas
oportunidades de negocios. Además, no hay duda
de que trabajar con esta tecnología implica cuidar
- 100 -
un sinnúmero de detalles debido a que el
producto final involucra "toma de decisiones".
6 REFERENCIAS
[1] “Introducción a la Minería de Datos”
José Hernández Orallo, M.José Ramírez Quintana,
Cèsar Ferri Ramírez
Editorial Pearson, 2004. ISBN: 84 205 4091 9
[2] “Tendencias de la Minería de Datos en
España”
Raúl Giráldez, José C. Riquelme, Jesús S.
Aguilar-Ruiz
Red Española de Minería de Datos TIC2002-
11124-E
.
[3] Baker, R.S.J.d. Data Mining for Education.
Encontrado en McGaw, B., Peterson, P.,
Baker, E. (Eds.) International Encyclopedia of
Education (3rd edition). Oxford, UK: Elsevier
[4] Artículo: “Data mining: torturando a los datos
hasta que confiesen”.
Luis Carlos Molina Felix.
Universitat Politécnica de Catalunya.
- 101 -