13 DE ABRIL DE 2026
El problema de enrutamiento de vehículos en distribución farmacéutica
Cuando un hospital necesita sus medicamentos antes que una farmacia, el algoritmo decide quién se atiende primero. Un recorrido técnico por el problema y cómo lo resolvemos.
El problema
Imagina esto: tienes un almacén de distribución farmacéutica en Ciudad de México. Cada mañana debes entregar medicamentos de cadena de frío a 30 ubicaciones — algunos son hospitales, otros son farmacias. Cada cliente tiene una ventana de tiempo, una demanda en kg y una prioridad. Tus vehículos tienen capacidad limitada y consumen diésel que genera emisiones de carbono. ¿Cómo planificas las rutas?
Esto no es un ejercicio académico. Es un problema real que se resuelve todos los días con niveles variables de calidad. La diferencia entre una planificación buena y una mala se mide en:
- Costo de combustible y refrigeración
- Emisiones de CO2 generadas
- Penalizaciones por ventanas de tiempo violadas
- Insatisfacción de hospitales que no recibieron sus medicamentos a tiempo
Modelo del problema
Este problema se conoce en la literatura como Pharmaceutical Distribution Routing Problem (PDRP). Formalmente:
- Un depósito central con vehículos homogéneos de capacidad Q
- n clientes con ubicación geográfica, demanda, ventana de tiempo y prioridad conocidas
- HOSPITALES tienen prioridad 1 (más alta); farmacias tienen prioridad 2
- Vehículos mantienen cadena de frío con unidades de refrigeración
- El consumo de combustible y refrigeración genera emisiones de carbono
- Violar la ventana de tiempo de un cliente incurre en penalización
El objetivo es minimizar la suma ponderada de:
- Costo fijo de uso de vehículos
- Costo de refrigeración (mayor cuando el vehículo está detenido con puertas abiertas)
- Costo de combustible por distancia y carga
- Costo de emisiones de carbono
- Penalización por ventanas de tiempo violadas
Algoritmos genéticos: la idea central
Un algoritmo genético (GA) es una metaheurística inspirada en la evolución biológica. Funciona con una población de soluciones candidatas (cromosomas) que evolucionan generación tras generación mediante:
- Selección: los individuos más aptos tienen mayor probabilidad de ser seleccionados como padres
- Crossover: dos padres combinan su información genética para producir hijos
- Mutación: con cierta probabilidad se altera aleatoriamente parte del cromosoma para mantener diversidad
- Reemplazo: la población nueva reemplaza a la anterior, conservando a los mejores
La función de fitness evalúa qué tan buena es cada solución. En nuestro caso, el fitness es la función de costo total — mientras menor el costo, mejor el fitness.
Cromosoma: cómo codificamos una solución
Cada gen representa un cliente y su posición en el cromosoma determina el orden de visita. El decoder convierte la secuencia en rutas concretas asignándolas a vehículos, respetando la capacidad y generando la secuencia óptima de visitas por vehículo.
Chromosome = [C3, H2, C1, H1, C7, C4, C5] HGA con VNS: el algoritmo completo
El paper de Li et al. (2024) propone un Hybrid Genetic Algorithm (HGA) que combina GA con Variable Neighborhood Search (VNS) como operador de búsqueda local.
Variable Neighborhood Search
El VNS es lo que convierte un GA estándar en un HGA competitivo. Cuando una solución se estanca, cambiar la estructura de vecindad puede desbloquear mejoras que el operador actual no puede encontrar.
El VNS cyclea a través de múltiples estructuras de vecindad:
- 2-opt: invierte un segmento de la ruta
- Or-opt: mueve una secuencia de hasta 3 nodos a otra posición
- Relocate: mueve un nodo a otra ruta
- Exchange: intercambia dos nodos entre rutas
- Cross: intercambia segmentos entre dos rutas
Si no hay mejora con 2-opt, se prueba or-opt. Si tampoco mejora, se prueba relocate. El ciclo se repite hasta que se agotan todas las vecindades o se encuentra mejora.
Función objetivo
El modelo matemático desglosa el costo total en componentes específicos:
Costo_total = C_fijo + C_refrig + C_combustible + C_co2 + C_penalizacion
C_fijo = suma_k F_k (costo de activar vehículo k)
C_refrig = suma_k [t_mov_k * r_rate + t_det_k * r_rate_unload]
C_combustible = suma_k,e fuel_consumption(travel_e, load_e) * fuel_price
C_co2 = suma_k,e fuel_consumption(travel_e, load_e) * emission_factor
C_penalizacion = suma_i max(0, a_i - b_i) * w_i (si llega tarde) Probabilidades adaptativas
Una mejora sobre un GA básico es el uso de probabilidades adaptativas para crossover y mutación. En vez de fijar una probabilidad estática, el algoritmo la ajusta según el desempeño histórico: si el crossover reciente produjo buenas mejoras, la probabilidad aumenta; si no, se reduce. Esto permite que el algoritmo se adapte a la estructura del problema en tiempo real.
Conclusión
El problema de enrutamiento de vehículos en distribución farmacéutica es NP-hard, lo que significa que encontrar la solución óptima es computacionalmente intractable para instancias reales. Los algoritmos genéticos híbridos (HGA) con búsqueda local basada en VNS ofrecen un balance efectivo entre calidad de solución y tiempo de cómputo.
Los componentes clave son:
- La codificación del cromosoma como secuencia de clientes
- El decoder que respeta capacidad, ventanas de tiempo y prioridades
- El crossover y mutación con probabilidades adaptativas
- El VNS como mecanismo de intensificación local
- La función objetivo multicomponente que balancea costo, emisiones y servicio
Li, J., Peng, K., Deng, X., Wang, J., y Liu, A. (2024). Model and algorithm for pharmaceutical distribution routing problem considering customer priority and carbon emissions. Data-Centric Engineering, 5, e16. doi:10.1017/dce.2024.13
Artículo Open Access bajo licencia CC BY-NC 4.0.
Ver la implementación en acción
El algoritmo HGA descrito en este artículo está implementado y corriendo en una demo interactiva. Puedes cargar tus propios escenarios, definir clientes con prioridades y observar cómo el algoritmo toma decisiones de enrutamiento en tiempo real.
Ir a armatelaruta.dbug.mx