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

Siempre quise ser inventor y escritor. Pero mientras tanto trabajo en Alemania como Ingeniero de Telecomunicaciones, y de vez en cuando escribo aquí sobre Ciencia y Tecnología. Me gustan los robots y los libros (analógicos).

You might also like

Desarrollo 0 Comments

Los lenguajes de programación más utilizados en 2015

Si eres programador, tienes que estar atento siempre a las últimas tendencias y cuáles son los lenguajes de programación más utilizados. En un mundo tan cambiante como el tecnológico, los

Tecnologia & Ciencia 0 Comments

GIT: Guia rápida

¿Qué es GIT? Es un sistema de control de versiones, que nos va a permitir tener un control sobre el código de nuestras aplicaciones mediante revisiones, permitiendo a diferentes programadores

HerramientasPFC 0 Comments

Nueva serie: Herramientas imprescindibles para un proyecto de TIC

La semana pasada empecé por fin a trabajar en mi PFC y he pasado varios días instalando aplicaciones y librerías. Un trabajo nada despreciable y que requiere una buena inversión

Inteligencia Artificial 1Comments

Inteligencia Artificial. ¿Mito o realidad?

¿Hasta dónde puede avanzar la Inteligencia Artificial (IA)?¿Cómo de inteligente puede ser una máquina?¿Pueden ser mejores que nosotros?¿Llegará el momento en el que lo hagan todo las máquinas?¿Pueden rebelarse…? Estas

Internet 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

Android 1Comments

La batalla de las 7 pulgadas

Tratamos en el articulo sobre la llegada al formato de las 7 pulgadas del dispositivo de Apple, el iPadMini. Con esto se suma al Nexus 7 de Google y Kindle Fire de Amazon.

Desarrollo 2 Comments

LEAP: Agentes Inteligentes en dispositivos móviles

En el último artículo hablábamos sobre la problemática de introducir Inteligencia Artificial en dispositivos móviles. Esencialmente se puede utilizar cualquier aproximación válida para sistemas tradicionales, pero teniendo en cuenta la

Cultura 1Comments

DrupalCamp Spain 2014

Este fín de semana la capital del Turia ha acogido a la DrupalCamp Spain 2014, a la cual fuí en calidad de ponente. No puedo dejar pasar la oportunidad de

Desarrollo 1Comments

Filosofía responsive: cómo detectar un cambio de orientación de la pantalla

Puede que el mutable mundo de la programación web no sea tan glamuroso como el  extravagante mundo de la moda. Pero al igual que en éste, también existen tendencias. Y

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