Sisukord:

Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 sammu
Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 sammu

Video: Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 sammu

Video: Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 sammu
Video: REVAN - THE COMPLETE STORY 2024, Juuli
Anonim
Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial)
Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial)

Los algoritmos genéticos son probablemente una de las cosas other interesantes de la computación (en mi opinión). Básicamente se toma la idea de evolución de la biología, y se aplica a un algoritmo en una computadora para solutionver.

El algoritmo genético 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) de Adafruit para 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 more eficiente de prender sus leds, para obtener la Mayt cantidad de luz posible según su sensor de luz. Võimalik, et logid on võimalikud, kuid hacerlo ei saa neid juhtida. Annab maksimumi la luz, al mismo tiempo que minimaliza la cantidad de leds. Accer trataremos de hacerlo con un algoritmo genético.

ADVERTENCIA: Este es un tema para estudiantes AVANZADOS

Samm: materjalid

Materjalid
Materjalid
Materjalid
Materjalid

Lihtne:

  1. Circuit Playground (o Cualquier Arduino con leds and sensor de luz)
  2. Baterías
  3. USB kaabel
  4. Algo para generar luz y sombra para pruebas

2. samm: Búsqueda Al Azar

Búsqueda Al Azar
Búsqueda 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 independentiente 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 respuesta corta es SI !!!

La respuesta larga es que si lo puede hacer pero tomará un tiempo largo para resolverlo. Vamos esto estadí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

Esto es igual a 1 sobre 15 625 000 000, es decir la probabilidad de que el mono escriba "banano", es 1 et 15 millones… muy poco tõenäoline! Dicho de otro modo, es muy poco tõenäoline 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 tõenäoline, aga pole võimatu.

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 intents n veces, entonces, la probabilidad P de no escribir la palabra "banano" en n intosos seria:

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

Nagu näiteks e -näidis ja intento una vez, P = 1, si intento un millón de veces, P = 0,999936, kuid 10 mill 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 kavatsused, 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 construction, es decir, busca de forma aleatoria pero manteniendo una buena solución y haciendo modificaciones a veces fuertes a veces pequeñas de ellas. Essa la manera en que el algoritmo genético funciona, tomando ideas del como se genera la la variabilidad genética en los seres vivos, e leiutis ja algoritm hacerlo en computadora, con el fin de solucionar un problem. Entonces aunque contiene elementos de azar, también tiene memoria y hace que acad intento de buscar la solución, no sea independentiente del intento anterior.

MÄRKUS: Busquen infoción sobre el teorema del mono infinito

3. etapp: Evolución Y Definitionses

Evolución Y Definitionses
Evolución Y Definitionses
Evolución Y Definitionses
Evolución Y Definitionses
Evolución Y Definitionses
Evolución Y Definitionses

La evolución

Un algoritmo genético (AG) on un algoritm que permite encontrar una solución a problems difíciles de resolver. El AG, Darwiniana herencia principales de basa en tres principiales:

  • Herencia: Los hijo reciben las características de sus padres. En el AG tähendus que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
  • Variatsioon: Debe haber un mecanismo para Introducir vaheldusrikas. en el AG, tähendus que se debe agregar variabilidad de alguna manera para encontrar nuevas soluciones
  • Valik: 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 detailides de como funciona la evolución de seres vivos, sino que quiero entrar de una vez a la explicación del Algoritmo Genético.

Määratlused

Selle lihtsa selgitusega algoritm, debemos määratleb algunas cosas antes. Estas definiciones son comunes en cualquier explicación de algoritmo genético que encuentren, y les facilititará entender la literatura en las redes.

  1. Uno de los primeros pasos es "codificar" el problem, esto quiere decir que debemos tener una representation of de problem 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" or apagados "0", entonces tenemos un arreglo con 10 elementos 0 y 1. Así entonces 101000000 signa que los leds 0 y 2 estents encendsos, y el resto apagados. y 0010011010, que los leds 2, 5, 6 y 8 estan 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 laama ja kromosoom a un elemento en la población. Entonces un cromosoma, no es más que una representationción 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 informationción entre ambos (ver el diagrama)
  5. Una función de evaluación o fitness, es un criterio que permite assessmentar 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

4. samm: El Algoritmo

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

paso a paso

  1. Crear una población de muchos cromosomas inicializados al azar
  2. Fitnessi hindamine
  3. Copiar el mejor rekombinando con el segundo mejor al resto de la población
  4. Aplicar mutación a toda la población
  5. Partei repertuaar 2

Ejemplo

Como expliqué en las definiciones, una tira (cromosoma) 1000101010, esindaja los leds encendidos "1" y apagados "0", en el circuit mänguväljak. Vamos on kindel "fitness" como nuestra función:

sobivus = (lectura de luz) x 0,5 - (número de leds) x 0,5

Noten como restamos el number 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 ledsrespondentses a cada cromosoma y hindamos su fitness, como se muestra en la figura. Noten como en el ejemplo tenemos:

0011100000 sobivus = 98,5

1011100001 sobivus = 102,5

1010101011 sobivus = 102

Los de fitness más alto son 102.5 y 102, seleccionamos esos, y hacemos rekombinatsioon 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 hindamos su fitness y así continamos. A medida que llega a una solución óptima, aunque sigue probando, se mantiene hasta que haya cambios en el ambiente.

5. samm: El Código

El Código
El Código
El Código
El Código
El Código
El Código

Laadige alla Codigo lo pueden GitHubis. No voy a explicar los detales de la librería "cromosome.h", siin ei saa teisigi algoritmi genereerida, como es utilizado en el código princip.

Código direktor

El siguiente código crea una población de 20 cromosomas:

#defineeri N 20

populatsioon pop (N);

El objeto es elanikkond y lo hemos llamado pop. Esto inmediatamente ctrea una pobación de 20 cromosomas, inicializados with todos ceros. Seadistamine, kokkulepe:

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 aplicamos 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.mutateCromosomos (0,05, 1);

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

hindama ();

Luego ordenamos los cromosomas de Mayor a menor fitness (usando bubble sort), esto hõlpsa elutööde rekombinatsioon, pop.sort ();

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

Función de evaluación

El codigo de assessment () es:

tühine hindamine () {

jaoks (int i = 0; i <pop.n; i ++) {setPixels (i); // annab LED -ile aeg viivituse sisselülitamiseks (100); sobivus (i); }}

Vean que simplemente prendemos los ledsrespondientes al cromosoma (eso es lo que hace setPixels ()), y fitnessamos, con la función, tühine sobivus (int a) {

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

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

6. toiming: Funcionando Y Retos

Funcionando

En video video se ve como va adaptando de apoco a las diferentes condiciones de luz. Siempre encuentra una buena solución. Kui logite sisse logida, siis on see juhendatav, te olete õnnelik, see on algoritm, mis on genereeritud ja tema teema on keeruline ja arvutuslik, kuid nüüd on see loogiline.

De alguna marea al dejar funcionando el CP con algoritm, parece casi como and 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 situción, y luego dejar estas definides 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 situción optima.

Kommentaariumi finaal

El ejemplo utilizado es ilustrativo, y es para facilititar 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 probablemente se puede solucionar de manera más rápida con otros metétos. Sin embargo, si lo vemos desde el punto de vista de seres vivos, la evolución organisation, utiliza algo como un algoritmo genético para búsquedas no lineales, entonces, algo como optimizar la luz, es un problem que en la naturaliza tiene sentido (me disculpan) ma olen poole espeso!)

Retod

  • Buscar on optimeerimisprobleem, mis komplitseerib "fitness" funktsioone
  • Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos delays por allí metidos)
  • Rakendage robot, para que resuelva different situations
  • Estudiar meioos, para aprender sobre mecanismos de evolución
  • Estudiar a fondo los algoritmos genéticos (hey libros completos en el theme)

Soovitan: