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 167 posts

<p>Creció viendo McGyver y ya de niño tenía muy claro en qué quería convertirse: inventor. Supuso que estudiar Ingeniería de Telecomunicación sería un buen camino para ello. Emprendedor y aventurero, bajo los circuitos y transistores le late un corazón de escritor.</p>

You might also like

Android 0 Comments

Dood’s Music Streamer

Como se dice a menudo, más vale tarde que nunca. Aunque esta aplicación lleva en el Market desde hace unos meses, hoy la he descubierto y no he visto nada

Android 5 Comments

Aprende Android: crea tu reproductor multimedia con VideoView

¿Estás aprendiendo Android y quieres incluir en tu aplicación un toque multimedia? ¿Quieres tu propio reproductor tanto de vídeos en streaming como de los vídeos almacenados en tu móvil? Android

Google 1Comments

Android Device Manager: la aplicación antirrobo integrada en Android

¡Aleluya! ¡Nuestras plegarias han sido escuchadas! No exagero, una plataforma como Android no se podía permitir una carencia de este tipo durante tanto tiempo. Como usuario de Android, veía con

HerramientasPFC 0 Comments

¿Que procesador de textos utilizar en tu tesis, PFC o TFM?

A la hora de redactar mi proyecto fin de carrera me sobrevino una duda existencial, ¿qué uso para redactarlo? Ms Word? OpenOffice? LaTeX?. Mucho donde elegir y ninguna idea para

Desarrollo 0 Comments

12 trucos para diseñar el Formulario Perfecto

El formulario es un elemento fundamental para generar una buena conversión. De su buen diseño depende que un usuario no lo abandone antes de tiempo o que ni siquiera se

Internet 1Comments

Cambiando el concepto de buscador web: Wolfram Alpha, el generador de respuestas

Estamos acostumbrados a que los buscadores de Internet (como Google, Bing, Yahoo!, etc.) al escribir una consulta nos den como respuesta un listado de páginas en las que aparece un

Entrevista 1Comments

[Entrevista] Conocemos al equipo de Spotbros

En artículos anteriores hablamos en profundidad sobre Spotbros, una aplicación española que se presenta como una alternativa a las aplicaciones de mensajería instantánea presentes en el mercado ofreciéndonos mucho más

Desarrollo 2 Comments

21 Formas de hacer tu web insegura: #1 – No valides formularios en el servidor

La seguridad es uno de los aspectos mas importantes a la hora de desarrollar una web. ¿O a alguien le gustaría que un usuario malintencionado pudiera aprovecharse de ciertas vulnerabilidades

Internet 3 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