Cuprins:
- Pasul 1: Materiale
- Pasul 2: Căutare Al Azar
- Pasul 3: Evoluție și definiții
- Pasul 4: El Algoritmo
- Pasul 5: El Código
- Pasul 6: Funcionando Y Retos
Video: Kit Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 Steps
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Los algoritmos genéticos son probablemente una de las cosas más interesantes de la computación (en mi opinion). Básic se ia ideea de evoluție a biologiei, și aplică un algoritm într-o calculatoare pentru rezolvarea unei probleme.
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 learn about the algoritmo. Folosim Circuitul Playground (CP) de Adafruit pentru a face exercițiul.
Imaginen el CP care este un ser viu, și care trebuie să se adapteze la condițiile schimbătoare de lumină. El CP, trebuie să caute forma mai eficientă a prender sus leds, pentru a obține majoritatea cantității de lumină posibilă în funcție de senzorul de lumină. Pentru lograrlo, în plus, trebuie să-l fac pe cel mai mic număr de leduri posibile. Entonces maximiza la luz, la același timp care minimizează cantitatea de leduri. Acă tratăm de a face cu un algoritm genetic.
ADVERTENȚIA: Este o temă pentru studenți AVANZADOS
Pasul 1: Materiale
Simplu:
- Circuit Playground (sau orice Arduino cu leduri și senzor de lumină)
- Baterías
- Cablu USB
- Algo para generar luz y sombra para pruebas
Pasul 2: Căutare Al Azar
Imaginemos un mono, apretando letras en el teclado de una computadora, el mono pur și simplu prezintă literele la azar. Si hay unas 50 letras en el teclado, cada letra (si el mono presiona de maniera independenta de fiecare data), are o probabilitate de 1/50 = 0.02 de ser presionata.
Ahora bien, digamos that queremos that the mono escriba la palabra "banano", ¿Podrá el mono write la palabra? La respuesta corta es SI !!!
La răspuns larg este că dacă se poate face, dar va lua un timp lung pentru rezolvare. Vamos esto statististic. La probabilitatea de care el mono scrie "banano" este atunci probabilitatea 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, este a spune probabilitatea de care el mono scrie "banano", este 1 în 15 milioane … foarte puțin probabil! Dicho de otro modo, es muy poco probable que un mono escriba la palabra "banano" escribiendo teclas al azar, ah, dar și tuviéramos 15 millones de monos escribiendo, este posibil ca unul dintre ei să scrieți cuvântul "banano". atunci puțin probabil, pero no imposible.
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, then, the probability P de no write the word "banano" en n intentos would:
P = [1- (1/50) ^ 6] ^ n
Así por ejemplo si intento una vez, P = 1, dacă intenționez un miliard de ori, P = 0.999936, dar pentru 10 milioane de milioane, P = 0.53, și în timp ce mai mare se înțelege, mai mult eu acerco a P = 0, este decir, cu un număr infinit de intenții, 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 forța brută nu este o formă efectivă de căutare a unei soluții
Lo maravilloso es que la naturaleza busca al azar, pero de manera constructiva, es decir, busca de forma aleatoria dar menținând o bună soluție și făcând modificări de câte ori puternice de câte ori mici. Esa es la manera en que el algoritmo genético works, tomando ideas del como se genera la variabilidad genética en los seres vivos, e inventând un algoritm pentru a face în computer, cu el fin de soluționare a unei probleme. Entonces aunque contiene elementos de azar, de asemenea, are memoria și face că acad intenția de a căuta soluția, nu seara independentă a intenției anterioare.
NOTA: Busquen informații despre teorema del mono infinito
Pasul 3: Evoluție și definiții
La evolución
Un algoritm genetic (AG) este un algoritm care permite găsirea unei soluții la probleme dificile de rezolvare. El AG, se bazează pe trei principii principale ale herenței Darwiniana:
- Herencia: Los hijo a primit caracteristicile părinților. En el AG înseamnă că cele noi soluții heredan lo alcanzado por soluciones anteriores
- Variație: Debe avea un mecanism pentru introducerea variatei. en el AG, înseamnă că trebuie să aduc variabilitate de vreun mod pentru a găsi noi soluții
- Selecție: Există un mecanism în care se selectează cei mai buni. În el AG, există o funcție de "fitness" care permite să determine ce soluție este mai bună
Acá no me voy a meter en los details de como works la evolución de seres vivos, sino que quiero entrar de una vez a la explicación del Algoritmo Genético.
Definiciones
Pentru a putea facilita explicarea algoritmului, dezbătem anumite lucruri înainte. Estas definitions son comunes în orice explicație a algoritmului genetic care se întâlnesc, și facilitează să înțeleagă literatura în rețele.
- Uno de los primeros pasos es "codifica" problema, asta vrea să spun că avem o reprezentare a problemei pentru puterea de lucru în CP. Acă lo hacemos de manera sencilla. Cum se arată într-o fotografie, avem 10 LED-uri care pot fi încântate "1" sau apagate "0", atunci avem un arreglo cu 10 elemente 0 și 1. Astfel atunci 101000000 înseamnă că ledurile 0 și 2 sunt încorporate, și restul apagados. y 0010011010, que los leds 2, 5, 6 y 8 están encendidos
- O populație este un ansamblu de posibile combinații de leduri încântate (ver imaginea de populație), acestea pot fi egale sau diferite. Se le llama un Cromosoma a un element în populație. Entonces un cromosoma, nu este mai mult decât o reprezentare a LED-urilor încorporate și apagate ale CP
- O mutare, se schimbă la azar unul sau mai mulți LED-uri, cum se arată în fotografie, unde arbitrar poziția 5 schimbă de apăsat la încendiu
- Recombinarea, constă în tomas dos cromosomas, escoger un punto de cruzamiento, și intercambiază informația între ambii (ver el diagrama)
- O funcție de evaluare o fitness, este un criteriu care permite evaluarea pe care o avem pentru fiecare dintre cromozomii de la populația pentru a alege cel mai bun. În acest caz, voy a lucra cu intensitatea de lumină și cantitatea de leduri încendisate
Pasul 4: El Algoritmo
paso a paso
- Crear una población de muchos cromosomas initializados al azar
- Evaluează care este cel mai bun cu funcția de "fitness"
- Copiar cel mai bun recombinand cu cel de-al doilea cel mai bun la restul populatiei
- Aplicați mutație la toată populația
- Repertir a partir de 2
Exemplu
Como expliqué en las definiciones, una tira (cromosoma) 1000101010, reprezintă ledurile încorporate "1" și apagados "0", în circuit circuit playground. Vamos a definir our function of "fitness" as:
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 cu cantitatea mai mică de leds, atunci dacă o soluție este similară în lumină dar cu mai puțin leds, selectăm esa.
Ahora then encendemos los leds correspondientes a cada cromosoma y evaluamos su fitness, cum se arată în figura. Noten como en el ejemplo tenemos:
0011100000 fitness = 98,5
1011100001 fitness = 102,5
1010101011 fitness = 102
Los de fitness más alto son 102.5 y 102, selectăm esos, și 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
Această nouă populație ne evaluează în mod semnificativ fitness și astfel continuăm. A medida that llega a una solution óptima, aunque sigue probando, se mentine pana ce a schimbat in mediul inconjurator.
Pasul 5: El Código
El código lo pueden descargar en mi GitHub. No voy a explica detaliile bibliotecii "cromosome.h", fără nimic mai mult algoritmul genetic, cum este folosit în codul principal.
Cod principal
Următorul cod creează o populație de 20 de cromozomi:
#define N 20
populația pop (N);
El objeto es population y lo hemos llamado pop. Esto inmediat ctrea una pobation de 20 cromosomas, initializados with all ceros. În configurare, regăsim linia:
pop.mutateChromosomes (0,5, 0);
Pentru a schimba aleatoriamente fiecare cromosom cu o probabilitate de 0,5, inițiat de la cromozomul 0. În buclă vom avea algortimo, primul hacemos crossover:
pop.copyCrossover (2);
Luego aplicamos mutación con una probabilidad baja (0.05), e iniciando del cromosoma 1 pentru a menține cel mai bun pe care l-am obținut în populație (el cromosoma 0 este cel mai bun)
pop.mutateChromosomes (0,05, 1);
Y evaluamos with the function of evaluation, that explico more abajo
a evalua();
Luego ordonează cromozomii de primar a minorului fitness (folosind bubble sort), acest lucru facilitează procesul de recombinare, pop.sort ();
Allí está todo. Ahora veamos funcția de evaluare care este importantă
Funcția de evaluare
El codigo de evaluate () es:
void evaluate () {
for (int i = 0; i <pop.n; i ++) {setPixels (i); // acordă timp LED-ului pentru pornirea întârzierii (100); fitness (i); }}
Vea că pur și simplu avem LED-urile corespunzătoare cromosomului (eso este lo que hace setPixels ()), și evaluăm su fitness, cu funcția, 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
Pasul 6: Funcionando Y Retos
Funcionando
În el video se ve ca va adapta de apoco a diferitelor condiții de lumină. Siempre encuentra una buena solución. Dacă lograste înțelege acest lucru este instructiv, te felicită, algoritmii genetici sunt un tema dificil în calcul, dar asta este ceea ce face mai mult emoționant.
De ceva marea al dejar funcționând el CP cu algoritmul, pare aproape ca un ser explorând condițiile și evoluția pentru îmbunătățire. În acest caz sunt ocurriendo multe iterații de eovlație în puțin timp, pentru un organism viu son mult mai multe
de cierto modo el algoritmo sirve pentru a găsi cea mai bună soluție, date ciertas condiții. Se poate corecta algoritmii pentru a determina cel mai bun în fiecare situație, iar apoi dejar sunt definite în CP, dar în acest exemplu ne permitem că algoritmul este întotdeauna explorat.
Dacă se dejan multe mutații, verán como el algoritmo es algo inestable y le va a ajunge la o situație optimă.
Comentariu Final
El ejemplo utilizado es ilustrativo, y es para facilita el uso de la librería. El reto plantat de îmbunătățire a luminii cu cel mai mic număr de LED-uri, este simplu și până trivial, care probabil se poate soluționa de o manieră mai rapidă cu alte metode. Sin embargo, si lo vemos desde el punto de vista de seres vivos, la evolución organiza, utilizează ceva ca un algoritm genetic pentru căutări fără linii, atunci, ceva ca optimizare la lumină, este o problemă care în natură are sens (me disculpan si me puse espeso!)
Retos
- Căutați o problemă de optimizare mai complicată cu o funcție de "fitness" mai complexă
- Mejorara el desempeño, schimbând probabilitatea de mutare, re-combinare, crescând populația, schimbând timpii
- Aplicați un robot, pentru a rezolva diferite situații
- Studiază meioza, pentru a învăța despre mecanisme de evoluție
- Studiază fondul algoritmilor genetici (hay libros completos en el tema)
Recomandat:
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: 11 Steps
Dispensador De Alimento Para Múltiples Mascotas Usando Inteligencia Artificial Con Watson: În acest lucru este învățabil să învățăm cum să fac un distribuitor de alimente pentru mascotele lor, prin general, sau la mai puțin în cazul în care el vrea să facă un dispensator automat á tico, fără embargo, tengo un perro y un gato. Por ende no tengo una
Kit Ciencia Y Arte: Cómo Cargar Código Al Playground: 4 Steps
Kit Ciencia Y Arte: Cómo Cargar Código Al Playground: Ac á explicamos como se " sube " el c ó digo. EL c ó digo de fiecare proiect este á în fiecare instructabil, fără embargo poate descărca tot el c ó digo în el GitHub
Kit Ciencia Y Arte: Ordenando Listas (Bubble Sort): 4 paș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. Este o bună modalitate de a vedea cum algoritmii sunt o modalitate de a face lucrurile într-o calculatoare, și că forma directă de a face ceva nu este la mine
Kit Ciencia Y Arte: Máquinas Que Aprenden Sonido: 4 Steps
Kit Ciencia Y Arte: Máquinas Que Aprenden Sonido: Aprender de inteligencia artificial es much 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, care por analog í a con el cerebro humano, es l
Kit Ciencia Y Arte: Un Makey Makey a Otro Nivel: 4 pași (cu imagini)
Kit Ciencia Y Arte: Un Makey Makey a Otro Nivel: El Makey Makey este un dispozitiv electr ó nico muy popular en educaci ó n, pues con el se pueden hacer r á pidamente ejercicios de computaci ó n tangible e interacci ó n f í sica con computadoras.El Makey Makey, no es m