Ir a Inicio

Hipótesis: Apuntes de una clase sobre Inteligencia Artificial en el que trata el tema de la Vida Artificial.

Estoy haciendo una Maestría en Ingeniería con énfasis en Ingeniería de Sistemas y ahora estamos viendo una cátedra sobre computación inteligente. El tema que trato a continuación es sobre lo visto en el tema de Vida Artificial. En letra normal lo visto en el curso (diapositivas) y en letra cursiva mis comentarios.

1. Comportamiento emergente: Al interactuar entre si entidades similares con comportamiento muy simple, puede surgir un comportamiento mucho mas complejo que no estaba programado en las entidades simples (hormigas, dilemas sociales, etc.)
Por ejemplo cuando las aves emigran logran hacer la característica figura triangular en el aire para minimizar el frenado del aire (una figura aerodinámica), o los cardúmenes que se mueven al unísono. Son comportamientos de grupo, de manada, de enjambre, de colonia. El todo es mas que la suma de las partes. Determinados miembros se especializan o se dedican a una tarea exclusivamente y las otras tareas que requieren para sobrevivir son hechas por otros miembros. El inicio de una simbiosis pero en entes similares.

2. La inteligencia se basa en predecir el futuro, anticiparlo, adaptarse y sobrevivir.
En el libro del "el cerebro y el mito del yo", el autor anota que la capacidad de predecir es de seres con capacidad para desplazarse de su entorno porque deben predecir sus movimientos (por ejemplo, para eludir una roca en el camino) y ese es el inicio de la inteligencia.

3. La Teoría de la Evolución también evoluciona (mas bien se complementa o se amplia).
Charles Darwin (Darwinismo) = Selección del mas apto.
a. Competencia.
b. Lucha (gana el mas fuerte).... ¡¡no!! es el mas apto.
c. Ambiente cruel porque sobrevive el mas fuerte.... ¿ambiente cruel? no siempre, y repito: ¡sobrevive el mas apto!.

NeoDarwinismo = Darwinismo + Teoría de Juegos
a. La competencia sigue existiendo, pero la cooperación es mas importante.
b. Sobreviven los que se apoyan mutuamente entre si y crean nuevas estructuras (como las células eucariota, seres multicelulares, grupos sociales)... es lo que sostengo con la simbiosis y mi hipótesis del macroorganismo
c. El mundo lo fabrica y lo domina el mas inteligente... ¿dominio? déjame dudar un poco, la inteligencia es solo una más de las estrategias de la vida para sobrevivir, pero que sea el fin último, no creo. Si este se vuelve un ambiente muy hostil, dudo que dure mucho el ser humano, en cambio, sobrevivirán las bacterias extremófilas (no inteligentes pero si le sacan provecho a ambientes hostiles)

4. Sistemas evolutivos:
a. Población (conjunto) de entes.
b. Se reproducen (sexual o asexualmente).
c. Con variabilidad (por el cruce sexual o por mutaciones).
d. Sometidos a una presión selectiva (comparten un recurso vital escaso).

5. ¿Por que se necesita variabilidad?
Si todos los entes son iguales, hay estancamiento (¿y el comportamiento emergente?). las teorías evolutivas actuales hablan de equilibrios puntuales (la evolución no es continua sino a saltos). Actualmente estamos en un punto de "estancamiento" (no me lo creo, inclusive la explosión cámbrica requirió millones de años).

6. La humanidad exhibe tres niveles de evolución (¿solo la especie humana? no lo creo).
a. ontogenética (dentro del individuo). La mínima unidad es la neurona. El deposito es el conocimiento.
b. philogenética (el linaje). La mínima unidad son los genes. El deposito es el genoma.
c. sociogenética (la sociedad). La mínima unidad son las ideas. El deposito es la cultua. Los "memes".

7. ADN compuesto de Adenina, Timina, Guanina, Citosina (ATCG). 3 nucleótidos = codon. codón se traduce en aminoácido, aminoácidos son los bloques de las proteínas. Las proteínas se comportan dependiendo de sus estructura 3D y son las que generan al individuo (forma y funcionamiento). Hay codones que son marcas de finalización. La sucesión de codones es un gen.
Al ADN se le llama genotipo, la forma y funcionamiento se le llama fenotipo. Pasar de genotipo a fenotipo se llama expresión.

8. En computación evolutiva hay un solo cromosoma muy largo. No hay expresión. El fenotipo y el genotipo es lo mismo. Un gen produce UNA sola característica en el fenotipo. En biología un gen puede producir varias características del fenotipo o un fenotipo es el resultado de la interacción de varios genes.

9. Los algoritmos determinísticos (los clásicos) son muy eficientes pero poco generalizan y caso contrario, entre mas aleatorio (sea el algoritmo), mas genérico es, pero son poco eficientes. La computación evolutiva trata de ponerse en el medio.

10. Algoritmos genéticos: Búsqueda de óptimos, muy robusto, basado en el concepto de la evolución. Sirven principalmente para problemas numéricos. Búsqueda orientada. Soluciones múltiples. Problemas generales. Aplicaciones: Minimización/Maximización de funciones multidimensionales, descubrimiento de estrategias óptimas en juegos.

11. Diseño de un algoritmo genético
a. Definir un cromosoma (secuencia de símbolos)
    . Cada gen del cromosoma almacena un símbolo
    . Cada gen puede tener varios alelos.
    . Un cromosoma debe representar TODAS las posibles soluciones al problema.
    . La posición de cada gen debe definir alguna característica relevante a la solución.
b. Definir una una función de evaluación (la selección natural).
c. Definir los operadores de reproducción.
d. Definir la forma sobre como los nuevos cromosomas reemplazarán los viejos.
e. Definir la manera de normalizar la función de evaluación para conseguir la función de aptitud. (Esto lo entiendo sobre como evalúo cuantitativamente la adaptación del algoritmo genético dada la función de selección, porque aunque varios organismos pasan la prueba de la selección natural, algunos les va mejor que a otros y a los que les va mejor son los que tienen mayores posibilidades de reproducirse)

12. Funcionamiento de un algoritmo genético
a. Generar una población de N cromosomas al azar (típicamente N=100) Hay que hacer pruebas si una población mas grande que ese valor sería mejor.
b. Evaluar cada cromosoma usando la función de aptitud (deseche los que no pasaron y evalúe a los que si pasaron)
c. Seleccionar un subconjunto de cromosomas dependiendo de su aptitud y pasarlos a la "matting pool" (los mejores pasan a la "sala VIP" para ser reproducidos).
d. Reproducir los cromosomas de la "matting pool" utilizando ciertos operadores (cruzamiento, mutaciones).
e. Reemplazar los viejos cromosomas por los nuevos (usualmente manteniendo constante el número N de cromosomas). (Pero en la naturaleza las especies exitosas tienden a crecer, hay que hacer pruebas). Hay políticas generacionales: Puede ser un reemplazo total de los padres (no muy recomendado) o eliminando los peores padres. Hay políticas de estado estacionario: No hay "matting pool" solo se adiciona un nuevo individuo por selección de unos determinados padres (eso si que es mas cercano a la naturaleza).
f.  Repetir (volver a b.) hasta que se estabilice la solución. (la naturaleza nunca termina).

Detalles de la función de evaluación (fi)
a. Un indicador de lo bueno que es el cromosoma.
b. Debe ser rápido para evaluarse.

Detalles de la función de aptitud (Ui)
a. Es la función de evaluación dividida por el máximo esperado de ella Ui=fi/fmax
b. Hay que normalizarla entre [0,1]

Para seleccionar los cromosomas que pasan a la "matting pool" se tiene en cuenta el resultado de la función de aptitud de cada uno y esto se le aplica una distribución de probabilidad para saber cuales serán los escogidos. Puede ser por:
. Sorteo: Cada puesto de la "matting pool" es rifado (dándole mas probabilidad al mejor). Consume una cantidad K de números aleatorios=tamaño de la piscina.
. Ruleta (la típica distribución empírica)
.
Por Restos: Los mejores entran a la piscina y las vacantes se rifan usando los métodos anteriores.
. Por torneo: Se seleccionan tres cromosomas al azar y se escoge el mejor. Así hasta que complete la piscina. Es el más rápido.

13. Los "peros" de los algoritmos genéticos:
a. NO hay, NI habrá seguridad teórica que el algoritmo genético vaya a converger, ni que llegue a la mejor solución.
b. Al diseñar debe tener en cuenta la completitud (cada solución se puede codificar en el cromosoma), es decir, no se puede dejar nada por fuera, la cerradura (cada cromosoma equivale a una solución), la solución encontrada debe ser viable.
c. Y preferiblemente los cromosomas deben presentar uniformidad (todas las soluciones deben estar representadas por la misma cantidad de cromosomas), localidad (un pequeño cambio al cromosoma solo hace un pequeño cambio al resultado). Lo último si es difícil de lograr sobre todo en la programación genética que estoy desarrollando.
d. Como la solución se codifica en bits, si escoge un tamaño pequeño en la cadena de bits deja por fuera soluciones, si escoge un tamaño grande de la cadena de bits se cuelan soluciones no viables. Resolver esto no es sencillo.
e. Mantener la diversidad (los superpadres que generan hijos que finalmente consumen toda la población), evolución errática en las últimas generaciones (no me ha sucedido en las simulaciones).
f. La epistasis: un gen genera individuos muy buenos pero no tan buenos, pero la selección no logra deshacerse de ese gen.
g. Mínimo local (convergen muy rápido).

14. Como minimizar los problemas de los algoritmos genéticos:
a. Aumentar la población de cromosomas.
b. Mantener la diversidad de los cromosomas.
c. Controlar la presión selectiva.
d. Islas (Charles Darwin lo dedujo)
e. Controlar las edades de los individuos (interesante forma de deshacerse de los superindividuos pero echa por la borda una estrategia de la naturaleza que es la longevidad).
f. Reiniciar todo, salvando los mejores (¿un diluvio y un arca de Noe?)

15. Criterios de terminación: por número de ejecuciones (pésimo), convergido en un porcentaje, si el cambio de una generación a otra esta por debajo de un porcentaje.

16. Típicos parámetros en una simulación con algoritmos genéticos:
a. Población: Entre 50 y 100 cromosomas (yo los llamo entre 50 y 100 organismos)
b. Longitud del cromosoma: Depende del problema.
c. Probabilidad de cruce: 20% a 60% por cromosoma.
d. Probabilidad de mutación: 0.1% a 5% por gen.

17.
Los parámetros anteriores pueden ajustarse con otro algoritmo genético, se codifican en cromosomas esos parámetros e igual se evalúan como cualquier algoritmo genético ¿La función de aptitud? Depende como con esos parámetros les va en las simulaciones de algoritmos genéticos.  (si era un problema que tenía, los parámetros son ajustados por el usuario en el archivo de inicialización, esta es una buena idea pero consume mucho tiempo de computo)

18. Programación Genética
Es la misma que he estado haciendo desde el capitulo 2 solo que Koza su fundador representa los algoritmos como si fuesen árboles (igual que un evaluador de expresiones basados en árboles). La mutación son cambios en las ramas del árbol.

Se deben cumplir las condiciones de suficiencia (cada solución se puede codificar en el cromosoma) y cerradura (cada cromosoma equivale a una solución).

Hay que tener especial cuidado cuando se codifican funciones en el que se debe tener en cuenta el número de parámetros y el tipo de parámetros.

Para Iniciar (recordar que se representan como árboles)
1. "Full" Crear los programas con todo el camino L completo.
2. "Grow" Se crean los programas de tamaño variable.
3. "Ramped half and half" Se define un porcentaje de probabilidad por cada tamaño entre 2 y L (y este es el que da mejor diversidad). Excelente idea para evitar superpadres.

Operadores de reproducción
Cruce: Intercambiar dos sub-arboles al azar entre dos individuos.
Mutación: Eliminar al azar un sub-árbol y reemplazarla con otro.
Permutación: Similar al cruce pero dentro del mismo individuo.
Edición: Eliminar bloques inútiles.
Encapsulación: Cambiar toda una función por otra

Los problemas:
a. Mucho poder de computo.
b. Mucho código basura (intrones)
c. Las funciones primitivas deben estar orientadas a la solución. Si sobran genera código inútil, si faltan se pierden posibilidades de solución. Es como cuando uno toma la decisión de usar funciones como seno, coseno, tangente o solo operaciones básicas.

Para diseñar:
a. Funciones a usar.
b. ¿Uso de bucles?
c. Número de variables internas (y si va a usar arreglos unidimensionales o N-dimensionales).
d. ¿Uso de constantes?

Aplicaciones:
a. Regresión simbólica (lo que vengo haciendo desde el capitulo 2).
b. Predicción de secuencias.
c. Diseño en Ingeniería
d. Estrategia en robots.
e. Diseño de circuitos digitales.
f. Demostración de identidades matemáticas.
g. Comportamiento emergente.
h. Clasificación de datos.
i. Diseño de controladores y automatismos (parquear un camión articulado).
j. Diseño de estrategias óptimas en videojuegos.

19. Evolución Gramatical
Codifican instrucciones en una tupla tipo NTPS (N símbolos no terminales, T símbolos terminales, P conjunto de reglas de producción, S símbolo inicial). Es lo último que estoy haciendo, en el que codifico una instrucción en un número entero.
La teoría de la evolución neutral de Kimura dice que las mutaciones silenciosas (las que afectan a instrucciones no ejecutadas) son las responsables de la gran diversidad genética que hay.

20.
Programación por expresión genética
Es el capítulo 1 donde son ecuaciones representadas por un árbol (el típico evaluador de expresiones) y van ejecutándose de igual manera que un algoritmo genético. Los árboles formados se recorren por niveles y eso da origen a la expresión horizontal del cromosoma.

21. Programación Evolutiva
No hay una codificación fija (como la binaria que tiene que ser cromosoma), sino que se puede codificar dependiendo de como lo necesite el problema (árboles, máquinas de estado finito, etc..). No hay operador de cruce sino de mutación.

22. Estrategias evolutivas
El famoso ejemplo de diseñar un ala de avión utilizando estrategias evolutivas (Schwefel y Bienert en Berlín en 1963). Reproducción con mutación. Estrategias como reemplazo total de los padres o competencia padre vs hijos

23. Sistemas clasificadores
Se basan en puros IF condicionales: IF condicion THEN hagaesto, la condición y el hagaesto son deducidos por evolución, se evalúa cada IF y se recompensa si la acción fue adecuada.

24. Simulated Annealing
Es una meta-heurística para problemas de optimización global, es decir, encontrar una buena aproximación al óptimo global de una función en un espacio de búsqueda grande. El concepto es análogo a calentar un metal y enfriarlo con la esperanza de que en este proceso repetitivo los átomos se acomoden en las posiciones de menor energía, si un átomo queda mal ubicado será fácil de desprender de la lámina por otros átomos por su poca fuerza de cohesión.