Integrar Motores de Inferencia en Android

Integrar Motores de Inferencia en Android

AI mobileSeguimos hablando de Inteligencia Artificial en dispositivos móviles. En esta ocasión describiremos un enfoque de implementación basado en motores de inferencia y de su posible integración en Android.

La inferencia es una operación lógica realizada por los Sistemas Expertos (SE) para deducir verdades a partir de reglas, casos o métodos bayesianos, estos últimos muy utilizados en la IA de videojuegos.

El SE móvil modela el proceso de razonamiento humano mediante un componente conocido como motor de inferencia. Dicho motor trabaja con la información contenida en una base de conocimientos (modelados y codificados por un experto) y en una base de hechos (contiene los hechos sobre un problema que se ha descubierto durante el análisis) para deducir nuevos hechos.

Motor de inferencia, esquema

¿Pero qué sentido tendría integrar un motor de inferencia en un dispositivo móvil?

Pienso que se mejorarían las capacidades de aprendizaje de ciertos sistemas como los asistentes virtuales inteligentes. Por otro lado hay que tener en cuenta que la mayor parte de los SE móviles actuales basan su funcionamiento en consultas a servidores, por lo que el usuario depende de la conexión a una red de datos. Un motor de inferencia integrado acabaría con esta limitación.

Aunque los lenguajes lógicos como PROLOG y LISP se adaptan mejor a los paradigmas de inteligencia artificial, no son muy flexibles a la hora de desarrollar sistemas  con ciertos requisitos gráficos y de conectividad, como ocurre por ejemplo en los dispositivos móviles. En cambio Java provee una solución multiplataforma y orientada a objetos. Esta aproximación usa a los propios objetos para representar hechos mientras que las reglas se implementan como una conjunción de llamadas a objeto: si las condiciones permiten que un objeto ejecute una regla, se invoca al método correspondiente a dicha regla.

De hecho, los motores de inferencia más usados en la actualidad están basados en Java, como el popular JESS (Java Expert System Shell). Utiliza el algoritmo Rete de reconocimiento de patrones que comparte con su predecesor CLIPS (Sistema de Producción Integrado en Lenguaje C), que fue desarrollado por la NASA en 1990.

JESS es un motor de inferencia basado en reglas que ofrece un conjunto de librerías Java, lo cual “en teoría” lo convierte en un lenguaje fácilmente integrable con Android. Al parecer ya hay gente trabajando en ello y podría estar disponible dentro de unos meses.

Sin embargo JESS no es de código abierto. Como alternativa open source en Java existe JBoss Drools, apoyado por una creciente comunidad y que también se basa en el motor CLIPS. Al igual que JESS, su integración en Android sigue siendo un problema abierto ya que no se han adaptado las librerías de forma oficial.

De todos modos, existe un problema aún mayor a día de hoy: el algoritmo Rete es muy pesado para los limitados recursos computacionales de la mayoría de los dispositivos móviles. Se requiere una versión de Rete ligera que no sería de extrañar fuera incluida oficialmente en próximos lanzamientos de Drools o JESS.

Previous Inteligencia Artificial en Videojuegos móviles
Next How-to: configurar un JSTree sencillo

About author

Angel
Angel 168 posts

Desde que era niño siempre quise ser Inventor. Pensé que convertirme en Ingeniero sería el camino más fácil para lograrlo... No lo es. Pero sin duda es uno de los más interesantes. Actualmente trabajo en Alemania como Ingeniero de Radiofrecuencia/Telecomunicaciones, y de vez en cuando escribo aquí sobre ingeniería. Me gustan los robots y los libros analógicos.

You might also like

Inteligencia Artificial 1Comments

Futuro móvil, retos tecnológicos y Mobile World Congress

A día de hoy el teléfono móvil (léase smartphone, tablet, iPhone, etc) es el dispositivo más extendido en el mundo, y su constante innovación lo convierte en integrador de muchos

Tutorial 1Comments

Aprende VIM con un Adictivo juego de aventuras

Probablemente Vim sea el editor de texto para programadores más potente que existe. Seguro que más de uno se echa las manos a la cabeza con mi afirmación. Si ése es tu caso,

Android 0 Comments

El nuevo Android 4.4 KitKat ya está entre nosotros

Ya está aquí la esperada nueva versión de Android 4.4, con un nombre más que comercial: KitKat y también goloso, porque con las novedades que nos aporta nos endulzará nuestra

Internet 3 Comments

Momento clave en la mensajería instántanea (Line, Spotbros y Whatsapp)

Muchos movimientos en la mensajeria móvil. Line y Spotbros quieren aprovechar la noticia del pago de Whatsapp.

Android 1Comments

Navidades sin Nexus 4

Pésima gestión de Google en la distribución de hardware. La Nexus 4 está agotada y la fecha de vuelta es todavía una incógnita

Desarrollo 1Comments

¿Cómo hacer un Servidor HTTP sencillo?

Si estás desarrollando una aplicación destinada a la gestión de contenidos o al intercambio de información entre usuarios, puede que hayas tenido la necesidad de tener uno o varios servidores

Tecnologia & Ciencia 14 Comments

El problema de desplegar redes ad hoc en Android OS: ¿rootear el dispositivo?

El estándar Wi-Fi (IEEE 802.11) puede operar básicamente en dos modos: Infraestructura (o “managed”), en el que los clientes se conectan a un punto de acceso o router. Ad-hoc, también llamado

Desarrollo 3 Comments

¿Qué es un TPV Virtual y qué le podemos exigir?

Últimamente hemos recibido consultas de algunos empresarios y desarrolladores que desean instalar una plataforma software que les permita iniciar actividades de comercio electrónico. En ese sentido, hay muchísimas soluciones cuya

Tecnologia & Ciencia 4 Comments

[Administra tu Servidor] ¿Cómo hacer copias periódicas en Linux? Utiliza la shell.

Tanto si eres el administrador de un servidor con Linux o simplemente tienes instalada una de sus distribuciones en tu portátil personal, seguro que te ves en la necesidad de

6 Comments

  1. Aiel
    agosto 18, 21:37 Reply

    Hola, la verdad que esta muy buena la página, recientemente la encontré por casualidad, leí varios de tus artículos y para ser sincero algunas no las entiendo ya que no soy un experto en informática pero aún así me resulta interesante e insta a buscar información sobre los artículos que publicas. Me gusta la informática aunque mi incursión y recurso en el tema es algo limitado puesto que hace unos pocos años empecé a leer y aprender.

  2. Miguel
    septiembre 06, 22:28 Reply

    Muy buen articulo me dio algunos datos que desconocía y es de gran interés para mi especialmente que para mi titulación propuse un SE para Android que funcione de manera nativa. Bueno espero tener avances pronto, por lo que aun investigo con que versión de Android debería funcionar de requerimiento mínimo.

    • Angel
      septiembre 07, 13:34 Reply

      Hola Miguel, me alegra que te haya sido de utilidad. Por desgracia hace meses que abandoné esa línea de investigación (que para mí tenía un interés más que nada personal) por otras más urgentes de carácter profesional.

      Sin embargo es un tema que me sigue interesando mucho. Te propongo que colabores con nosotros en esta categoría y nos mantengas informados de tus avances. Escríbeme a angel@borrowbits.com si te gusta mi propuesta.

      En cualquier caso, mucho ánimo con tu proyecto :)

      • Miguel
        septiembre 09, 23:16 Reply

        Muchas gracias por los ánimos y me agrada mucho la idea de colaborar con ustedes estaré enviando mis avances. Por cierto enviare mis avances desde este correo miguelrodlp@gmail.com
        Espero poder ser de ayuda para esta categoría, hasta pronto.

  3. Nicolás
    agosto 28, 17:54 Reply

    Buen artículo! Te dejo una duda: para el desarrollo de un sistema experto móvil – Android – estaría bien concluír según lo que publicaste que la arquitectura más eficiente es Cliente-Servidor? siendo la aplicación cliente una simple interfaz que toma los datos y comunica los resultados?
    Muchas gracias.

    • Angel
      agosto 28, 18:44 Reply

      Hola Nicolás, según lo que investigué en el momento de escribir el post (me jugaría el cuello a que sigue siendo así) el modelo cliente-servidor sería la arquitectura más eficiente. Sin embargo con las mejoras de hardware de los últimos modelos (procesadores de 2 y 4 núcleos) no creo que tardemos mucho en ver motores integrados nativamente en Android. Sólo es un problema de potencia de cálculo.

Leave a Reply