Hoy estuve recordando la implementación que realizamos en SOLMOVI S.A. DE C.V. para resolver la ineficiencia que teníamos en las rutas de reparto diario. Al administrar múltiples flotas repartidas en toda la ciudad, asignar choferes aleatoriamente era extremadamente ineficiente.
"La distancia más corta entre dos puntos es una línea recta, pero cuando tienes 2,000 puntos en una ciudad, la distancia más corta es un buen algoritmo."
1. Planteamiento Matemático
Para solucionar el caos logístico, propuse utilizar el algoritmo de K-Means. El objetivo era minimizar la varianza intra-cluster, lo que significa agrupar los puntos de entrega que estén lo más cerca posible unos de otros geográficamente.
La función objetivo (inercia) que el algoritmo buscó minimizar se define como:
$$ J = \sum_{j=1}^{k} \sum_{i=1}^{n} ||x_i^{(j)} - c_j||^2 $$
Donde k es el número de choferes disponibles (clústeres) y c_j representa
el centroide de la ruta.
2. Implementación Técnica en Python
Utilicé Python junto con `scikit-learn` y `pandas` para llevar esto a la realidad procesando los datasets de clientes:
import pandas as pd
from sklearn.cluster import KMeans
# Cargando dataset de rutas logísticas del día (lat, lon)
df = pd.read_csv('entregas_diarias.csv')
# K = Número de choferes/camiones disponibles
k_choferes = 15
kmeans = KMeans(n_clusters=k_choferes, random_state=42)
# Entrenar modelo
df['cluster_asignado'] = kmeans.fit_predict(df[['latitud', 'longitud']])
print("Asignación completada.")
3. Resultados y Cierre del Día
El impacto fue inmediato. En la fase de pruebas documentamos una reducción real del 25% en el tiempo de traslado promedio, además de un ahorro sustancial en combustible.
Mañana seguiré detallando cómo integré este script dentro de Power BI para que el área de operaciones pudiera ver los clusters en un mapa en tiempo real.