Temas Interesantes de Desarrollo de Software, Parte 1: Inteligencia Artificial

Hace unos meses, me preguntaban por email por algunos temas interesantes de desarrollo de software. La pregunta original estaba más orientada a tecnologías .NET, pero creo que puedo contestar de forma útil, de una manera más general. Igualmente, aparecerán temas de .NET en este post, y otro que seguirá.

Al plantearme escribir sobre el tema, me propuse cubrir varios temas que me interesan, pero vi entonces que si cubría todos en un solo artículo, sería muy largo. Así que va primero esta parte sobre Inteligencia Artificial, y más adelante esta semana, escribiré sobre otros temas que me parecen interesantes, como lenguajes en .NET, Software as a Service, Grid Computing, Generación de Código y Domain Specific Languages.

Trataré hoy algunos temas que me interesan y me llamaron la atención, dentro de lo que se ha llamado Inteligencia Artificial, un término muy amplio, y que cubre hoy varias disciplinas, con distintos objetivos.

Sobre la Inteligencia Artificial

¿Por qué proponer esta área como tema de desarrollo? Porque a la gran parte de los desarrolladores de software, nos fascina. ¿Qué mejor objetivo que conseguir comportamiento inteligente de un sistema de software y hardware? ¿Qué otro tema mueve más que éste en el ámbito de la creación de software? Ha sido desarrollado por décadas, y aún hay temas abiertos. Mas bien, el optimismo inicial que hizo que se denominara a esta rama “Inteligencia Artificial”, se ha ido desvaneciendo, pero también ha habido éxitos, y nuevos caminos que no se habían tomado en principio (recordemos el abandono de los Perceptrones, debido en gran parte a la crítica de Minsky y Papert).

Quiero que quede claro que la inteligencia artificial hoy no es un área homogénea. Ha quedado bajo ese nombre histórico multitud de ramas. Y los métodos para implementar los objetivos planteados, van desde la fuerza bruta, hasta algoritmos novedosos (no naturales), hasta la emulación de lo que sabemos del funcionamiento de organismos naturales (humanos y no humanos).

Algoritmos genéticos

Creo que es un área ya bastante visitada, pero que tiene puntos de contacto con otros temas de este post, como vida artificial y aprendizaje automático. Para investigar:

Genetic Algorithms and Genetic Programming (multitud de enlaces)
What is Genetic Algorithms?
Genetic Programming
Genetic Algorithms
Survival of the Fittest: Natural Selection with Windows Forms (en .NET)
An introduction to Genetic Algorithms In Java
AIAI Technology Genetic Algorithms
Genetic Algorithms and the Traveling Salesman Problem (en C++ para Windows)

Aprendizaje automático

Es un tema fascinante. La implementación de algoritmos que hagan que un sistema de software avance en su capacidad de resolver un problema, es un área alentadora. Muchos organismos aprenden durante su vida lo que no viene innato en su funcionamiento. ¿No podremos conseguir ese tipo de aprendizaje, o algún que lo emule? Esto resolvería el problema de programar todo el comportamiento de un agente inteligente “a priori”, como cableado, y permitiría, bien implementado, adaptarse a un ambiente cambiante. Para estudiar

UCI Machine Learning Group
Machine Learning in Games
Machine Learning (AI on the Web)

Planeación

Uno de los primeros temas que aprendí hace décadas. Y sigue de alguna forma abierto a innovaciones. Es evidente que una de nuestras operaciones mentales es la formación de planes, aún planes parciales, incompletos, con información faltante. Pueden investigar leyendo:

What is Partial-Order Planning?
Review of An introduction to Least Commitment Planning
Selected History of Partial Order Planning, Part 1 (donde aparece Sacerdoti, mi primer referente en el tema)
Selected History of Partial Order Planning, Part 2

(vi que en la Universidad Nacional del Centro de la Provincia de Buenos Aires, acá en Argentina, estuvieron trabajando en estos temas).

Vida Artificial

 Se ha argumentado que, antes de conseguir comportamiento inteligente, hay que conseguir organismos, artificiales. Es una rama algo alejada de la IA principal, y hasta se la considera una rama aparte. A mí me gustaría incluirla en este post.

Siempre me pareció impresionante el proyecto Tierra:

http://www.his.atr.jp/~ray/tierra/index.html

Vean las “fotos” de:

http://www.his.atr.jp/~ray/pubs/images/index.html

Otro proyecto que también investiga el tema evolución es:

Darwin at home el resultado de aplicar Fuidiom
Fluidiom Implementado en Java, sería interesante implementar algo similar en .NET y DirectX/OpenGL

Juegos

Este es un tema para mí interesantísimo. Permite explorar algoritmos en un problema controlado, y aparte divertido. Para tener un panorama de los problemas actuales, hay que visitar el grupo de la Universidad de Alberta:

http://www.cs.ualberta.ca/~games/

Pueden visitar el grupo de Research de Microsoft:

Applied Games

Ahí encontraran uno de mis temas favoritos:

Computer Go in Microsoft

Hay otro grupo de investigación sobre el tema en Beijing:

Craking Go a cargo de Feng-hsiung Hsu

Lenguajes

Hay varias propuestas de lenguajes orientados a la Inteligencia Artificial. Pero que en general también se pueden utilizar en problemas generales. Algo interesante de un lenguaje para IA es que sus programas puedan “autoexaminarse” y modificarse a sí mismos. Revisaría algunas implementaciones en .NET como:

P#: A concurrent Prolog for .NET

Habría que investigar el uso de otros lenguajes, como Lisp y funcionales, como F#.

Ver

AI Programming (Lisp)
AI Programming (Prolog)

Visión por computadora

Una de las operaciones que como organismos ejecutamos fácilmente, ha sido un hueso rudo de roer. Una de las implementaciones más difundidas, de código abierto, accesible desde varios lenguajes (como C++ .NET) es:

Open Computer Vision Library

Más enlaces

Vision in AITopics

Una aplicación, no de visión, pero sí de reconocimiento de imágines

Photosynth

Robótica

Para entender el alcance que puede llegar a tener la aparición de herramientas de desarrollo para robótica, hay que leer el artículo clásico de Bill Gates:

A Robot in Every Home

Pueden estudiar todo lo que ofrece el

Microsoft Robotics Studio

Pueden programar en ambientes simulados, o con robots reales.

Otros enlaces

GRASP Laboratory of Robotics Research and Education @ Penn
Microsoft Invisible Computing
Concious Robots
Robotics Studio at Concious Robots (con algún foro en español)
An introduction to Programming Robots with Microsoft Robotics Studio
Wimo: The Windows Mobile Robot

Recursos adicionales

Si tienen que ir a una sola página, con todo sobre Inteligencia Artificial, ir la página que mantiene Peter Norvig

AI on the Web

Siempre se discute qué es la Inteligencia Artificial:

What is Artificial Intelligence? (John McCarthy)
What is really AI? (discusión en GameDev)
What is Artificial Intelligence?

He dejado mis enlaces favoritos sobre estos y otros temas relacionados en:

http://del.icio.us/ajlopez/artificialintelligence
http://del.icio.us/ajlopez/artificiallife
http://del.icio.us/ajlopez/geneticalgorithm
http://del.icio.us/ajlopez/geneticalgorithms
http://del.icio.us/ajlopez/robotics
http://del.icio.us/ajlopez/computergo
http://www.ajlopez.com/ai

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

This entry was posted in 1389, 3036, 3463. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>