תוכן עניינים:

Kit Ciencia Y Art: Algoritmo Genético (Vida Artificial): 6 שלבים
Kit Ciencia Y Art: Algoritmo Genético (Vida Artificial): 6 שלבים

וִידֵאוֹ: Kit Ciencia Y Art: Algoritmo Genético (Vida Artificial): 6 שלבים

וִידֵאוֹ: Kit Ciencia Y Art: Algoritmo Genético (Vida Artificial): 6 שלבים
וִידֵאוֹ: Дэниел Шмахтенбергер: Уничтожат ли нас технологии? 2024, יולי
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 (en mi opinionión). Básicamente se toma la idea de evolución de la biología, y se aplica a un algoritmo en una computadora for 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. מגרש משחקים Usamos el Circuit (CP) de Adafruit עבור האקר אל הבעלים.

אימג'ין אל CP que es un ser vivo, y que se debe adaptar a las condiciones cambiantes de luz. CP עבור 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 genético.

ADVERTENCIA: Este es un theme fora estudiantes AVANZADOS

שלב 1: חומרים

חומרים
חומרים
חומרים
חומרים

פָּשׁוּט:

  1. מגרש משחקים (או Arduino con leds y sensor de luz)
  2. Baterías
  3. כבל USB
  4. Algo para generar luz y sombra para pruebas

שלב 2: בוסקדה אל אזאר

בוסקדה אל אזאר
בוסקדה אל אזאר

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 entonces la probabilidad conjunta, אסטות:

(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 פוקו סביר, אבל לא בלתי אפשרי.

Formalicemos esta idea un poco. SI (1/50)^6 es la probabilidad de escribir "banano", אנטונים, 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 intentionos sería:

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

Así por ejemplo si into una vez, P = 1, si intentiono un millón de veces, P = 0.999936, pero for 10 milones, P = 0.53, y mientras más grande se n, má me acerco a P = 0, es decir, con un numero infinito de intentionos, puedo estar seguro de que el mono va a escribir la palabra "בננו".

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, e inventando un algoritmo para hacerlo en computadora, con el fin de solucionar un problema. Entonces aunque contiene elementos de azar, también tiene memoria y hace que acad intentiono de buscar la solución, ללא ים עצמאי של הכוונה הקדמית.

הערה: מידע אודות תחום מונו אינפיניטו

שלב 3: הגדרות Evolución Y

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) הוא un algoritmo que permitt encontrar una a problemas dificiles de resolver. El AG, se basa en tres principios principales de herencia Darwiniana:

  • הרנסיה: Los hijo reciben las características de sus padres. En el AG significa que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
  • וריאציה: Debe haber un mecanismo para introducir varietyad. en el AG, significa que se debe agregar variabilidad de alguna manera para encontrar nuevas soluciones
  • בחירה: Hay un mecanismo en la cual se seleccionan los mejores. En el AG, hay una función de "fitness" que permitt determiner cual solusió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.

הגדרות

עבור תוכנת פודר להסבר על אלגוריתם, debemos definir algunas cosas antes. Estas definiciones son comunes in cualquier explicación de algoritmo genético que encuentren, y les facilitará entender la literatura in las redes.

  1. Uno de los primeros pasos es "codificar" el problema, esto quiere decir que debemos tener una representación de el problema for poder trabajarlo en el CP. Acá lo hacemos de manera sencilla. איך לראות כמה תמונות, עשרות נוריות LED יכולות להכיל "1" או "0", נכנסות לארוחות עם 10 אלמנטים 0 y 1. Asi entonces 101000000 signa que los leds 0 y 2 están encendidos, y el resto אפגאדו. y 0010011010, que los leds 2, 5, 6 y 8 están encendidos
  2. Una Población es un conjunto of possibles combinaciones of leds encendidos (ver la imagen de población), ניתן להשיג מספר דברים שונים. Se le lama un Cromosoma a un elemento en la población. כניסות וקרומוסומה, אין צורך בהצגת LEDs encendidos and 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, and intercambiar la información entre ambos (ver el diagrama)
  5. אופן ההערכה או הכושר, יש קריטריונים שיכולים להעריך את הערך אם אתה יכול לבנות את הילד שלך. En este caso, voy a trabajar con la intensidad de de luz y la cantidad de leds encendidos

שלב 4: אל אלגוריתמו

אל אלגוריטמו
אל אלגוריטמו
אל אלגוריטמו
אל אלגוריטמו
אל אלגוריטמו
אל אלגוריטמו

paso a paso

  1. Crear una población de muchos cromosomas inicializados al azar
  2. הערכה של כל הכוח עם "כושר"
  3. העתק el mejor recombinando con el segundo mejor al resto de la población
  4. שימוש במוצר a toda la población
  5. חזר על חלק 2

דוגמאות

Como expliqué en las definiciones, una tira (cromosoma) 1000101010, מייצג los leds encendidos "1" y apagados "0", במגרש משחקים. Vamos a definir nuestra función de "כושר" כמו:

כושר = (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 correspondentses a cada cromosoma y evaluamos su fitness, como se muestra en la figura. הערה:

0011100000 כושר = 98.5

1011100001 כושר = 102.5

1010101011 כושר = 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 evaluamos su fitness y así continuamos. 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 lo pueden descargar en GitHub. אין מה להסביר את ההחלטות "cromosome.h", אם אתה צריך להשתמש במנהלת החשבונית.

מנהל קודיגו

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

#הגדר N 20

אוכלוסיית פופ (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.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), in 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);

אתה יכול להעריך את ההערכה, כי אפשר להסביר את זה יותר

להעריך();

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 is importante

Función de evaluación

El codigo de evalu () es:

הערכת חלל () {

עבור (int i = 0; i <pop.n; i ++) {setPixels (i); // נותן זמן LED להפעלת עיכוב (100); כושר גופני (i); }}

Vean que simplemente prendemos los leds correspondentses al cromosoma (eso es lo que hace setPixels ()), y evaluamos su fitness, con la función, כושר חלל (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

סרטון הווידאו יכול להתאקלם ולהתאים את האפוקו. Siempre encuentra una buena solución. אם אתה יכול להבחין במחקר, אנו יכולים להבחין באלגוריתמוס זה יכול להיות בנושאים שונים במחשבים, אך אנו יכולים להעריך זאת.

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. ניתן לראות תיקון של אלגוריתמוס על מנת לקבוע את המצב במלואו, ולפיכך ניתן להגדיר את ההגדרות של CP, אך אנו יכולים להעריך את כל סוגי התוצאות.

אם הם יכולים לשנות את השינוי, אנו יכולים להשתמש באלגוריתמים שאינם ניתנים להפסקה ולתקן אופטימלי.

גמר קומנטריו

El ejemplo utilizado es ilustrativo, y es para facilitar el uso de la librería. ניתן להבחין במתכונת של נוריות LED, כיוון שהדבר הוא פשוט וטריאלי, ככל הנראה ניתן יהיה לפתור את התוכנה. 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 (me disculpan si me puse espeso!)

Retos

  • אוטובוסים עם בעיות אופטימיזציה נוספות שיכולות להיות קשורות ל"כושר"
  • Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos delay by allí metidos)
  • מדויק של רובוט, למען קיבולת שונה במצבים שונים
  • Estudiar meiosis, para aprender sobre mecanismos de evolución
  • Estudiar a fondo los algoritmos genéticos (hay libros completos en el theme)

מוּמלָץ: