jueves, 27 de diciembre de 2012

Algoritmos Geneticos



Pocos saben que la controvertida teoría de la evolución tiene aplicaciones reales en las actividades humanas, si así es ni mas ni menos. En la ciencia de la Informática, se han estado aplicando las bases teóricas de la evolución para resolver problemas tan complejos que dejan sencillamente pasmados a sus diseñadores, aproximadamente desde los 70's.


Esta antena (imagen a la derecha) de aspecto extraño es producto de un AG y funciona a la perfección en el ambiente al que fue destinado, fue "creada" por Altshuler y Linden en 1997 y supero los diseños de los ingenieros.

 El objetivo de este post no es discutir si es o no valida la teoría de la evolución, lo que es un echo contundente es que se le aplica a la vida real, con resultados que dejan sin palabras a cualquier persona, sin mas vamos al grano.

 Un algoritmo genético se trata de una serie de pasos para resolver un problema, pero usando los postulados de la evolución que a groso modo, se trata de lo siguiente:

 Primero obtener una forma de codificar (material genético) las características de la solución (individuo) con el objetivo al mismo tiempo de que este pueda heredar sus características (genes) a las próximas generaciones, echo esto se inicia el algoritmo:

 Primero obtener una población inicial ya sea de soluciones que se sabe funcionan y/o una generada aleatoriamente, por lo regular se usa la segunda opción.

 Segundo se fija una condición de termino, en donde se evalúan las soluciones para ello una función llamada de aptitud se encarga de ver que tan buenas son las soluciones. El algoritmo genético se deberá detener cuando se alcance la solución óptima, pero ésta generalmente se desconoce, por lo que se deben utilizar otros criterios de detención. Normalmente se usan dos criterios: correr el AG un número máximo de iteraciones (generaciones) o detenerlo cuando no haya cambios en la población.

 Tercero mientras tanto selecciona aquellos que resultaron las soluciones mas "buenas" después de ser evaluadas.

 Cuarto se hace un cruzamiento de los individuos seleccionados.

 Quinto se induce una mutación aleatoria en el momento de su cruzamiento.

 Sexto se reemplaza la generación anterior y se vuelve al segundo paso.

 Los algoritmos genéticos básicamente son buscadores de soluciones, solo que son capaces de generar las mismas y de forma múltiple (con muchas posibles soluciones).

 Y para muestra un botón, citare textualmente incluso con faltas ortográficas XD de la siguiente fuente http://the-geek.org/docs/algen/


"Keane y Brown 1996[43] utilizadon un AG para producir un nuevo diseño para un brazo o jirafa para transportar carga que pudiese montarse en órbita y utilizarse con satélites, estaciones espaciales y otros proyectos de construcción aeroespacial. El resultado, una estructura retorcida con aspecto orgánico que se ha comparado con un fémur humano, no utiliza más material que el diseño de brazo estándar, pero es ligera, fuerte y muy superior a la hora de amortiguar las vibraciones perjudiciales, como confirmaron las pruebas reales del producto final. Y sin embargo ``Ninguna inteligencia produjo los diseños. Simplemente evolucionaron'' (Petit 1998[43]). Los autores del artículo comentan además que su AG sólo se ejecutó durante 10 generaciones, debido a la naturaleza computacionalmente costosa de la simulación, y la población no se había estancado todavía. Haber proseguido la ejecución durante más generaciones habría producido indudablemente mayores mejoras de rendimiento."

 Y las aplicaciones son innumerables, en el mismo sitio que mencione se pueden ver una gran cantidad de ellas, creo que cualquier programador debería acercarse a esta técnica salida de las investigaciones en el campo de la inteligencia artificial, y podría sacarle mucho jugo. Yo todavía no encuentro donde podría ser aplicado en mi trabajo XD

 Saludos y hasta la próxima.

No hay comentarios.:

Publicar un comentario