Sommario:

Kit Scienza e Arte: Algoritmo Genetico (Vida Artificial): 6 Step
Kit Scienza e Arte: Algoritmo Genetico (Vida Artificial): 6 Step

Video: Kit Scienza e Arte: Algoritmo Genetico (Vida Artificial): 6 Step

Video: Kit Scienza e Arte: Algoritmo Genetico (Vida Artificial): 6 Step
Video: Луис Элизондо: У правительства есть биологические образцы НЛО [Часть 2] 2024, Luglio
Anonim
Kit Scienza e Arte: Algoritmo Genetico (Vida Artificial)
Kit Scienza e Arte: Algoritmo Genetico (Vida Artificial)

Los algoritmos geneticos son probabilmente una de las cosas más interesantes de la computación (en mi opinión). Fondamentalmente se toma la idea de evolución de la biología, y se aplica a un algoritmo en una computadora para resolver un problema.

El algoritmo genetico es parte de lo que se conoce como algoritmos evolutivos en el mundo de las ciencias de la computación. Acá hacemos un ejemplo sencillo, con el fin de aprender sobre el algoritmo. Usamos el Circuit Playground (CP) di Adafruit per hacer el ejercicio.

Imaginen el CP que es un ser vivo, y que se debe Adaptar a las condiciones cambiantes de luz. El CP, debe buscar la forma más eficiente de prender sus leds, para obtener la mayor cantidad de luz posible según su sensor de luz. Para lograrlo además debe hacerlo encendiendo la menor cantidad de leds posibles. Entonces maximiza la luz, al mismo tiempo que minimiza la cantidad de leds. Acá trataremos de hacerlo con un algoritmo genetico.

ADVERTENCIA: Este es un tema para estudiantes AVANZADOS

Passaggio 1: materiale

materiali
materiali
materiali
materiali

Semplice:

  1. Circuit Playground (o come Arduino con led e sensore di luce)
  2. batterie
  3. Cavo USB
  4. Algo para generar luz y sombra para pruebas

Fase 2: Búsqueda Al Azar

Busqueda Al Azar
Busqueda Al Azar

Imaginemos un mono, apretando letras en el teclado de una computadora, el mono simplemente presiona las letras al azar. Si hay unas 50 letras en el teclado, cada letra (si el mono presiona de manera independiente cada vez), tiene una probabilidad de 1/50 = 0.02 de ser presionada.

Ahora bien, digamos que queremos que el mono escriba la palabra "banano", ¿Podrá el mono escribir la palabra? La risposta corta es SI!!!

La respuesta larga es que si lo puede hacer pero tomará un tiempo largo para resolverlo. Vamos è stadísticamente. La probabilidad de que el mono escriba "banano" es entonces la probabilidad conjunta, esto es:

(1/50) x (1/50) x (1/50) x (1/50) x (1/50) x (1/50) = (1/50)^6

Questo es igual a 1 sobre 15 625 000 000, es decir la probabilidad de que el mono escriba "banano", es 1 en 15 millones… molto poco probabile! Dicho de otro modo, es muy poco probabile que un mono escriba la palabra "banano" escribiendo teclas al azar, ah, pero si tuviéramos 15 millones de monos escribiendo, es posible que uno de ellos escriba la palabra "banano". entonces poco probabile, pero non impossibile.

Formalicemos esta idea un poco. SI (1/50)^6 es la probabilidad de escribir "banano", entonces, 1-(1/50)^6 es la probabilidad de NO escribirlo. Si un mono intenta n veces, entonces, la probabilidad P de no escribir la palabra "banano" en n intentos sería:

P =[1-(1/50)^6]^ n

Así por ejemplo si intento una vez, P = 1, si intento un millón de veces, P = 0.999936, pero para 10 mil millones, P = 0.53, y mientras más grande se n, más me acerco a P = 0, es decir, con un numero infinito de intentos, puedo estar seguro de que el mono va a escribir la palabra "banano".

Lo que sí, no tenemos tiempo infinito, es decir se puede buscar una solución al azar, pero, el azar solo tardaría mucho tiempo. En pocas palabras, la fuerza bruta no es una forma efectiva de buscar una solución

Lo maravilloso es que la naturaleza busca al azar, pero de manera constructiva, es decir, busca de forma aleatoria pero manteniendo una buena solución y haciendo modificaciones a veces fuertes a veces pequeñas de ellas. Esa es la manera en que el algoritmo genetico funciona, tomando ideas del como se genera la variabilidad genetica en los seres vivos, e inventando un algoritmo para hacerlo en computadora, con el fin de solucionar un problema. Entonces aunque contiene elementi de azar, también tiene memoria y hace que acad intento de buscar la solución, no sea independiente del intento anterior.

NOTA: Busquen información sobre el teorema del mono infinito

Fase 3: Evoluzione e Definizioni

Evoluzione e definizione
Evoluzione e definizione
Evoluzione e definizione
Evoluzione e definizione
Evoluzione e definizione
Evoluzione e definizione

L'evoluzione

Un algoritmo genetico (AG) es un algoritmo que permite encontrar una solución a problemas difíciles de resolver. El AG, se basa en tres principios principales de herencia Darwiniana:

  • Herencia: Los hijo reciben las características de sus padres. En el AG significa que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
  • Variazione: Debe haber un mecanismo para introducir variead. en el AG, significa que se debe agregar variabilidad de alguna manera para encontrar nuevas soluciones
  • Selección: Hay un mecanismo en la cual se seleccionan los mejores. En el AG, hay una función de "fitness" que permite determinar cual solución es mejor

Acá no me voy a meter en los detalles de como funciona la evolución de seres vivos, sino que quiero entrar de una vez a la explicación del Algoritmo Genético.

Definizioni

Para poder facilitar explicar el algoritmo, debemos definir algunas cosas antes. Estas definiciones son comunes en cualquier explicación de algoritmo genetico que encuentren, y les facilitará entender la literatura en las redes.

  1. Uno de los primeros pasos es "codificar" el problema, esto quiere decir que debemos tener una rappresentanza de el problema para poder trabajarlo en el CP. Acá lo hacemos de manera sencilla. Como se muestra en a foto, tenemos 10 LEDS que pueden estar encendidos "1" o apagados "0", entonces tenemos un arreglo con 10 elementi 0 e 1. Así entonces 101000000 significa que los leds 0 y 2 están encendidos, y el resto apagati. y 0010011010, que los leds 2, 5, 6 e 8 están encendidos
  2. Una Población es un conjunto de posibles combinaciones de leds encendidos (ver la imagen de población), estas pueden ser iguales o diferentes. Se le llama un Cromosoma a un elemento en la población. Entonces un cromosoma, no es más que una rappresentanza de los LEDS encendidos y apagados del CP
  3. Una mutación, es cambiar al azar uno o varios LEDS, como se muestra en la foto, donde arbitrariamente la posición 5 cambia de apagado a encendido
  4. La recombinación, consiste en tomas dos cromosomas, escoger un punto de cruzamiento, e intercambiar la información entre ambos (ver el diagrama)
  5. Una funzione di valutazione del fitness, es un criterio che permette di valutare que tan buenos son cada uno de los cromosomas de la población para seleccionar el mejor. En este caso, voy a trabajar con la intensidad de de luz y la cantidad de leds encendidos

Passaggio 4: El Algoritmo

El Algoritmo
El Algoritmo
El Algoritmo
El Algoritmo
El Algoritmo
El Algoritmo

passo a passo

  1. Crear una población de muchos cromosomas inicializados al azar
  2. Valutare come es el mejor con la funzione di "fitness"
  3. Copiare el mejor recombinando con el segundo mejor al resto de la población
  4. Applicar mutación a toda la población
  5. Repertir a partir de 2

esempio

Come spiegato in las definizioni, una tira (cromosoma) 1000101010, rappresenta i leds encendidos "1" e apagados "0", nel parco giochi del circuito. Vamos a definir nuestra función de "fitness" come:

fitness = (lettura di luce) x 0,5 - (numero di led) x 0,5

Noten como restamos el numero de leds en la fórmula, pues queremos la mejor luz con la cantidad menor de leds, entonces si una solución es similar en luz pero con menos leds, seleccionaremos esa.

Ahora entonces encendemos los leds interactientes a cada cromosoma y evaluamos su fitness, como se muestra en la figura. Noten como en el ejemplo tenemos:

0011100000 forma fisica = 98.5

1011100001 forma fisica = 102,5

1010101011 forma fisica = 102

Los de fitness más alto son 102.5 y 102, seleccionamos esos, y hacemos recombinación y mutación como se muestra en la imagen, lo que nos permite terminar con una nueva población, 1011100001

0011101011

1010100011

Esta nueva población nuevamente evaluamos su fitness y así continuamos. A medida que llega a una solución óptima, aunque sigue probando, se mantiene hasta que haya cambios en el ambiente.

Fase 5: El Codigo

El Codigo
El Codigo
El Codigo
El Codigo
El Codigo
El Codigo

El código lo pueden descargar en mi GitHub. No voy a explicar los detalles de la librería "cromosome.h", sino nada más el algoritmo genetico, como es utilizado en el código principal.

Codice principale

Il codice seguente crea una raccolta di 20 cromosomi:

#definire N 20

popolazione pop(N);

El objeto es popolazione y lo hemos llamado pop. Esto immediatamente ctrea una pobación de 20 cromosomas, inicializados con todos ceros. En el setup, agregamos la línea:

pop.mutateChromosomes(0.5, 0);

Para cambiar aleatoriamente cada cromosoma con una probabilidad de 0.5, iniciando desde el cromosoma 0. En el loop tenemos el algortimo, primero hacemos crossover:

pop.copyCrossover(2);

Luego applica mutación con una probabilidad baja (0.05), e iniciando del cromosoma 1 para mantener el mejor que hemos obtenido en la población (el cromosoma 0 es el mejor)

pop.mutateChromosomes(0.05, 1);

Y evaluamos con la función de evaluación, que explico más abajo

valutare();

Luego ordenamos los cromosomas de mayor a menor fitness (usando bubble sort), esto facilita el proceso de recombinación, pop.sort();

Allí está todo. Ahora veamos la función de evaluación que es importante

Funzione di valutazione

Il codice di valutazione() es:

void valuta() {

for (int i = 0; i < pop.n; i++) { setPixels(i); //dà il tempo al LED di accendere il delay(100); idoneità(i); } }

Vean que simplemente prendemos los leds interactientes al cromosoma (eso es lo que hace setPixels()), y evaluamos su fitness, con la función, idoneità nulla (int a) {

pop.fitness[a] = 0,5 * float(CircuitPlayground.lightSensor()) - 0,5 * float(pop.countBits(a)); }

Almacenamos el valor de fitness de cada cromosoma en pop.fitness

Passaggio 6: funzionamento e ripristino

Funzionando

En el video se ve como va adaptando de apoco a las diferentes condiciones de luz. Siempre encuentra una buena solución. Si lograste entender este instructable, te felicito, los algoritmos geneticos son un tema difícil en computación, pero eso es lo que lo hace más emocionante.

De alguna marea al dejar funcionando el CP con el algoritmo, parece casi como un ser vivo explorando las condiciones y evolucionando para mejorar. En este caso están ocurriendo muchas iteraciones de eovlución en poco tiempo, para un organismo vivo son mucho más lentas

de cierto modo el algoritmo sirve para encontrar la mejor solución, dadas ciertas condiciones. Se puede correr el algoritmos para determinar lo mejor en cada situación, y luego dejar estas definidas en el CP, pero en este ejemplo dejamos que el algoritmo siempre esté explorando.

Si se dejan muchas mutaciones, verán como el algoritmo es algo inestable y le va a costar llegar a una situación optima.

Commento Finale

El ejemplo utilizado es ilustrativo, y es para facilitar el uso de la librería. El reto planteado de mejorar la luz con el menor número de LEDS, es simple y hasta trivial, que probabilmente se puede solucionar de manera más rápida con altri métodos. Sin embargo, si lo vemos desde el punto de vista de seres vivos, la evolución organiza, utiliza algo como un algoritmo genetico para búsquedas no lineales, entonces, algo como optimizar la luz, es un problema que en la naturaliza tiene sentido (me disculpan si me puse espeso!)

Retos

  • Trova un problema di ottimizzazione più complicato con una funzione di "fitness" più completo
  • Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos delays por allí metidos)
  • Applica un robot, para que resuelva diverse situazioni
  • Estudiar meiosis, para aprender sobre mecanismos de evolución
  • Estudiar a fondo los algoritmos geneticos (hay libros completos en el tema)

Consigliato: