Оглавление:

Комплект Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 шагов
Комплект Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 шагов

Видео: Комплект Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 шагов

Видео: Комплект Ciencia Y Arte: Algoritmo Genético (Vida Artificial): 6 шагов
Видео: Высокая плотность 2022 2024, Ноябрь
Anonim
Комплект Ciencia Y Arte: Algoritmo Genético (Искусственный вид)
Комплект Ciencia Y Arte: Algoritmo Genético (Искусственный вид)

Los algoritmos genéticos son probablemente una de las cosas más interesantes de la computación (en mi opinión). Основываясь на идее эволюции биологии, она применима к алгоритму на компьютере для решения проблемы.

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) от Adafruit для отдыха.

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 eficiente de prender sus leds, 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.

РЕКЛАМА: Este es un tema para estudiantes AVANZADOS

Шаг 1: Materiales

Materiales
Materiales
Materiales
Materiales

Простой:

  1. Circuit Playground (или Arduino Con Leds y Sensor de luz)
  2. Baterías
  3. Кабель USB
  4. Алгоритм для создания луз и сомбра для пруэбаса

Шаг 2: Бускеда-аль-Азар

Búsqueda Al Azar
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 resolverlo. Vamos esto estadísticamente. La probabilidad de que el mono escriba "banano" es entonces la probabilidad concunta, 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 миллионов… очень вероятно! 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 poco возможно, но невозможно.

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, entonces, la probabilidad P de no escribir la palabra "banano" en n intentos sería:

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

Así por ejemplo si intento una vez, P = 1, si intento un millón de veces, P = 0,999936, pero para 10 mil млн., P = 0,53, y mientras más grande se n, más me acerco a P = 0, es decir, con un number 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 ideas del como se genera la variabilidad genética en los seres vivos, e изобретательный алгоритм для hacerlo en computadora, con el fin de solucionar un проблема. 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.

ПРИМЕЧАНИЕ: Busquen información sobre el teorema del mono infinito.

Шаг 3: Evolución Y Definiciones

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

Unalgoritmo Genético (AG) - это алгоритм, позволяющий разрешить проблему как решение проблем. El AG, se basa en tres Principios Principales de herencia Darwiniana:

  • Herencia: Los hijo reciben las características de sus padres. En el AG Meaninga que las nuevas soluciones heredan lo alcanzado por soluciones anteriores
  • Вариант: Debe haber un mecanismo para introducir variedad. en el AG, Meaninga que se debe comparegar 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 постоянное детерминированное культурное решение 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 libear explicar el algoritmo, debemos Definir algunas cosas antes. Estas Definiciones son comunes en cualquier explicación de algoritmo genético que encuentren, y les фасилитация entender la literatura en las redes.

  1. Uno de los primeros pasos es "codificar" el проблема, esto quiere decir que debemos tener una Representación de el проблема для 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 означает, что светодиоды 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 concunto de posibles combinaciones de leds encendidos (ver la imageen 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 grantación de los LEDS encendidos y 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, e intercambiar la información entre ambos (ver el diagrama)
  5. Функция оценки фитнеса - это критерий, позволяющий оценивать результаты, полученные при помощи буэноса, и его хромосомы для выбора лучшего качества. En este caso, voy a trabajar con la tensidad de luz y la cantidad de leds encendidos

Шаг 4: Эль-Алгоритмо

Эль-Алгоритмо
Эль-Алгоритмо
Эль-Алгоритмо
Эль-Алгоритмо
Эль-Алгоритмо
Эль-Алгоритмо

пасо а пасо

  1. Crear una población de muchos cromosomas inicializados al azar
  2. Evaluar cual es el mejor con la función de "fitness"
  3. Copiar el mejor Recombinando con el segundo mejor al resto de la población
  4. Aplicar mutación a toda la población
  5. Repertir a partir de 2

Ejemplo

Como Expliqué en las Definiciones, una tira (cromosoma) 1000101010, представляет собой лос светодиоды encendidos "1" и apagados "0", круговую игровую площадку. Вам необходимо определиться с функцией "фитнес", например:

фитнес = (lectura de luz) x 0,5 - (число светодиодов) 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 соответствует cada cromosoma y Assessmentamos su пригодности, como se muestra en la figura. Noten como en el ejemplo tenemos:

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 imageen, lo que nos permite terminar con una nueva población, 1011100001

0011101011

1010100011

Esta nueva población nuevamente evalamos su fit 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 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

население поп (N);

El objeto es Население и 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), einiciando 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);

Y Assessment Con la Función de Assessment, que explico más abajo

оценивать();

Luego ordenamos los cromosomas de mayor a menor Fitness (сортировка пузырьков usando), esto fascute el процесо де рекомбинация, pop.sort ();

Allí está todo. Ahora veamos la función de evalación que es importante

Función de evalación

El codigo de Assessment () es:

void Assessment () {

для (int я = 0; я <pop.n; я ++) {setPixels (я); // дает светодиоду время на включение delay (100); фитнес (i); }}

Vean que simplemente prendemos los leds correientes al cromosoma (eso es lo que hace setPixels ()), y Assessment 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

En el video se ve como va adaptive de apoco a las diferentes condiciones de luz. Siempre encuentra una buena solución. Si lograste entender este entender, 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 функционирует CP с алгоритмом, 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. Se puede correr el algoritmos paraterminar 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.

Комментарий Финал

El ejemplo utilizado es ilustrativo, y es para libear el uso de la librería. El reto planteado de mejorar la luz con el menor número de LEDS, просто y hasta trivial, que вероятно 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 organizationa, utiliza algo como un algoritmo genético para búsquedas no lineales, entonces, algo como optimizar la luz, es un проблема que en la naturaliza tieneul sentido (me si me puse espeso!)

Retos

  • Buscar un проблема оптимизации усложняется с una función de "fitness" más Compleja.
  • Mejorara el desempeño, cambiando probabilidad de mutación, re-combinación, aumentando la población, cambiando tiempos (esos delays por allí metidos)
  • Aplicar a un robot, para que resuelva Diferentes situaciones
  • Эстудиарный мейоз, para aprender sobre mecanismos de evolución
  • Estudiar a fondo los algoritmos genéticos (hay libros Complete en el tema).

Рекомендуемые: