Mục lục:
- Bước 1: Vật liệu
- Bước 2: Búsqueda Al Azar
- Bước 3: Evolución Y Definiciones
- Bước 4: El Algoritmo
- Bước 5: El Código
- Bước 6: Funcionando Y Retos
Video: Kit Ciencia Y Arte: Algoritmo Genético (Vida nhân tạo): 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
Los algoritmos genéticos con trai probablemente una de las cosas másilisantes de la computación (en mi uy tín). Básicamente se toma la idea de evolución de la biología, y se aplica a un algoritmo en una computadora para Resolutionver un problemma.
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 debe adaptar a las condiciones cambiantes de luz. El CP, debe buscar la forma más e thiếue de prender sus led, 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 Minimza la cantidad de leds. Acá trataremos de hacerlo con un algoritmo genético.
QUẢNG CÁO: Este es un tema para estudiantes AVANZADOS
Bước 1: Vật liệu
Đơn giản:
- Sân chơi mạch (o cualquier Arduino con led y sensor de luz)
- Baterías
- Cáp USB
- Algo para generar luz y sombra para pruebas
Bước 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 manra độc lập với cada vez), tiene una probabilidad de 1/50 = 0,02 de ser presionada.
Ahora bien, digamos que queremos que el mono escripa la palabra "banano", ¿Podrá el mono escripir 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 escripa "banano" es entonces la probabilidad liên hợp, 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 escripa "banano", es 1 en 15 milones… muy poco có thể xảy ra! Dicho de otro modo, es muy poco probable que un mono escripa la palabra "banano" escripiendo teclas al azar, à, pero si tuviéramos 15 milones de monos escribeiendo, es posible que una de ellos escripa la palabra "banano". entonces poco có thể xảy ra, pero không imposible.
Formalicemos esta ý tưởng un poco. SI (1/50) ^ 6 es la probabilidad de escripir "banano", entonces, 1- (1/50) ^ 6 es la probabilidad de NO escribeirlo. Si un mono Purposea n veces, entonces, la probabilidad P de no escripir la palabra "banano" en n Ý định sería:
P = [1- (1/50) ^ 6] ^ n
Así bởi ejemplo si Ý định không có ý nghĩa, P = 1, si Ý định không bao giờ, P = 0,999936, pero para 10 mil milimet, P = 0,53, y mientras más grande se n, más me acerco a P = 0, es decir, con un numro infinito de Ý định, puedo estar seguro de que el mono va a escripir 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 wilda no es una forma efectiva de buscar una solución
Lo maravilloso es que la naturaleza busca al azar, pero de manra 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 manra 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 problemma. Entonces aunque contiene elementos de azar, también tiene memoria y hace que acad Purposeo de buscar la solución, không có biển độc lập trước del ý định.
NOTA: Busquen Información sobre el teorema del mono infinito
Bước 3: Evolución Y Definiciones
La evolución
Un algoritmo genético (AG) es un algoritmo que permite encontrar una solución a problemas difíciles de Resolutionver. El AG, se basa en tres precisionios precisiones de herencia Darwiniana:
- Herencia: Los hijo Recogben las características de sus padres. En el AG siga que las nuevas soluciones heredan lo alcanzado bởi soluciones anteriores
- Variación: Debe haber un mecanismo para giới thiệuir đa dạng. en el AG, siga que se debe agregar variabilidad de alguna manra para encontrar nuevas soluciones
- Selección: Hay un mecanismo en la cual se seleccionan thua mejores. En el AG, hay una función de "sức khỏe" que permite xác định 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.
Definiciones
Para poder originitar explicar el algoritmo, debemos Defr algunas cosas antes. Estas Defciones son comunes en cualquier explicación de algoritmo genético que encuentren, y les secureitará entender la literatura en las tái thiết kế.
- Uno de los primeros pasos es "codificar" el issuema, esto quiere decir que debemos tener una agentación de el problemma para poder trabajarlo en el CP. Acá lo hacemos de manra 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 có nghĩa là que los led 0 y 2 están encendidos, y el resto apagados. y 0010011010, que los led 2, 5, 6 y 8 están encendidos
- Una Población es un affunto 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 agentación de los LEDS encendidos y apagados del CP
- Una mutación, es cambiar al azar no o varios LEDS, como se muestra en la foto, donde arbitrariamente la posición 5 cambia de apagado a encendido
- La recombinación, ince en tomas dos cromosomas, escoger un punto de cruzamiento, e intercambiar la Información entre ambos (ver el crossrama)
- Una función de evaluación o fitness, es un tiêurio que permite evaluar que tan buenos son cada una de los cromosomas de la población para seleccionar el mejor. En este caso, voy a trabajar con la intensidad de de luz y la cantidad de leds encendidos
Bước 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 "thể dục"
- 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 Defciones, una tira (cromosoma) 1000101010, đại diện cho đèn led encendidos "1" y apagados "0", sân chơi mạch en el. Vamos a Defr nuestra función de "fitness" como:
thể lực = (lectura de luz) x 0,5 - (número de leds) x 0,5
Noten como restamos el numro de leds en la fórmula, pues queremos la mejor luz con la cantidad menor de leds, entonces si una solución es tương tự en luz pero con menos leds, seleccionaremos esa.
Ahora entonces encendemos los leds tương ứng với một cada cromosoma y evaluamos su thể dục, como se muestra en la figura. Noten como en el ejemplo tenemos:
0011100000 thể lực = 98,5
1011100001 thể lực = 102,5
1010101011 thể lực = 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 thể dục y así liên tục. A medida que llega a una solución óptima, aunque sigue probando, se mantiene hasta que haya cambios en el ambiente.
Bước 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 effizado en el código chính.
Código chính
El siguiente código crea una población de 20 cromosomas:
#define N 20
dân số (N);
El objeto es dân số 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), e iniciando del cromosoma 1 para mantener el mejor que hemos obtenido en la población (u cromosoma 0 es el mejor)
pop.mutateChromosomes (0,05, 1);
Y evaluamos con la función de evaluación, que explico más abajo
Thúc giục();
Luego ordenamos los cromosomas de mayor a menor fitness (usando bubble sort), esto secureita el proceso de recombinación, pop.sort ();
Allí está todo. Ahora veamos la función de evaluación que es importante
Función de evaluación
El codigo de eval () es:
void đánh giá () {
for (int i = 0; i <pop.n; i ++) {setPixels (i); // cho LED thời gian bật delay (100); thể dục (i); }}
Vean que simplemente prendemos los dẫn đầu tương ứng với 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 fitness de cada cromosoma en pop.fitness
Bước 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 hướng dẫn, 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, para un organsmo 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 paraminar lo mejor en cada situación, y luego dejar estas Defdas en el CP, pero en este ejemplo dejamos que el algoritmo siempre esté explorerando.
Si se dejan muchas mutaciones, verán como el algoritmo es algo inestable y le va a costar llegar a una situación optima.
Chung kết Comentario
El ejemplo Operatingizado es ilustrativo, y es para secureitar 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 manra más rápida con otros métodos. Cấm vận tội lỗi, si lo vemos desde el punto de vista de seres vivos, la evolución Organia, useiza algo como un algoritmo genético para búsquedas no lineales, entonces, algo como Optimizar la luz, es unma que en la naturaliza tiene sentido (me disculpan si me puse espeso!)
Retos
- Buscar un problemma de Optimización más complexado con una función de "sức khỏe" más compleja
- Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos trì hoãn bởi 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)
Đề xuất:
Tạo nhãn cầu Đơn thuốc cho nhãn cầu của bạn: Dự án BME60B: 9 bước
Eyeballing Your Eyeball's Prescription: a BME60B Project: By: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick VisteMagnification là một trong những tính năng chính hiện nay của kính đọc sách, được phân loại theo đơn thuốc của chúng. Theo Đại học Công nghệ Michigan, một diopter là một
Trí tuệ nhân tạo và nhận dạng hình ảnh bằng HuskyLens: 6 bước (có hình ảnh)
Trí tuệ nhân tạo và nhận dạng hình ảnh sử dụng HuskyLens: Này, có chuyện gì vậy, các bạn! Akarsh ở đây từ CETech.Trong dự án này, chúng ta sẽ xem xét các HuskyLens từ DFRobot. Đây là một mô-đun máy ảnh được hỗ trợ bởi AI có khả năng thực hiện một số hoạt động Trí tuệ nhân tạo như Face Recognitio
Nhận diện, đào tạo và nhận diện khuôn mặt Opencv: 3 bước
Opencv Face Detection, Training and Recognition: OpenCV là một thư viện thị giác máy tính mã nguồn mở rất phổ biến để thực hiện các tác vụ xử lý hình ảnh cơ bản như làm mờ, trộn hình ảnh, nâng cao chất lượng hình ảnh cũng như video, tạo ngưỡng, v.v. Ngoài xử lý hình ảnh, nó kích động
Kit Ciencia Y Arte: Cómo Cargar Código Al Sân chơi: 4 bước
Kit Ciencia Y Arte: Cómo Cargar Código Al Sân chơi: Ac á explicamos como se " sube " el c ó digo. EL c ó digo de cada proyecto est á vi ó o cada có thể hướng dẫn, tội lỗi cấm vận puede descargar todo el c ó digo en el GitHub
Cách tạo nhân vật 2d với bộ điều khiển nhân vật trong Unreal Engine 4 bằng Visual Script cho PC: 11 bước
Cách tạo nhân vật 2d với bộ điều khiển ký tự trong Unreal Engine 4 Sử dụng Visual Script cho PC: Cách tạo nhân vật 2d với bộ điều khiển nhân vật trong Unreal engine 4 sử dụng tập lệnh trực quan cho PC Xin chào, tôi là Jordan Steltz. Tôi đã phát triển trò chơi điện tử từ năm 15 tuổi. Hướng dẫn này sẽ dạy bạn cách tạo một nhân vật cơ bản với