La investigación de operaciones proporciona una variedad de algoritmos para determinar las soluciones óptimas exactas para los problemas de ubicación de los almacenes. Sin embargo, estos algoritmos requieren una matriz de costos, especificando el costo de abastecimiento del cliente i desde el almacén j, para cada cliente y cada almacén.
A continuación, propongo un algoritmo para especificar esta matriz de costos de manera que se puedan aplicar estos algoritmos. El cálculo se basa en distancias euclidianas como medida de costo, es decir, asume costos variables escalados linealmente basados en distancias euclidianas.
# una función para calcular distancias euclidianas, basada en dos vectores numéricos como entrada
euclidean_distance <- function(df1,df2){
sqrt((df1[,1]-df2[,1])**2+(df1[,2]-df2[,2])**2)
}
# parámetros: df con coordenadas de almacén, df con coordenadas de clientes
cost_matrix <- function(warehouses,customers){
matrix <- as.data.frame(matrix(nrow=nrow(customers),ncol=nrow(warehouses)))
# applying euclidean distances
for(i in 1:nrow(customers)){
df <- as.data.frame(matrix(nrow=nrow(warehouses),ncol=2))
df[,1] <- as.numeric(rep(customers[i,1],times=nrow(df)))
df[,2] <- as.numeric(rep(customers[i,2],times=nrow(df)))
matrix[i,] <- euclidean_distance(df,warehouses)
}
# matriz de costo de retorno
matrix
}
Realizo una prueba simple en el fragmento de código a continuación e imprimo la matriz de costos en la parte inferior.
# ubicaciones de almacenes candidatos discretos, por latitud y longitud
warehouse_df <- as.data.frame(matrix(nrow=3,ncol=2))
colnames(warehouse_df)<-c("lat","long")
warehouse_df$lat <- runif(n=3,min=-90,max=90)
warehouse_df$long <- runif(n=3,min=-180,max=180)
head(warehouse_df)
## lat long
## 1 -44.17554 102.08728
## 2 -58.51864 -160.25027
## 3 -56.54944 -11.30273
# ubicaciones de clientes
customers_df <- as.data.frame(matrix(nrow=4,ncol=2))
colnames(customers_df)<-c("lat","long")
customers_df$lat <- runif(n=4,min=-90,max=90)
customers_df$long <- runif(n=4,min=-180,max=180)
head(customers_df)
## lat long
## 1 -15.70044 171.1968
## 2 -87.68773 -156.7455
## 3 -62.35740 117.7821
## 4 -85.57747 -102.7820
# prueba de función de matriz de costos
cost_matrix(warehouse_df,customers_df)
## V1 V2 V3
## 1 74.74596 334.20139 187.0153
## 2 262.46471 29.37890 148.7387
## 3 24.01888 278.05884 129.2154
## 4 209.01088 63.51993 95.9744
En algunas de mis otras publicaciones, puede encontrar ejemplos sobre cómo ubicar almacenes en el centro de masa (cálculo del centro de masa en R) y cómo asignar clientes al almacén más cercano (problema de asignación de clientes). También proporcioné un ejemplo sobre cómo agrupar a los clientes en grupos, en función de su proximidad espacial (agrupación de clientes de proximidad espacial en R).
Por último, también he escrito una publicación sobre cómo ubicar varios almacenes en cada centro de masa (ubicar varios almacenes en el centro de masa).
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply