¡Excelente pregunta y me complacería responder!
En mi quinto semestre de pregrado, mis compañeros de equipo y yo buscábamos ideas de proyectos no triviales para nuestra clase de Inteligencia Artificial. Encontramos este excelente video:
Pensamos que sería genial probar lo mismo usando un algoritmo genético. Nuestro algoritmo toma una imagen como entrada y se aproxima a la imagen usando un número fijo de círculos / rectángulos de diferentes dimensiones y colores.
- ¿Cuál es el equivalente binario de -2?
- ¿Qué es un algoritmo para aprender nuevos lenguajes de programación?
- Dada una lista de enlaces con punteros derechos, cada elemento de la lista tiene un enlace descendente que contiene otra lista de enlaces con punteros descendentes, de modo que cada lista derecha y abajo están ordenadas. ¿Cuál es la forma más rápida de aplanar la lista de enlaces de forma ordenada?
- ¿Qué es la fuerza bruta?
- ¿Por qué es imposible tener un tipo de comparación mejor que el tiempo O (nlogn)?
Codificamos una versión básica e intentamos ejecutarla en logotipos de compañías famosas y otros objetos ‘no tan complejos’. Aquí están los resultados (a la izquierda está la imagen original; a la derecha está la imagen reconstruida):
Pato
Logo de Nike
Logotipo de Pepsi
Corazón
Arte abstracto
Logotipo de dominó
Logotipo de Apple
Logo de Android
¡Ordenanza!
Otro arte abstracto
Bandera india
IBM
Observe cómo el algoritmo falla miserablemente en la reconstrucción de los radios en la bandera india. Esto se debe a que los radios son demasiado finos para ser captados por el algoritmo. A continuación se muestra una imagen de Angelina Jolie que el algoritmo no pudo reconstruir incluso después de ejecutarse durante aproximadamente 24 horas. Nuevamente, esto se debe a que es difícil para el algoritmo recoger detalles
Puede encontrar el código fuente aquí: amangoeliitb / Algoritmo genético. Puede intentar jugar con la heurística de medición de distancia y tal vez llegar a una implementación más rápida (compártala conmigo)
¡Feliz aprendizaje!