Programación declarativa y robótica inteligente: aún en pañales

Leía ayer el caso de BrainOS (EN), desarrollado por la startup Brain Corporation, y enfocado a su uso en robótica, con el fin de que sea el mismo robot el que, a base de prueba y error, aprenda.

inteligencia-declarativa

Lo interesante del proyecto es precisamente eso. Que el robot que lo utilice partirá de un estado de total desconocimiento, frente a la estrategia habitual de programarlo para la realización de una o varias tareas, y tendrá que buscarse la vida para dar con el camino adecuado.

La idea no es nueva, y lleva ya años aplicándose a muchos campos, siendo sin duda el de la robótica y los automatismos el que más expectación ha causado.

Otro caso semejante lo veía la semana pasada con Kiva (EN), una empresa que diseña robots con fines normalmente industriales que son capaces de comunicarse entre sí, partiendo de una información inicial por parte de un operador humano (como puede ser la definición del problema, es decir, quiero estas cajas en la otra punta de la nave), y que funcionan, al igual que los de Brain Corporation, aprendiendo los unos de los otros hasta que encuentran la solución más óptima.

Lo curioso del caso es que para algunas tareas, y cuando la información que son capaces de obtener es insuficiente, los robots se bloquean, como esperando a que la respuesta llegue, lo que ha llevado a los arquitectos del software a plantearse una interacción más directa con el humano que les permita comunicar sus dudas directamente de una forma intuitiva y sencilla.

Todos estos proyectos beben de la misma fuente, la de la programación declarativa. Un paradigma de computación en el que se definen los objetivos y es el sistema el que debe hallar la sucesión de tareas para afrontarlo. Para ello, se recurren a abstracciones matemáticas que permitan expresar y abarcar de un modo declarativo las casi infinitas situaciones físicas con las que se podrían encontrar.

Realizar este tipo de sistemas es verdaderamente complejo, y lo es porque estamos acostumbrados a trabajar de forma imperativa (marcándonos tarea tras tarea hasta la consecución de un objetivo). Fijar un entorno en el que puedan florecer las tareas sin llegar a definirlas requiere de un estudio y diseño inicial que no está a priori en nuestro ADN (somos animales de acción).

Mi experiencia con lenguajes declarativos es más bien vaga. He tocado por encima Maude, un lenguaje declarativo matemático, y creo que me he pasado la mayor parte del tiempo tirando líneas sin saber muy bien las connotaciones de lo que estaba realizando (:D). También he afrontado proyectos donde la inteligencia se distribuía en módulos y venía definida por un conjunto de reglas que marcaban el ciclo de acción de uno u otro componente, y otros basados en el potencial de una nube M2M que permitiera delegar la función de cálculo en servidores externos. Pero incluso para aquellos que llevan años y años trabajando con lenguajes declarativos, los logros llegan de poco en poco, teniendo paciencia y en muchos casos, gracias a un ¡eureka! a cualquier hora de la madrugada.

Creo que en los dos casos arriba mencionados podemos observar las limitaciones de un sistema inteligente artificial. Por muy declarativo que lo hagamos, en el propio desarrollo del lenguaje que utilizamos estamos limitando el funcionamiento del sistema. Lo hacemos porque somos humanos, y porque la tecnología está, como decía en el título, aún en pañales. No únicamente por sí misma, sino por las inmensas ramificaciones de las que depende (psicología, medicina, industrialización, locomoción, miniaturización, informática binaria, redes neuronales, educación, computación en la nube,…).

Podemos observar como nos resulta aún imposible afrontar retos tan complejos como definir (sin definir) un ecosistema realista, lo que lleva a estas máquinas a sentarse de brazos cruzados y esperar más información. Eso obviando las numerosas situaciones en las que el sistema, profundamente objetivo, sea incapaz de decidir moralmente la acción que debe llevar a cabo (por ejemplo, ese coche inteligente que debe decidir entre matar a su dueño o a una familia que viene en otro coche justo en dirección contraria).

Aquí es cuando las cosas se ponen duras. Quizás en estos casos, la estrategia de delegar decisión en el humano sea la correcta, pero entonces, hasta qué punto podemos fiarnos de un sistema que es incapaz de afrontar retos complejos. Y peor aún, ¿cómo realizaremos esa delegación de responsabilidad cuando la acción requiere una decisión instantánea?

Eso, o rendirnos a una realidad aplastante, y aprovechar todo el potencial que está en nuestros días al alcance para enfocar la inteligencia artificial en pequeños nichos, como puede ser la ayuda en la toma de decisiones empresariales o la curación informativa, dejando al César lo que es del César, y a nosotros lo que aún no sabemos compartir (programáticamente hablando, me refiero).