¿Es posible crear un programa informático de clasificación simple mediante la lógica de evolución de Darwin? ¿Si es así, cómo?

Sí, este es el campo de los algoritmos evolutivos, un subconjunto del campo de la vida artificial. Los ejemplos principales son los algoritmos genéticos y la programación genética.

Funciona así:
Tiene un problema que desea resolver, en este caso, un algoritmo de clasificación. Desarrolla algún tipo de codificación de soluciones. Por ejemplo, una cadena de números o un árbol de nodos, que de alguna manera representa una solución.

Luego creas una población de ‘soluciones’ aleatorias. Usted prueba cada uno para determinar qué tan bien resuelve el problema. Esto se hace con una función de fitness. Ahora, ha asignado un valor a cada solución de acuerdo con qué tan bien resuelve el problema.

Obviamente, dado que la población inicial era cadenas aleatorias o árboles aleatorios, las soluciones serán muy malas. Pero aquí viene la analogía de la selección natural. Algunas soluciones serán un poco mejores que otras . Selecciona soluciones individuales de la población, al azar, para ser padres, pero la probabilidad de que un individuo sea elegido es proporcional a su aptitud.

Las soluciones seleccionadas se crean, usando algo como un operador cruzado (que básicamente es cortar y pegar de ambos ‘padres’), agregar algunas perturbaciones a la solución (mutación) y repetir hasta que tenga una nueva población (bueno, generación). Ahora pruebe todos estos nuevos individuos contra la función de aptitud física.

Enjuague y repita durante tantas generaciones como sea necesario.
Estadísticamente, la nueva generación se realiza mezclando los datos de lo mejor de la población anterior.

Lo que encontrará es que el estado físico promedio aumenta con el tiempo. Después de muchas generaciones, se habrán encontrado soluciones decentes, si no óptimas.

A veces, estas soluciones descubiertas son formas completamente intuitivas de resolver el problema, pero funcionan. Así es como funciona la evolución. Tiene poblaciones de individuos y elimina a aquellos que son menos aptos para la supervivencia. En el análogo artificial, supervivencia significa “resolver el problema deseado”.

Aquí hay un ejemplo de cómo se puede codificar una ecuación en un árbol:


Aquí hay un ejemplo de cómo criar dos padres para crear hijos que son una mezcla de los dos:


Y aquí hay un gráfico típico que muestra la mejora del estado físico promedio a lo largo de las generaciones:


Tengo un título en algoritmos evolutivos y los he usado mucho para resolver una amplia variedad de tareas, desde la locomoción de robots hasta los oponentes de juegos de IA y la optimización de gráficos.

Básicamente, siempre que pueda encontrar una codificación desde la representación evolutiva hasta la solución, y una función de adecuación adecuada que encapsule qué es una buena solución, puede usar estos algoritmos para encontrar soluciones automáticamente. No garantizan la mejor solución (depende de la tarea y la codificación), pero la mayoría de las veces las soluciones que encuentra son lo suficientemente buenas.

Creo que se refiere a la programación genética, un campo de IA que aplica algoritmos genéticos a los programas de computadora. En la programación genética, el descenso con modificación se aplica a generaciones sucesivas de individuos, donde cada individuo es una representación de un programa de computadora, como un árbol de operaciones. La modificación se refiere a la mutación del programa (por ejemplo, agregar, quitar, reemplazar la estructura) y también potencialmente cruzar dos programas para producir un tercero relacionado (análogo a la reproducción sexual). En cada generación se analizan los programas individuales para determinar su estado físico. Los individuos son seleccionados para reproducirse en proporción a su estado físico. La población a menudo se mantiene en un tamaño fijo, y los programas menos adecuados perecen. Si el objetivo es producir un algoritmo de clasificación, entonces la aptitud podría ser una medida de qué tan bien el programa clasifica algunas series de muestras.

Todo es interesante, pero en gran medida loco para producir algo útil, en mi opinión, porque la evolución de la vida real tiene tamaños de población masivos y miles de millones de generaciones para jugar, con lo que el poder de procesamiento actual no está cerca (y puede que nunca lo esté). Más importante aún, no hay un objetivo único predefinido en la evolución de la vida real. Todas las cosas espectaculares que vemos son las cosas posibles. No vemos lo improbable. Algunos problemas no tienen soluciones accesibles con algoritmos genéticos, por debajo de la fuerza bruta. Una gran cantidad de personalización entra en funciones de acondicionamiento físico para suavizar el algoritmo hacia una solución. Otro problema es que los requisitos del programa a menudo exigen un comportamiento perfecto. Un algoritmo de clasificación que solo se clasifica correctamente el 99% de las veces es insuficiente, sin embargo, ese es el tipo de diseño que un algoritmo genético a menudo alcanzará, con el último 1% a la perfección siendo imposible de obtener porque la solución actual es un óptimo local. Piense en el ojo humano conectado hacia atrás, la evolución no va a arreglar eso. El proceso evolutivo es bueno para encontrar diseños lo suficientemente buenos, no tan bueno para encontrar diseños perfectos.

La estructura primaria de una proteína grande es una cadena lineal de 600 aminoácidos, de los cuales hay veinte. Esto es como un soneto inglés. La probabilidad de obtener un soneto por la selección aleatoria de letras es extremadamente baja. Si todas las computadoras del mundo estuvieran funcionando durante 14 mil millones de años, nunca sucedería. Si toma una frase corta (“ser o no ser”) le tomaría millones de años a una sola computadora obtenerla.

Sin embargo, este modelo no representa con precisión la selección natural. Para modelar la selección natural, debe detener la computadora si parte de la frase es correcta. Además, debe seleccionar al azar palabras del diccionario, no letras, porque las mutaciones se producen en grupos de aminoácidos. Con este modelo millones de años por poco tiempo.

Esto plantea la pregunta de cuánto tiempo le tomaría a una computadora generar un soneto usando este modelo. La respuesta es que ningún cuerpo lo sabe porque a nadie le importa. Ningún cuerpo piensa que la selección natural explica la complejidad de la vida. Mi referencia para esto es
La plausibilidad de la vida: resolver el dilema de Darwin
Esto no fue escrito por defensores de la identificación sino por biólogos convencionales.

Se ha hecho aparentemente:

  • Programación genética y algoritmos de búsqueda
  • Evolucionando un tipo: lecciones en programación genética
  • Página en http://www.time.mk

Escribí un programa para desarrollar algoritmos de clasificación una vez. Terminó con una especie de soluciones extrañas. El más rápido era como un tipo de burbuja, pero también habría un intercambio entre el n y n + tercer elemento en cada iteración. Yendo de memoria aquí, fue hace 10 años.

Esto se conoce como programación genética. Google para: clasificación de programación genética.

Humm … ¿Cómo se escriben miles de pequeños programas de clasificación?

En principio, es posible que un explorador en la noche y en la niebla encuentre la cima de una montaña al pisar N, S, E y W y comparar la altitud de cada escalón. Aunque puede terminar en una cima más baja que la más alta, eso funcionará solo en un entorno adecuado: por ejemplo, ¡no funcionará buscando una plataforma en una llanura!

Para encontrar de esta manera un algoritmo de clasificación, es posible que necesite un poco de algún tipo de diseño inteligente en la primera fase, o un medio evolutivo (comportamientos holomórficos …)

Lanzar código aleatorio (bytes aleatorios) a un procesador o mutar aleatoriamente bytes de buen código no logrará ese objetivo.