Discusión sobre el artículo "Algoritmos de optimización de la población: Algoritmo genético binario (Binary Genetic Algorithm, BGA). Parte I"

 

Artículo publicado Algoritmos de optimización de la población: Algoritmo genético binario (Binary Genetic Algorithm, BGA). Parte I:

En este artículo, analizaremos varios métodos utilizados en algoritmos genéticos binarios y otros algoritmos poblacionales. Asimismo, repasaremos los principales componentes del algoritmo, como la selección, el cruce y la mutación, así como su impacto en el proceso de optimización. Además, estudiaremos las formas de presentar la información y su repercusión en los resultados de la optimización.

Los parámetros de los problemas de optimización suelen denominarse "características" y deben representarse de una forma determinada para poder utilizarse en la lógica de un algoritmo de optimización. En genética, estos rasgos se dividen en fenotipo y genotipo. El fenotipo representa el aspecto del parámetro a optimizar y el genotipo representa la forma en que se representa en el algoritmo. En la mayoría de los algoritmos de optimización, el fenotipo coincide con el genotipo y se representa como un número real. Un gen es un parámetro optimizable, y a su vez un cromosoma es un conjunto de genes, es decir, un conjunto de parámetros optimizables.

La representación de datos reales se usa para representar números fraccionarios. Los números reales pueden tener una parte decimal y una parte fraccionaria separadas por un punto decimal, por ejemplo, "3,14" y "0,5" son números reales.

Por su parte, la representación binaria de datos usa el sistema numérico binario, en el que los números se representan mediante dos símbolos: "0" y "1" y cada dígito se denomina bit. Por ejemplo, el número "5" puede representarse en forma binaria como "101".


La principal diferencia entre la representación de datos reales y binarios es la manera en que se codifican los números. Los números reales suelen codificarse usando normas como la IEEE 754, que define formatos para representar números de coma flotante. En MQL5, el tipo de datos "double" se usa para números reales, que pueden describir un total de 16 dígitos significativos en un número. Esto significa que el número total de dígitos no puede ser superior a dieciséis, por ejemplo, "9 999 999 999 999 999.0" y "9 999 999.999 999 99" y "0.999 999 999 999 999 9" tienen dieciséis dígitos "9" en el número total de dígitos antes y después del punto decimal. Más adelante veremos por qué es importante.

Los números reales son prácticos para escribir programas y en la vida cotidiana, mientras que la representación binaria se usa para trabajar en sistemas informáticos y realizar operaciones de bajo nivel, como operaciones lógicas y operaciones a nivel de bits.

Autor: Andrey Dik

 
fxsaber #:
Eso me apuñaló.
Gracias, corregido.
 
Lee. Lo que falta es un diagrama que muestre una representación general del algoritmo de optimización.
 
fxsaber #:
Lee. Lo que falta es un diagrama que muestre la representación general de un algoritmo de optimización.

Para todos los algoritmos de optimización sin excepción, no sólo para los AG, el orden de los operadores (métodos) es siempre el mismo, en el orden que figura en el índice:

1. 1. Selección.

2. 2. Cruzamiento.

3. Mutación.

A cada algo en particular le pueden faltar uno o dos operadores, pero el orden siempre es así. Sin duda, este orden puede justificarse lógicamente y relacionarse con probabilidades, y el objetivo de cualquier algoritmo de optimización es sumar una combinación de probabilidades a favor de la resolución del problema.

También hay un cuarto método, el de colocar nuevos individuos en una población, pero no suele identificarse como un método independiente.

Quizá, sí, tenga sentido dibujar un diagrama de la estructura de un "algoritmo de optimización", me lo pensaré.

 
Andrey Dik #:

Para todos los algoritmos de optimización sin excepción, no sólo para los AG, el orden de los operadores (métodos) es siempre el mismo

No he podido averiguar por qué en algunos algoritmos Mover sin entrada, en otros con entrada.
for (uint i = epochCount; (bool)i--;)
{
  AO.Moving() // Desplazamiento(i)

  for (uint set = ArraySize(AO.aName); (bool)set--;)
    AO.aName[set].f = FF(AO.aName[set].c);
                                                                     
  AO.Revision();
}
 
fxsaber #:
No conseguía entender por qué algunos algoritmos Moving tienen Moving sin entradas y otros con entradas.

Este es un caso en el que es necesario tener en cuenta el número de la época actual en una de las fórmulas del algoritmo. Solución desafortunada y más bien una excepción que una regla, en otros algoritmos el contador de épocas es su propio interior.