Módulo PySAG.initialization

Módulo de Inicialización de Poblaciones para Algoritmos Genéticos.

Este módulo proporciona funciones para crear la población inicial de individuos (cromosomas) para un algoritmo genético. Las funciones están diseñadas para ser flexibles y eficientes, utilizando Numba para la optimización cuando es aplicable.

Funciones de Inicialización Disponibles:
  • init_random_uniform:

    Genera una población con genes de valor real o entero muestreados de una distribución uniforme, especificado mediante el parámetro dtype.

  • init_random_binary:

    Genera una población con genes binarios (0 o 1).

  • init_random_permutation:

    Genera una población donde cada individuo es una permutación de enteros (útil para problemas de ordenamiento).

PySAG.initialization.init_random_binary(pop_size, chromosome_length, p_one=0.5, **kwargs)[fuente]

Genera una población con genes binarios (0 o 1).

Cada gen se establece en 1 con probabilidad p_one y en 0 con probabilidad 1 - p_one. Los genes son de tipo np.int_.

Parámetros:
  • pop_size (int) – Número de individuos en la población.

  • chromosome_length (int) – Número de genes en cada cromosoma.

  • p_one (float) – Probabilidad de que un gen individual sea 1. Por defecto es 0.5.

  • **kwargs (Any) – Argumentos adicionales (no utilizados).

Devuelve:

Una lista de individuos (arrays de NumPy de tipo np.int_), donde cada individuo representa un cromosoma binario.

Muestra:
  • TypeValidationError – Si los tipos de los parámetros son incorrectos.

  • RangeError – Si pop_size o chromosome_length no son positivos, o si p_one no está en el rango [0, 1].

  • InitializationError – Si ocurre un error inesperado durante la inicialización.

Tipo del valor devuelto:

List[ndarray[tuple[int, …], dtype[int64]]]

Ejemplo

>>> pop_bin = init_random_binary(10, 8)
>>> len(pop_bin)
10
>>> pop_bin[0].shape
(8,)
>>> pop_bin[0].dtype # np.int_ es int32 o int64 según la plataforma
dtype('int...')
>>> np.all((pop_bin[0] == 0) | (pop_bin[0] == 1))
True
PySAG.initialization.init_random_permutation(pop_size, chromosome_length, **kwargs)[fuente]

Genera una población donde cada individuo es una permutación de enteros.

Cada cromosoma será una permutación de los enteros 0, 1, …, chromosome_length - 1. Este método está diseñado para problemas de optimización combinatoria (e.g., TSP) donde los individuos representan un orden o secuencia de elementos discretos. Los genes son de tipo np.int_.

Parámetros:
  • pop_size (int) – Número de individuos en la población.

  • chromosome_length (int) – Longitud de la permutación (número de elementos a permutar).

  • **kwargs (Any) – Argumentos adicionales (no utilizados).

Devuelve:

Una lista de individuos (arrays de NumPy de tipo np.int_), donde cada individuo es una permutación de enteros.

Muestra:
Tipo del valor devuelto:

List[ndarray[tuple[int, …], dtype[int64]]]

Ejemplo

>>> pop_perm = init_random_permutation(5, 4)
>>> len(pop_perm)
5
>>> pop_perm[0].shape
(4,)
>>> pop_perm[0].dtype # np.int_ es int32 o int64 según la plataforma
dtype('int...')
>>> import numpy as np
>>> np.array_equal(np.sort(pop_perm[0]), np.arange(4))
True
PySAG.initialization.init_random_uniform(pop_size, chromosome_length, low, high, dtype=<class 'numpy.float64'>, **kwargs)[fuente]

Función para crear una población con genes con distribución uniforme.

Genera una población con genes de valor real o entero muestreados de una distribución uniforme. El tipo de dato (flotante o entero) y su precisión se determinan por el parámetro dtype.

  • Si dtype es flotante (e.g., np.float64, np.float32):

    Los genes se muestrean de U(low, high), donde high es exclusivo.

  • Si dtype es entero (e.g., np.int_, np.int32, np.int64):

    Los genes se muestrean uniformemente del rango [low, high], donde high es inclusivo.

Parámetros:
  • pop_size (int) – Número de individuos en la población.

  • chromosome_length (int) – Número de genes en cada cromosoma (individuo).

  • low (float | int) – Límite inferior del rango para los valores de los genes.

  • high (float | int) – Límite superior del rango para los valores de los genes. (Exclusivo para flotantes, inclusivo para enteros).

  • dtype (Type[float32 | float64 | int32 | int64]) – Tipo de dato NumPy deseado para los genes. Debe ser un tipo flotante (e.g., np.float64, np.float32) o entero (e.g., np.int_, np.int32, np.int64). Por defecto es np.float64.

  • **kwargs (Any) – Argumentos adicionales (no utilizados).

Devuelve:

Una lista de individuos (arrays de NumPy) del dtype especificado.

Muestra:
  • TypeValidationError – Si los tipos de los parámetros son incorrectos, o dtype no es un tipo NumPy numérico soportado.

  • RangeError – Si pop_size o chromosome_length no son positivos, o si los rangos low, high son inválidos para el dtype.

  • InitializationError – Si ocurre un error inesperado durante la inicialización.

Tipo del valor devuelto:

List[ndarray[tuple[int, …], dtype[Any]]]

Ejemplo

>>> # Población de flotantes (por defecto dtype=np.float64)
>>> pop_float = init_random_uniform(5, 3, 0.0, 1.0)
>>> len(pop_float)
5
>>> pop_float[0].shape
(3,)
>>> pop_float[0].dtype
dtype('float64')
>>> # Población de enteros de 32 bits
>>> pop_int32 = init_random_uniform(5, 4, 0, 10, dtype=np.int32)
>>> len(pop_int32)
5
>>> pop_int32[0].shape
(4,)
>>> pop_int32[0].dtype
dtype('int32')
>>> np.all(pop_int32[0] >= 0) and np.all(pop_int32[0] <= 10)
True