Inteligencia Artificial: Imitando a la naturaleza
04/07/2016En el área de computación uno de los temas más investigados es la resolución de problemas combinatorios. Pecando de simplista, podría decir que éstos son los problemas en que el número de posibles soluciones a explorar crece de manera no lineal respecto al tamaño de los datos de entrada. Esto hace que, a la que una cierta instancia del problema alcanza una cierta dimensión, sea imposible revisar todo el espacio de soluciones para decidir cuál es la mejor (dado un cierto criterio de búsqueda).
Aunque lo dicho hasta ahora pueda sonar un poco abstracto, lo cierto es que estamos rodeados de problemas combinatorios: rutas óptimas de vehículos, minimización de impactos medioambientales, diseño de soluciones de todo tipo y tamaño (desde cómo posicionar los componentes en un circuito electrónico hasta cómo organizar sensores y actuadores en una ciudad para hacerla más smart). En todos estos casos, las soluciones proporcionadas se aplican directamente o bien ayudan en la toma de decisiones a los responsables.
Este tipo de problemas se encara desde diferentes disciplinas (e.g. matemáticas, investigación operativa, etc.) pero en este post me centraré en presentar algunos enfoques propuestos por la Computación, y más concretamente, la Inteligencia Artificial, que me parecen especialmente interesantes por el paralelismo con el modo de buscar soluciones que tiene la propia naturaleza. Debido precisamente a esto, hablaremos de algoritmos basados/inspirados en la naturaleza (nature-based/inspired algorithms).
La idea principal detrás de este grupo de algoritmos es: observar cómo funciona la naturaleza ante ciertos «problemas» y simular el proceso para aplicarlo al que queremos resolver nosotros. Seguidamente os introduciré algunas de estas «soluciones» y en futuros posts, iremos revisando cómo funciona cada uno, de manera más profunda:
-Colonias de hormigas (Ant colony optimization – ACO): Posiblemente el caso más claro de construcción de una solución de manera colaborativa sin necesidad de que los individuos que están construyéndola tengan ni mucha información del problema ni una estrategia individual compleja. En este tipo de algoritmo, se «copia» el funcionamiento de las hormigas a la hora de buscar comida e indicar al resto de compañeras si el camino recorrido es el mejor para llegar a dicho objetivo. Para las hormigas, esta estrategia funciona gracias al uso de las feromonas, que permiten ir marcando los caminos recorridos, y que se van evaporando o acumulando dependiendo de si el camino es bueno o no (y por lo tanto, recorrido por más o menos hormigas).
-Algoritmos genéticos (Genetic Algorithms – GA): Este es uno de los algoritmos más utilizados en sus diferentes variantes en computación. La idea principal es la de la evolución de las especies: los individuos capaces de adaptarse siguen y se combinan con otros generando nuevos individuos con características cruzadas. Además, existe la posibilidad de que se den mutaciones, introduciendo cambios aleatorios en el grupo. En este caso, se considera normalmente que un individuo es una solución al problema (de una cierta calidad) y dada una población se va aplicando iterativamente el cruce de individuos, las mutaciones y la supervivencia de los más adaptados para ir construyendo nuevas generaciones y así nuevas soluciones al problema.
-Enjambres de partículas (Particle Swarm Optimization – PSO): Este algoritmo simula un conjunto de particulas que se desplazan conjuntamente pero con comportamientos individuales (e.g. bancos de peces, bandadas de aves, etc). En este caso, las partículas (soluciones) van moviéndose por el espacio de soluciones dependiendo de su posición, velocidad y la calidad de las soluciones encontradas anteriormente. De este modo, tras un cierto tiempo todas las partículas deberían converger hacia una de las soluciones al problema.
-Redes neuronales (Artificial Neural Networks – ANN): Finalmente, esta estrategia intenta imitar la estructura y funcionamiento de un cerebro, en el que las neuronas están interconectadas entre ellas y forman niveles. Cada neurona tiene una serie de características que modelan su comportamiento ante las entradas que le llegan. Con el objeto de aprender para posteriormente ser capaz de tomar decisiones similares, se suele entrenar la red con un conjunto de ejemplos para que las características comentadas vayan adapatando sus valores (o sea, «aprendan»).
En fin, estos son algunos de los algoritmos que se pueden considerar inspirados en la naturaleza. Hay otros, como el Simulated Annealing, Artificial Bee Colony Algorithm, Firefly Algorithm, Social Spider Algorithm, Bat Algorithm, Strawberry Algorithm, Plant Propagation Algorithm, Seed Based Plant Propagation Algorithm, etc.
Así pues, como veis, no siempre que hablamos de Inteligencia Artificial, nos referimos a emular/copiar la inteligencia humana. A veces, hablamos de procesos naturales generales (como la evolución o propagación de las semillas), comportamientos de grupos de animales o plantas (como hormigas, o abejas) o incluso procesos fisico-químicos (como el recocido del acero o la cerámica). Y la verdad, es que son inteligencias que funcionan a veces mejor que la nuestra. 😉