Sadržaj:
- Korak 1: Materijali
- Korak 2: Búsqueda Al Azar
- Korak 3: Evolucija Y Definiciones
- Korak 4: El Algoritmo
- Korak 5: El Código
- Korak 6: Funcionando Y Retos
Video: Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Los algoritmos genéticos son je verovatno una las las cosas más interesantes de la computación (en mi mišljenje). Básicamente se odnosi na ideju evolucije biologije koja se primjenjuje u algoritmu i na računaru za rješavanje 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 Playground (CP) de Adafruit para hacer el ejercicio.
Zamislite da CP que nije ser vivo, a da se debe prilagodite a la condiciones cambiantes de luz. El CP, debe buscar la forma más eficiente de prender susled, para obtener la 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 genético.
OGLASI: Ovo je tema za studente AVANZADOS -a
Korak 1: Materijali
Jednostavno:
- Circuit Playground (o kualquier Arduino kon leds i senzoru za luz)
- Baterías
- USB kabl
- Algo para generar luz y sombra para pruebas
Korak 2: Búsqueda Al Azar
Imaginemos un mono, apretando letras en el teclado de una computadora, el mono simplemente presiona las letras al azar. Ako imate 50 letara u el tecladu, cada letra (si el mono presiona de manera Independiente cada vez), vjerovatno je vjerojatno 1/50 = 0,02 dana predsjedništva.
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 resoverlo. Vamos esto estadísticamente. La probabilidad de que el mono escriba "banano" esonces 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 verovatno! Dicho de otro modo, es muy poco verovatno 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 vjerovatno, ali nije nemoguće.
Formalicemos esta idea un poco. SI (1/50)^6 es probabirlidad 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
Ako ste u radnom odnosu namjerno unaprijed, P = 1, ako ste namjerno milion de veces, P = 0,9999936, ili za 10 miliona millona, P = 0,53, y mientras más grande se n, ako ste 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 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 ideje del como se generira 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 Independiente del intento anterior.
NAPOMENA: Osnovne informacije o teoriji i monografiji su beskonačne
Korak 3: Evolucija Y Definiciones
La evolución
Un algoritmo genético (AG) je un algoritmo que permite encontrar rješavajući probleme koji se mogu riješiti. El AG, koja se zasniva na principu principa herencije Darwiniane:
- Herencia: Los hijo reciben las características de sus padres. En el AG označava que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
- Varijacija: Debe haber un mecanismo para Introducir variedad. en el AG, označava que se debe agregar variabilidad de alguna manera para encontrar nuevas soluciones
- Odabir: Hay un mecanismo en la cual se seleccionan los mejores. En el AG, koja funkcionira kao "fitness", dozvoljava određivanje kvalitativnih rješenja
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.
Definiciones
Para poder facilitar eksplicira el algoritmo, debemos definir algunas cosas antes. Estas definiciones son comunes en cualquier explicación de algoritmo genético que encuentren, y les facilitará entender la literatura en las redes.
- Uno de los primeros pasos es "codificar" el problem, esto quiere decir que debemos tener una reprezentación de el problem para poder trabajarlo en el CP. Acá lo hacemos de manera sencilla. Kao što je prikazano na fotografiji, ima 10 LED dioda koje su uključene u "1" ili apagados "0", potvrđuje tendere s arreglo sa 10 elemenata 0 y 1. Kao što je 101000000 značajno značilo LED svjetlo 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 conconto 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. Entonces un cromosoma, no es más que una reprezentació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 a encendido
- La recombinación, consiste en tomas dos cromosomas, escoger un punto de cruzamiento, i intercambiar la información entre ambos (ver el diagrama)
- Una función de evaluación o fitness, es un kriterijum 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 intenzidad de de luz y la cantidad de leds encendidos
Korak 4: El Algoritmo
paso a paso
- Crear una población de muchos cromosomas inicializados al azar
- Ocijenite kvalitativnu es el mejor funkciju u "fitnesu"
- Copiar el mejor recombinando con el segundo mejor al resto de la población
- Aplicar mutación a toda la población
- Repertir a partir de 2
Ejemplo
Como expliqué en las definiciones, una tira (cromosoma) 1000101010, predstavlja los leds encendidos "1" y apagados "0", en el circuit playground. Vamos a definir nuestra función "fitness" como:
fitnes = (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 is similar en luz pero con menos led, seleccionaremos esa.
Ahora entonces encendemos los leds korespondientes a cada cromosoma y evaluamos su fitness, como se muestra en la figura. Noten como en el ejemplo tenemos:
0011100000 fitnes = 98,5
1011100001 fitnes = 102,5
1010101011 fitnes = 102
Los de fitness más alto son 102.5 y 102, seleccionamos esos, y hacemos recombinación and mutación como se muestra en la imagen, lo que nos permite terminar una unae nueva población, 1011100001
0011101011
1010100011
Esta nueva población nuevamente evaluamos are fitness and así continuamos. Medida que llega a una solución óptima, aunque sigue probando, mantiene hasta que haya cambios en el ambiente.
Korak 5: El Código
El código lo pueden descargar en mi GitHub. Nema objašnjenja o detaljima iz librerije "cromosome.h", koja je dodala generički algoritam, kao što je iskorišteno i glavni direktor.
Código principal
El siguiente código crea una población de 20 cromosomas:
#define N 20
populacija pop (N);
El objeto es populacija y lo hemos llamado pop. Ovo je inmediatamente ctrea una pobación de 20 cromosomas, inicializados con todos ceros. En el setup, agregamos la linea:
pop.mutateHromosomi (0,5, 0);
Za dodatne informacije o kromosomu sa vjerovatnoćom vjerojatnosti 0,5, početnim desde el kromosomom 0. En el petlje tenemos el algortimo, crossover primero hacemos:
pop.copyCrossover (2);
Luego aplicamos mutación con una probabilidad baja (0.05), iniciando del cromosoma 1 para mantener el mejor que hemos obtenido en la población (el cromosoma 0 es mejor)
pop.mutirati hromozomi (0,05, 1);
Y evaluamos con la función de evaluación, que explico más abajo
evaluirati ();
Luego ordenamos los cromosomas de Mayor a menor fitness (usando bubble sort), ovo olakšava proces rekombinacije, pop.sort ();
Allí está todo. Ahora veamos la función de evaluación que es importante
Función de evaluación
El codigo de evalu () es:
void evaluacija () {
for (int i = 0; i <pop.n; i ++) {setPixels (i); // daje LED vremenu uključivanje kašnjenja (100); fitnes (i); }}
Vean que simplemente prendemos los leds korespondientes al cromosoma (eso es lo que hace setPixels ()), y evaluamos 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 cada cromosoma en pop.fitness
Korak 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. Si lograste entender este instructable, te felicito, los algoritmos genéticos son and the topic difícil and computación, pero eso es lo que lo hace más emocionante.
De alguna marea al dejar funkcionando 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. Pogledajte ispravljeni algoritam za određivanje lo mejor en cada situacije, y luego dejar estas definidas en el CP, ali en este ejemplo dejamos que el algoritmo siempre esté explorando.
Ako se nađete u stanju mutacije, provjerite kako je algoritam neiscrpan i ostavite kostara za unaprijeđenu situaciju.
Comentario Final
E -posao koristi ilustraciju, ali je paralelno uposlio de la libreria. El reto planteado de mejorar la luz con el menor número de LEDS, es simple y hasta trivial, que verovatno 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ónorganizacija, upotreba algo como i algoritmo genético para búsquedas no lineales, entonces, algo como optimizar la luz, es un problem que en la naturalizacija tiene sentido (me disculpan si me puse espeso!)
Retos
- Autobus ima problema s optimizacijom kao komplikaciju s funkcijom "fitnessa" kao kompletna
- Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos kašnjenja po svim mjestima)
- Aplicirajte kao robota, kako bi se resuelva razlikovala u situacijama
- Estudiarna mejoza, para aprender sobre mecanismos de evolución
- Estudiar a fondo los algoritmos genéticos (hay libros completos en el theme)
Preporučuje se:
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 koraka
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 &aacugo; tico un perro y un gato. Por ende no tengo una
Kit Ciencia Y Arte: Cómo Cargar Código Al Igralište: 4 koraka
Kit Ciencia Y Arte: Cómo Cargar Código Al Igralište: 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 liste (sortiranje mjehurića): 4 koraka
Kit Ciencia Y Arte: Ordenando liste (Bubble Sort): En el mundo de las ciencias de la computaci ó n, sabre ordenar liste es como sabre 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 koraka
Kit Ciencia Y Arte: Máquinas Que Aprenden Sonido: Aprender de inteligencia umjetni es mcho a m a acute; s f á cil de lo que parece. El primer paso es entender el funkcionamiento de una de las unidades m á s simples en programci ó n, que por analog í con el cerebro humano, es l
Kit Ciencia Y Arte: Un Makey Makey i Otro Nivel: 4 koraka (sa slikama)
Kit Ciencia Y Arte: Un Makey Makey a Otro Nivel: El Makey Makey nije na raspolaganju za električnu komunikaciju; nico muy popularan en educaci ó n; con computadoras.El Makey Makey, no es m