Solución:
Algoritmos genéticos (GA) son algoritmos de búsqueda que imitan el proceso de evolución natural, donde cada individuo es una solución candidata: los individuos son generalmente “datos sin procesar” (en cualquier formato de codificación que se haya definido).
Programación genética (GP) se considera un caso especial de GA, donde cada individuo es un programa de computadora (no solo “datos sin procesar”). GP explora el espacio de búsqueda algorítmica y evolucionar los programas de computadora para realizar una tarea definida.
La programación genética y los algoritmos genéticos son muy similares. Ambos se utilizan para desarrollar la respuesta a un problema, comparando la aptitud de cada candidato en una población de candidatos potenciales durante muchas generaciones.
En cada generación, se encuentran nuevos candidatos cambiando aleatoriamente (mutación) o intercambiando partes (cruzamiento) de otros candidatos. Los candidatos menos “aptos” se eliminan de la población.
Diferencias estructurales
La principal diferencia entre ellos es la representación del algoritmo / programa.
A algoritmo genético se representa como una lista de acciones y valores, a menudo una cadena. por ejemplo:
1+x*3-5*6
Se debe escribir un analizador para esta codificación, para comprender cómo convertir esto en una función. La función resultante podría verse así:
function(x) { return 1 * x * 3 - 5 * 6; }
El analizador también necesita saber cómo lidiar con estados no válidos, porque las operaciones de mutación y cruce no se preocupan por la semántica del algoritmo, por ejemplo, se podría producir la siguiente cadena: 1+/3-2*
. Es necesario decidir un enfoque para hacer frente a estos estados inválidos.
A programa genético se representa como una estructura de árbol de acciones y valores, generalmente una estructura de datos anidada. Este es el mismo ejemplo, ilustrado como un árbol:
-
/
* *
/ /
1 * 5 6
/
x 3
También se debe escribir un analizador sintáctico para esta codificación, pero la programación genética no produce (generalmente) estados inválidos porque las operaciones de mutación y cruce funcionan dentro de la estructura del árbol.
Diferencias practicas
Algoritmos genéticos
- Inherentemente tienen una longitud fija, lo que significa que la función resultante tiene una complejidad limitada
- A menudo produce estados no válidos, por lo que estos deben manejarse de forma no destructiva.
- A menudo se basan en la precedencia del operador (por ejemplo, en nuestro ejemplo, la multiplicación ocurre antes que la resta), lo que podría verse como una limitación.
Programas genéticos
- Inherentemente tienen una longitud variable, lo que significa que son más flexibles, pero a menudo aumentan en complejidad.
- Rara vez produce estados no válidos, estos generalmente se pueden descartar
- Utilice una estructura explícita para evitar la precedencia de operadores por completo