Inhoudsopgave:
- Stap 1: Materialen
- Stap 2: Busqueda Al Azar
- Stap 3: Evolutie en definities
- Stap 4: El Algoritmo
- Stap 5: El Codigo
- Stap 6: Funcionando Y Retos
Video: Kit Ciencia Y Arte: Algoritmo Genetico (Vida Artificial): 6 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Los algoritmos genéticos son probablemente un de las cosas más interesantes de la computación (en mi opinión). Het is gebaseerd op een idee van de evolutie van de biologia, en een toepassing van een algoritme en een computadora voor het oplossen van problemen.
Het algoritmo genético is een 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.
Imagined el CP que es un ser vivo, y que se debe adaptar a las condiciones cambiantes de luz. El CP, de buscar van het forma meer eficiente de prender sus leds, voor de 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
Stap 1: Materialen
Eenvoudig:
- Circuit Playground (o Cualquier Arduino con leds y sensor de luz)
- Baterías
- Kabel USB
- Algo para algemeen luz y sombra para pruebas
Stap 2: 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 respuesta corta es SI!!!
La resuesta s 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 waarschijnlijk! 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 waarschijnlijk, pero niet onmogelijk.
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
Zoals bedoeld in de vorige eeuw, P = 1, in de afgelopen jaren, P = 0,999936, per 10 miljoen millone, P = 0,53, y mientras más grande se n, más me acerco a P = 0, es decir, met een aantal oneindige intenties, 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 un 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
Het is een natuurlijke manier om de busca al azar, pero de manera constructiva, en decir, busca de forma aleatoria pero manteniendo un buena oplossing en haciendo modificaciones a veces fuertes veces pequeñas de ellas. Esa is een manera en que el algoritmo genetico funciona, tomando ideas del como se 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 elementos de azar, también to memoria y hace que acad intento the buscar la solución, no sea independiente del intento anterior.
NOTA: Busquen información sobre el teorema del mono infinito
Stap 3: Evolutie en definities
La evolución
Een algoritmo genético (AG) is een algoritmo que permite die een oplossing biedt voor een probleem als 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 betekent dat er een oplossing is gevonden voor het alcanzado por soluciones anteriores
- Variación: Debe haber un mecanismo para introducir variablead. en el AG, significante que se debe agregar variabilidad de alguna manera para encontrar nuevas soluciones
- Selectie: 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
Er is geen me voy a meter en los details van de evolución de seres vivos, sino que quiero entrar de una vez a la explicación del Algoritmo Genetico.
definities
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.
- U kunt de "codeercode" van de problemen oplossen, die u kunt gebruiken voor de vertegenwoordiging van de problemen die zich voordoen op de weg naar de 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 elementos 0 y 1. Así entonces 101000000 significa que los leds 0 y 2 están encendidos, y el resto apagado's. y 0010011010, que los leds 2, 5, 6 en 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. Kies een lama en een Cromosoma een element in de población. Entonces un cromosoma, no es más que un representació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 arbitrariamente la posición 5 cambia de apagado en encendido
- La recombinación, consistent en tomas dos cromosomas, escoger un punto de cruzamiento, en intercambiar la información entre ambos (ver el diagrama)
- U kunt een beoordelingsfunctie voor fitness hebben, en een beoordelingscriteria die u kunt gebruiken om uw gezondheid te verbeteren. En este caso, voy a trabajar con la intensidad de luz y la cantidad de leds encendidos
Stap 4: El Algoritmo
paso een paso
- Crear una población de muchos cromosomas inicializados al azar
- Evaluar es el mejor con la función de "fitness"
- Kopiar el mejor recombinando con el segundo mejor al resto de la población
- Aplicar mutación a toda la población
- Herhaal een partir de 2
Ejemplo
Como expliqué en las definiciones, una tira (cromosoma) 1000101010, representa los leds encendidos "1" y apagados "0", en el circuit playground. Meer informatie over de functie van "fitness" como:
fitness = (lezing van de luz) x 0,5 - (aantal leds) x 0,5
Noten como restamos el numero de leds en la formula, pues queremos la mejor luz con la cantida menor de leds, entonces si una soluciónes gelijkaardig en luz pero con menos leds, seleccionaremos esa.
Ahora entonces encendemos los leds correspondientes a cada cromosoma y evaluamos su fitness, como se muestra en la figura. Noten como en el ejemplo tenemos:
0011100000 conditie = 98.5
1011100001 fitness = 102,5
1010101011 conditie = 102
Los de fitness meer 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
Er kan nu een nieuwe evaluatie worden gemaakt van fitness en continuïteit. Een medida que llega a una solución óptima, aunque sigue probando, se mantiene hasta que haya cambios en el ambiente.
Stap 5: El Codigo
Download de code om te downloaden op GitHub. Geen 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.
Código opdrachtgever
Meer informatie over de volgende 20 cromosoma's:
#definieer N 20
populatie pop (N);
El objeto es populatie en hemos llamado pop. Inmediatamente ctrea un pobación de 20 cromosomas, inicializados con todos ceros. En el setup, agregamos la linea:
pop.mutateChromosomen(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.mutateChromosomen (0,05, 1);
Y evaluamos con la función de evaluación, que explico más abajo
evalueren();
Luego ordenamos los cromosomas de mayor a menor fitness (usando bubble sort), esto facilita el proceso de recombinación, pop.sort();
Alles wat je moet doen. Ahora veamos la función de evaluación que es importante
Evaluatiefunctie
El code de evaluatie() es:
ongeldig evalueren() {
for (int i = 0; i < pop.n; i++) { setPixels(i); // geeft LED-tijd om vertraging in te schakelen (100); geschiktheid (ik); } }
Vean que simplemente prendemos los leds correspondientes al cromosoma (eso es lo que hace setPixels()), y evaluamos su fitness, con la función, ongeldige fitness(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
Stap 6: Funcionando Y Retos
Funcionando
En el video se ve como va adaptando de apoco a las diferentes condiciones de luz. Siempre encuentra una buena solución. Het is een goed idee om te leren, te felicito, los algoritmos genéticos son un thema difícil en computación, pero eso que lo hace más emocionante.
De alguna heeft een functie van CP met algoritmo, parece casi como un ser vivo explorando las condiciones y evolucionando para mejorar. En este caso están ocurriendo veel 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. Zoek een 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.
Dit is een veelvoorkomend probleem, zoals algoritmo en algo inestable y le va a costar llegar a un situación optima.
Commentaar Finale
El ejemplo utilizado es ilustrativo, y es para facilitar el uso de la librería. Een nieuw planteado de mejorar la luz con el menor número de LEDS, es simple y hasta triviaal, que probablemente se puede solucionar de manera rápida con otros 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 optimalizer la luz, es un problema queido en la natural disc tienule si me puse espeso!)
Retos
- Buscar voor de optimalisatie van meer complicados voor de volledige functie van "fitness"
- Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos delays por 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 libros completos en el tema)
Aanbevolen:
Kit Ciencia Y Arte: Cómo Cargar Código Al Speeltuin - Ajarnpa
Kit Ciencia Y Arte: Cómo Cargar Código Al Speeltuin: Acácute; explicamos como se "sube" el código. EL código de cada proyecto está en cada instructable, sin embargo puede download todo el código en el GitHub
The Artificial Plant Emotion Expressor (A.P.E.X.): 7 stappen (met afbeeldingen)
The Artificial Plant Emotion Expressor (A.P.E.X.): Maar wacht… Er is meer
Kit Ciencia Y Arte: Ordenando Listas (Bubble Sorteren): 4 stappen
Kit Ciencia Y Arte: Ordenando Listas (Bubble Sort): En el mundo de las ciencias de la computación, saber ordernar 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: Maquinas Que Aprenden Sonido - Ajarnpa
Kit Ciencia Y Arte: Máquinas Que Aprenden Sonido: Aprender de inteligencia artificial 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 programación, que por analoga con el cerebro humano, es l
Kit Ciencia Y Arte: Un Makey Makey a Otro Nivel - Ajarnpa
Kit Ciencia Y Arte: Un Makey Makey a Otro Nivel: El Makey Makey es un dispositivo electrónico muy popular en educación, pues con el se pueden hacer rápidamente ejercicios de computación tastbare ejercicios de computación materiële con computadoras.El Makey Makey, no es m