Πίνακας περιεχομένων:
- Βήμα 1: Υλικά
- Βήμα 2: Búsqueda Al Azar
- Βήμα 3: Εξέλιξη Ορισμών
- Βήμα 4: El Algoritmo
- Βήμα 5: El Código
- Βήμα 6: Funcionando Y Retos
Βίντεο: Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
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 idea de evolución de la biología, y se aplica a un algoritmo en una compaadadora για την επίλυση ενός προβλήματος.
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 debebe adaptar a las condiciones cambiantes de luz. El CP, για να αποκτήσετε τη δυνατότητα να προωθήσετε τη χρήση των οδηγιών, μπορείτε να επιλέξετε τον αισθητήρα του luz από τον δήμαρχο. Para lograrlo además debe hacerlo encendiendo la menor cantidad de leds posibles. Εισάγει τη μέγιστη δυνατή τιμή, αλλά δεν μπορεί να οδηγήσει στο ελάχιστο. Acá trataremos de hacerlo con un algoritmo genético.
ADVERTENCIA: Este es un tema para estudiantes AVANZADOS
Βήμα 1: Υλικά
Απλός:
- Circuit Playground (o cualquier Arduino con leds y sensor de luz)
- Μπατεριάς
- Καλώδιο USB
- Algo para generar luz y sombra para pruebas
Βήμα 2: 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 resolutionverlo. 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
Πρώτα απ 'όλα, 15 625 000 000, είναι πιθανό να γράψετε "μπανάνο", 1 1 και 15 χιλιοστά… πολύ πιθανό! Dicho de otro modo, es muy poco πιθανολογείται 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". ενθουσιάζει πόκο πιθανό, αλλά όχι αδύνατο.
Formalicemos esta ιδέα 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 purposea n veces, entonces, la probabilidad P de no escribir la palabra "banano" en n purposeos sería:
P = [1- (1/50)^ 6]^ n
Así por ejemplo si purposeo una vez, P = 1, si purposeo 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 purposeos, 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 genético funciona, tomando ideas del como se genera la variabilidad genética en los seres vivos, και inventando un algoritmo para hacerlo en computadora, con el fin de solucionar un problema. Εισάγει ένα απλό στοιχείο της αζάρας, έχει ανακαλυφθεί από τη μνήμη και έχει προηγηθεί μια λύση, δεν υπάρχει ανεξάρτητη προτεραιότητα στη θάλασσα.
ΣΗΜΕΙΩΣΗ: Ενημερωθείτε σχετικά με το teorema del mono infinito
Βήμα 3: Εξέλιξη Ορισμών
La evolución
Un algoritmo genético (AG) είναι ένα algoritmo που επιτρέπει την έγκριση ενός προβλήματος που αντιμετωπίζει τις δυσκολίες επίλυσης. El AG, se basa en tres principios principales de herencia Darwiniana:
- Herencia: Los hijo reciben las características de sus padres. En el AG indica que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
- Παραλλαγή: 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.
Ορισμοί
Για την διευκόλυνση της εξήγησης του άλλουριτμο, του ορισμού των αλγόριθμων των συνόρων. Καθορίζει τις γνώσεις των συνολικών εξελίξεων που αφορούν το γενικότερο περιβάλλον που μπορεί να διευκολύνει τη λογοτεχνία και τις εκδόσεις.
- Uno de los primeros pasos es "codificar" el problema, esto quiere decir que debemos tener una αντιπροσωπεία του 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 elementos 0 y 1. Así entonces 101000000 σημαινει 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
- 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. Ενσωματώνεται με το cromosoma, no es más que una წარმომადგენση των 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 a encendido
- Επανασυνδυασμός, συνίσταται στο tomas dos cromosomas, escoger un punto de cruzamiento, και intercambiar la información entre ambos (ver el diagrama)
- Μια αξιολόγηση της φυσικής κατάστασης, είναι ένα κριτήριο που επιτρέπει την αξιολόγηση της κατάστασης που μπορεί να έχει ως αποτέλεσμα να επιλέξω τις επιλογές μου. En este caso, voy a trabajar con la intensidad de de luz y la cantidad de leds encendidos
Βήμα 4: El Algoritmo
paso a paso
- Crear una población de muchos cromosomas inicializados al azar
- Evaluar cual es el mejor con la función de "fitness"
- Copiar el mejor recombinando con el segundo mejor al resto de la población
- Εφαρμογή μεταλλαγής και μετατροπής
- Repertir a 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. 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 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 ανταποκριτές a cada cromosoma y vlerësamos su fitness, como se muestra en la figura. Σημειώστε τα σχόλιά σας για το πώς μπορείτε:
0011100000 fitness = 98,5
1011100001 fitness = 102,5
1010101011 fitness = 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 vlerësamos 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: El Código
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 genético, como es utilizado en el código principal.
Κύριος Código
El siguiente código crea una población de 20 cromosomas:
#define N 20
πληθυσμός pop (N)?
El objeto es πληθυσμός y lo hemos llamado pop. Esto inmediatamente ctrea una pobación de 20 cromosomas, inicializados con todos ceros. En el setup, agregamos la línea:
pop.mutateΧρωμοσώματα (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.mutateΧρωμοσώματα (0,05, 1);
Yaluamos con la función de vlerësación, que explico más abajo
αξιολογώ();
Luego ordenamos los cromosomas de Mayor a menor fitness (usando bubble sort), esto facilita el processo de recombinación, pop.sort ();
Allí está todo. Ahora veamos la función de αξιολόγηση που είναι σημαντική
Λειτουργία αξιολόγησης
El codigo de αξιολόγηση () es:
άκυρη αξιολόγηση () {
για (int i = 0; i <pop.n; i ++) {setPixels (i); // δίνει χρόνο LED για να ενεργοποιήσει την καθυστέρηση (100). ικανότητα (i)? }}
Vean que simplemente prendemos los ledsrespondientes al cromosoma (eso es lo que hace setPixels ()), y vlerësamos su fitness, con la función, void 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
Βήμα 6: Funcionando Y Retos
Funcionando
Ένα βίντεο που μπορεί να προσαρμοστεί και να αποδεχτεί τις διαφορετικές προϋποθέσεις του luz. Siempre encuentra una buena solución. Si lograste entender este instructable, 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 explorerando las condiciones y evolucionando para mejorar. En este caso están ocurriendo muchas iteraciones de eovlución en poco tiempo, για un organizo 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.
Τελικός Comentario
El ejemplo utilizado es ilustrativo, y es para aidar 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 métodos. Sin embargo, si lo vemos desde el punto de vista de seres vivos, la evolución organa, 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 (me disculpan si me puse espeso!)
Retos
- Buscar un problema de optimización más complexado con una función de "fitness" más fillja
- Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos delays por allí metidos)
- Εφαρμόστε ένα ρομπότ, για παράδειγμα, σε διαφορετικές καταστάσεις
- Estudiar meiosis, para aprender sobre mecanismos de evolución
- Estudiar a fondo los algoritmos genéticos (hay libros Completeos en el tema)
Συνιστάται:
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 Βήματα
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 auto, aacute; un perro y un gato. Por ende no tengo una
Kit Ciencia Y Arte: Cómo Cargar Código Al Παιδική χαρά: 4 Βήματα
Kit Ciencia Y Arte: Cómo Cargar Código Al Παιδική χαρά: 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
Kit Ciencia Y Arte: Ordenando Listas (Bubble Sort): 4 Βήματα
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 Βήματα
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 analog í a con el cerebro humano, es l
Kit Ciencia Y Arte: Un Makey Makey a Otro Nivel: 4 βήματα (με εικόνες)
Kit Ciencia Y Arte: Un Makey Makey a Otro Nivel: El Makey Makey is un dispositivo electr ó nico muy popular en educationaci ó n, pues con el se pueden hacer r á pidamente ejercicios de computaci ó n tangible e interacci ó n tangible e interacci ó con computadoras.El Makey Makey, no es m