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

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.

You might also like

Desarrollo 4 Comments

Modelo Vista Controlador: Cómo implementarlo de forma sencilla y rápida con PHP

Ya hemos hablado en varias ocasiones del Modelo Vista Controlador. En PHP existen frameworks muy completos como Symfony o CakePHP; sin embargo, en este artículo vamos a describir una construcción

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,

Desarrollo 0 Comments

Truco: Actualizar la altura del contenedor de un árbol JSTree

Ya hemos hablado del plugin JSTree en otras ocasiones. Ahora abordarmos un problema muy particular, por lo que no debes seguir leyendo este apunte si no es tu caso (a

Tecnologia & Ciencia 1Comments

Cómo detectar un dispositivo móvil en Django con Mobi

Cuando estamos programando una aplicación web es probable que necesitemos distinguir si el usuario se conecta desde su dispositivo móvil (tablet, smartphone, iphone, etc) o desde un PC. En función

Desarrollo 15 Comments

Django Forms ¿Conviene siempre usarlos?

Los Forms son clases que se definen en pocas lineas y sirven para generar HTML, validar los datos y crear objetos en la BD con muy poco código.

Desarrollo 106 Comments

Eliminar (de verdad) la cola de impresión.

¿A quién no se le ha bloqueado alguna vez la cola de impresión de la impresora?. ¿Nadie levanta la mano?. Ok eso será que no soy la excepción que confirma

Generales 2 Comments

4 razones para usar GIT

Git es un sistema de control de versiones que está enfocado en la flexibilidad para los programadores y provee herramientas para gestión de equipos de desarrollo. En su sitio oficial

Desarrollo 1Comments

Symfonycon o deSymfony Day

Hace años que estoy asistiendo a las jornadas que más o menos, coincidiendo con el final del curso lectivo, se vienen celebrando en distintos puntos de de la geografía española,

Android 0 Comments

La guerra por el mercado de las tablets

La guerra de las tablets se traslada a todos los frentes con la llegada del iPad Mini a este ecosistema y también a las 10 pulgadas donde quiere hablarle de tú a tú a Apple con el lanzamiento del Nexus 10

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