Satura rādītājs:
- 1. darbība: materiāli
- 2. solis: Búsqueda Al Azar
- 3. darbība: Evolución Y Definitionses
- 4. solis: El Algoritmo
- 5. solis: El Código
- 6. darbība: Funcionando Y Retos
Video: Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Los algoritmos genéticos son probablemente una de las cosas más interesantes de la computación (en mi opinión). Básicamente se toma la ideja de evolución de la biología, y se aplica un un algoritmo en una computadora para resolver un problem.
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 más eficiente de prender sus leds, para obtener la mērs 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. Acis trataremos de hacerlo con un algoritmo genético.
REKLĀMA: Este un un tema para estudiantes AVANZADOS
1. darbība: materiāli
Vienkārši:
- Circuit Playground (o cualquier Arduino con leds and sensor de luz)
- Baterija
- Kabelis USB
- Algo para generar luz y sombra para pruebas
2. solis: 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 en 15 millones… muy poco probable! Dicho de otro modo, es muy poco probable 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 iespējams, bet nav neiespējams.
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 nodomi, entonces, la probabilidad P de no escribir la palabra "banano" en n intosos seria:
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, cits me acerco a P = 0, es decir, con un numero infinito de aimos, 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. Esa es 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 inventando un algoritmo para 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.
PIEZĪME: Busquen information of sobre el teorema del mono infinito
3. darbība: Evolución Y Definitionses
La evolución
Un algoritmo genético (AG) ir un algoritmo que permite encontrar una solución a problems 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 nozīmē que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
- Variants: Debe haber un mecanismo para ievada daudzveidīgs. en el AG, signa que se debe agregar variabilidad de alguna manera para encontrar nuevas soluciones
- Atlasīt: Siena 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 detales de como funciona la evolución de seres vivos, sino que quiero entrar de una vez a la explicación del Algoritmo Genético.
Definīcijas
Lai atvieglotu izskaidrojumu algoritmam, debemos definir 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.
- Uno de los primeros pasos es "codificar" el problem, esto quiere decir que debemos tener una representationción de el 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 estenc encendsos, y el resto apagados. y 0010011010, que los leds 2, 5, 6 y 8 están encendidos
- 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 lalama un Cromosoma a un elementento en la población. Entonces un cromosoma, no es cits que una representationción de los LEDS encendidos y apagados del CP
- Una mutación, es cambiar al azar uno o varios LEDS, como se muestra en la foto, donde arbitramenmente la posición 5 cambia de apagado a encendido
- La recombinación, consiste en tomas dos cromosomas, escoger un punto de cruzamiento, e intercambiar la información entre ambos (ver el diagrama)
- 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. solis: El Algoritmo
paso a paso
- Crear una población de muchos cromosomas inicializados al azar
- Izvērtējiet "fitnesa" funkcijas
- Copiar el mejor rekombinando con el segundo mejor al resto de la población
- Aplicar mutación a toda la población
- Partijas repertuārs 2
Ejemplo
Como expliqué en las definiciones, una tira (cromosoma) 1000101010, pārstāvis los leds encendsos "1" y apagados "0", en el circuit circuit. Vamos a definir nuestra función de "fitness" como:
fitness = (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 ledsrespondentes a cada cromosoma y assessmentamos su fitness, como se muestra en la figura. Noten como en el ejemplo tenemos:
0011100000 fitnesa = 98,5
1011100001 fitnesa = 102,5
1010101011 fitnesa = 102
Los de fitness vairāk nekā 102.5 y 102, seleccionamos esos, y hacemos rekombinācija 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 novērtējumi ar fitnesa un nepārtrauktību. A medida que llega a una solución óptima, aunque sigue probando, se mantiene hasta que haya cambios en el ambiente.
5. solis: El Código
El Código lo pueden lejupielādēt GitHub. No voy a explicar los detales de la librería "cromosome.h", sino nada más el algoritmo genético, como es utilizado en el código principa.
Kódigo direktors
El siguiente código crea una población de 20 cromosomas:
#definējiet N 20
populācijas pop (N);
El objeto es iedzīvotāji y lo hemos llamado pop. Esto inmediatamente ctrea una pobación de 20 cromosomas, inicializados con todos ceros. Iestatot, vienojieties:
pop.mutateHromosomas (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.mutateHromosomas (0,05, 1);
Y novērtējums con la función de evaluación, que explico más abajo
novērtēt ();
Luego ordenamos los cromosomas de mērs a menor fitness (usando bubble sort), esto Facility el process de recombinación, pop.sort ();
Viss ir kārtībā. Ahora veamos la función de evaluación que es importante
Función de evaluación
El codigo de assessment () es:
anulēt novērtējumu () {
par (int i = 0; i <pop.n; i ++) {setPixels (i); // dod LED laiku aiztures ieslēgšanai (100); piemērotība (i); }}
Vean que simplemente prendemos los ledsrespondientes al cromosoma (eso es lo que hace setPixels ()), y fitnessamos, con la función, anulēta fiziskā sagatavotība (int a) {
pop.fitness [a] = 0,5 * pludiņš (CircuitPlayground.lightSensor ()) - 0,5 * pludiņš (pop.countBits (a)); }
Almacenamos el valor de fitness de cada cromosoma en pop.fitness
6. darbība: Funcionando Y Retos
Funcionando
En video video ve ve como va adaptando de apoco a las diferentes condiciones de luz. Siempre encuentra una buena solución. Ja jums ir logistisks dalībnieks, tas ir pamācāms, jūs esat apmierināts, jums ir algoritms, kas ir ģenētisks, un viņam ir atšķirīga tēma, lai aprēķinātu, bet tagad es es varu redzēt citu emocionālu.
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 organizmo vivo son mucho más lentas
de cierto modo el algoritmo sirve para encontrar la mejor solución, dadas ciertas condiciones. Se puede korer el algoritmos para determinar lo mejor en cada situció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 situción optima.
Komentāru fināls
El ejemplo utilizado es ilustrativo, y es para facitar 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 organization, 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) si man puse espeso!)
Retos
- Autobuss un optimizācijas problēma vēl vairāk sarežģīs "fitnesa" funkcijas
- Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos delays por allí metidos)
- Aplicar un a robot, para que resuelva diferentes situciones
- Estudiar meiosis, para aprender sobre mecanismos de evolución
- Estudiar a fondo los algoritmos genéticos (hay libros completos en el tema)
Ieteicams:
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 soļi
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: En este Instructable aprenderemos como hacer un dispensador de alimento para sus mascotas, por lo general, o al menos en mi caso siempre he querido hacer un dispensador autom á tico, sin embargo, un perro y un gato. Bet galu galā neviens nav
Kit Ciencia Y Arte: Cómo Cargar Código Al Playground: 4 soļi
Kit Ciencia Y Arte: Cómo Cargar Código Al Playground: Ac á explicamos como se " sube " el c ó digo. EL c ó digo de cada proyecto est á en cada instructable, sin embargo puede descargar todo el c ó digo en el GitHub
Komplekts Ciencia Y Arte: Ordenando Listas (burbuļu kārtošana): 4 soļi
Kit Ciencia Y Arte: Ordenando Listas (Bubble Sort): En el mundo de las ciencias de la computaci ó n, saber ordenar listas es como saber escribir. Es una buena manera de ver como los algoritmos son una manera de hacer las cosas en una computadora, y que la forma directa de hacer algo no es la me
Kit Ciencia Y Arte: Máquinas Que Aprenden Sonido: 4 soļi
Kit Ciencia Y Arte: Máquinas Que Aprenden Sonido: Aprender de inteligencia mākslīgā es mucho m á s f á cil de lo que parece. El primer paso es entender el funcionamiento de una de las unidades m á s simples en programme ó n, que por analog í a con el cerebro humano, es l
Komplekts Ciencia Y Arte: Un Makey Makey un Otro Nivel: 4 soļi (ar attēliem)
Komplekts Ciencia Y Arte: Un Makey Makey un Otro Nivel: El Makey Makey ir vienreizējs elektriskais un aktīvais nico muy populārais un izglītojošais n, pues con el se pueden hacer r á pidamente ejercicios de computaci ó n taustāms un interakcijas ó con computadoras.El Makey Makey, nē es