Isi kandungan:

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

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

Video: Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 Langkah
Video: Дэниел Шмахтенбергер: Уничтожат ли нас технологии? 2024, Julai
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 más interesantes de la computación (menurut saya pendapat). Básicamente se toma la idea de evolución de la biología, y a aplica a un algoritmo en una computadora para resolver un problema.

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. Taman Permainan Usamos el Circuit (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 más eficiente de prender sus leds, para obtener la mayor cantidad de luz posue según su sensor de luz. Para lograrlo además debe hacerlo encendiendo la menor cantidad de led posibles. Mengagumkan maximiza la luz, al mismo tiempo que minimiza la cantidad de leds. Acá trataremos de hacerlo con un algoritmo genético.

ADVERTENCIA: Este es un tema untuk estudiantes AVANZADOS

Langkah 1: Bahan

Bahan
Bahan
Bahan
Bahan

Ringkas:

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

Langkah 2: 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 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 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 memanggil la probabilidad conjunta, antara lain:

(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 desir la probabilidad de que el mono escriba "banano", es 1 en 15 milones … muy poco mungkin! Dicho de otro modo, es muy poco probe que un mono escriba la palabra "banano" escribiendo teclas al azar, ah, pero si tuviéramos 15 milones de monos escribiendo, es pose que uno de ellos escriba la palabra "banano". memungkinkan poco kemungkinan, pero tidak mustahil.

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, per para 10 mil mil, P = 0.53, y mientras más grande se n, mss saya 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 konstruktiviti, es decir, busca de forma aleatoria pero manteniendo una buena solución y haciendo modificaciones a veces menguatkan veces pequeñas de ellas. Esa es la manera en que el algoritmo genético funciona, tomando idea del como se genera la variabilidad genética en los seres vivos, e inventando un algoritmo para hacerlo en computadora, con el fin de solucionar un problema. Mengagumkan aunque contiene elementos de azar, también tiene memoria y hace que acad intento de buscar la solución, tanpa laut bebas dari depan.

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

Langkah 3: Evolución Y Definiciones

Evolución Y Definiciones
Evolución Y Definiciones
Evolución Y Definiciones
Evolución Y Definiciones
Evolución Y Definiciones
Evolución Y Definiciones

La evolución

Un algoritmo genético (AG) dan un algoritmo que permite encontrar una solución a problemas diffí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 konsepa que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
  • Variación: Debe haber un mecanismo para introducir variedad. en el AG, indica 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.

Definisi

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

  1. Uno de los primeros pasos es "codificar" el problema, esto quiere decir que debemos tener una representación 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", memujuk tenemos un arreglo con 10 elementos 0 y 1. Así memujuk 101000000 makna que los leds 0 y 2 están encendidos, y el resto apagados. y 0010011010, que los leds 2, 5, 6 y 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 llama un Cromosoma a un elemento en la población. Entonces un cromosoma, no es más que una representació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, terdiri dari tomos dos cromosoma, escoger un punto de cruzamiento, e intercambiar la información entre ambos (ver el diagrama)
  5. Uni función de evaluación o fitness, es criterio que permite evaluar 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

Langkah 4: 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. Penilaian cual es el mejor con la función de "fitness"
  3. Copiar el mejor recombinando con el segundo mejor al resto de la población
  4. Aplicar mutación a toda la población
  5. Repertir a partir de 2

Ejemplo

Como expliqué en las definiciones, una tira (cromosoma) 1000101010, representa los leds encendidos "1" y apagados "0", taman permainan litar en el. Voos a defino nuestra función de "fitness" como:

kecergasan = (lectura de luz) x 0.5 - (número de leds) x 0.5

Notis como restamos el numero de leds en la fórmula, pues queremos la mejor luz con la cantidad menor de leds, mengingatkan anda pada masa yang sama seperti luaran pero con menos leds, seleccionaremos esa.

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

0011100000 kecergasan = 98.5

1011100001 kecergasan = 102.5

1010101011 kecergasan = 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 permit terminar con una nueva población, 1011100001

0011101011

1010100011

Esta nueva población nuevamente evaluamos 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.

Langkah 5: El Código

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

El código lo pueden descargar dan mi GitHub. Tiada voy a explicar los detalles de la librería "cromosome.h", sino nada más el algoritmo genético, como es utilizado en el código prinsipal.

Pengetua Código

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

#tentukan N 20

pop penduduk (N);

El objeto es populasi y lo hemos llamado pop. Esto inmediatamente ctrea una pobación de 20 cromosoma, inicializados con todos ceros. Persediaan awal, 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, crossero primero hacemos:

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.mutateChromosomes (0.05, 1);

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

menilai ();

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 penting

Función de evaluación

El codigo de evaluasi () es:

batal menilai () {

untuk (int i = 0; i <pop.n; i ++) {setPixels (i); // memberi masa LED untuk menghidupkan kelewatan (100); kecergasan (i); }}

Vean que simplemente prendemos los ledsespondientes al cromosoma (eso es lo que hace setPixels ()), y evaluamos su fitness, con la función, kekosongan yang tidak betul (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

Langkah 6: Retos Funcionando Y

Funcionando

En el video se ve como va adaptando de apoco a las diferentes condiciones de luz. Siempre encuentra una buena solución. Si lograste menghendaki semua instruksional, te felicito, los algoritmos genéticos 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. Lihat lebih banyak algoritma para penentu dan lebih baik lagi, anda akan melihatnya, anda mesti melihatnya.

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

Akhir Komentario

El ejemplo utilizado es ilustrativo, y es para fasilitator el uso de la librería. El reto planteado de mejorar la luz con el menor némero de LEDS, es sederhana dan mudah, sangat mustahak dan lebih baik. Sin embargo, si lo vemos desde el punto de vista de seres vivos, la evolución organiza, utiliza algo como un algoritmo genético para búsquedas no lineales, entonces, algo como optimizar la luz, es un problema que en la naturaliza tiene sentido (saya disculpan si saya pujuk espeso!)

Retos

  • Buscar un problema de optimización más complicado con una función de "fitness" dan kompleja
  • Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos kelewatan dari allí metidos)
  • Aplicar a un robot, para que resuelva diferentes situaciones
  • Estudiar meiosis, para aprender sobre mecanismos de evolución
  • Estudiar a fondo los algoritmos genéticos (hay librosomplos en el tema)

Disyorkan: