¿Cuál es la diferencia entre el algoritmo memético y el algoritmo genético?

Las MA son como las GA, pero los genomas individuales pueden mejorar in situ.

En una AG clásica, un individuo es una muestra estática única. Esas muestras se mezclan con el crossover y los resultados se alteran con mutaciones para que las próximas generaciones de muestras estáticas se prueben.

Con los AM, las muestras mismas pueden hacer un poco de escalada durante la vida del individuo.

Ejemplo: Imagine evolucionar una red neuronal para realizar alguna tarea, utilizando una estructura fija y codificando los pesos en el genoma de longitud fija. Un GA probaría las redes, quizás incluso permitiendo algo de aprendizaje, pero el genoma del individuo siempre sería el peso inicial. Con una MA, los pesos aprendidos se retroalimentan en el genoma antes de reproducirse.

No veo que las AM sean muy útiles, ni están inspiradas biológicamente. Requieren un mapeo inequívoco de genotipo-fenotipo 1 a 1, que es casi inútil excepto para tareas bastante triviales. El verdadero poder de los GA es cuando tienes un mapeo del desarrollo, lo que significa que las pequeñas mutaciones pueden tener un efecto pequeño o grande, al igual que en la biología.

Memetic es del gen “meme” y desarrollé este algoritmo hace unos años, es una memética que “imita” otros algoritmos y presenta un optimizador de búsqueda basado en gradiente:

mientras t <10
para fila = 1:10
if trial2 (A (t,:)) Fb (t,:) = A (t, :);
fin
if trial2 (Fb (t,:))
gb = Fb (t, :);
fin
fin
para fila = 1:10
para columna = 1: 100
% Calcular la inercia
W = 1 – ((1-0.8). * T) / 10;
% calcula la velocidad
r = rand ();
r2 = rand ();
si Pc Fb (t,:) = Fb (t, :);
más
r3 = redondo (9 * (rand () + 0.1));
r4 = redondo (9 * (rand () + 0.1));
r5 = prueba (A (r3, :));
r6 = prueba (A (r4, :));
si r5 Fb (t,:) = Fb (r3, :);
más
Fb (t,:) = Fb (r4, :);
fin
fin
v (t,:) = W * v (t, 🙂 + C1 * rand * (Fb (t,:) – A (t, :));
% actualizar la posición
A (t,:) = A (t, 🙂 + v (t, :);
funct (A (t, :));
si max (A (t,:))> b
A (t,:) = A (t, 🙂 + 2 * abs (abs (a) – abs (b));
elseif min (A (t,:)) A (t,:) = A (t, 🙂 – 2 * abs (abs (a) + abs (b));
fin
c = c + 1;
fin
fin
t = t + 1;
fin

Construyo este solucionador memético usando MATLAB, pero se puede portar fácilmente a C ++, en este caso la primera actualización de velocidad es la velocidad según la optimización de Swarm y no la derivada de la distancia [math] (dx / dt) [/ math]

More Interesting

¿Cuáles son los algoritmos posibles que se pueden usar para ordenar cada cubo en el algoritmo de clasificación de cubo?

¿Qué tan difícil es el algoritmo de verificación de traducción de Duolingo? ¿Existen otras herramientas de código abierto similares por ahí?

¿En qué tipos de gráfico DFS y BFS producirán el mismo árbol (misma fuente) independientemente de la secuencia de visitas de los vecinos?

¿Cuáles son las mejores estructuras de datos y algoritmos de entrenamiento en kolkata durante 2 meses?

¿Cuál es el mejor algoritmo para implementar la función next_permutation sin STL?

¿Qué es el desplazamiento binario y por qué lo usamos?

Cómo identificar un bucle en una lista vinculada individualmente

¿Cuál será el código C si quiero imprimir todos los elementos ingresados ​​en orden inverso sin usar matrices?

¿Necesito matemáticas para aprender estructuras de datos y algoritmos?

¿Qué algoritmo se usa en el juego Fifa 13?

¿Cómo entender el algoritmo SHA-1? ¿Cuáles son los mejores ejemplos para ello?

Cómo crear una matriz de intervalos de fechas a partir de una matriz de fechas estáticas en JavaScript

¿Por qué es difícil realizar una búsqueda binaria en una lista vinculada?

¿Qué es un árbol binario desequilibrado y cuáles son sus usos?

¿Existen tipos de programas de software que involucren matemáticas, pero que puedan resolver problemas cotidianos (es decir, no un motor de juego de física completo o un nuevo algoritmo criptográfico)?