Ubicar el almacén en el centro de masa en R

En una publicación anterior, demostré cómo se pueden asignar clientes al almacén más cercano utilizando un conocido algoritmo de agrupamiento . En esta publicación, demostraré cómo se puede abordar un problema de ubicación de un solo almacén aplicando el cálculo del centro de masa en R. La idea es ubicar el almacén justo en el centro de demanda promedio, teniendo en cuenta la distribución espacial de la demanda del cliente.

A continuación, defino la función de centro de masa. Tiene en cuenta las coordenadas x e y. Es decir, simplificamos el problema despreciando el eje z vertical de nuestro problema de ubicación espacial. w representa los pesos de las respectivas coordenadas. Esto podría ser, por ejemplo, la demanda por ubicación.

center_of_mass <- function(x,y,w){
  c(crossprod(x,w)/sum(w),crossprod(y,w)/sum(w))
}

A continuación, creo un marco de datos que representa la demanda del cliente. Aplico coordenadas de latitud y longitud. El rango de valores de latitud es de -90 a +90. El rango de valores de longitud es de -180 a +180. Creo 40 clientes con ubicación y demanda aleatorias, en algún lugar dentro del sistema de coordenadas.

customer_df <- as.data.frame(matrix(nrow=40,ncol=3))
colnames(customer_df) <- c("lat","long","demand")

customer_df$lat <- runif(n=40,min=-90,max=90)
customer_df$long <- runif(n=40,min=-180,max=180)
customer_df$demand <- sample(x=1:100,size=40,replace=TRUE)

A continuación imprimo el encabezado de ese marco de datos:

head(customer_df)
##         lat      long demand
## 1 -46.40781  43.13533      4
## 2 -29.06806  98.97764     72
## 3 -75.84997 127.47619     44
## 4 -54.37377  55.16857     66
## 5  71.67371 178.98597     21
## 6 -34.03587 -42.88747    100

Usando ese conjunto de datos puedo calcular el centro de masa:

center_of_mass(customer_df$lat,customer_df$long,customer_df$demand)
## [1] -2.80068 12.49750

Para evaluar este resultado, tracé la demanda del cliente usando ggplot2:

library(ggplot2)
joint_df <- rbind(customer_df,c(center_of_mass(customer_df$lat,customer_df$long,customer_df$demand),50))
joint_df$type <- c(rep(x="customer",times=40),"warehouse")
ggplot(data=joint_df) + geom_point(mapping=aes(x=lat,y=long,size=demand,color=type))

El método del centro de masa se puede combinar bien con la visualización de mapas de calor de la distribución espacial de la demanda del cliente. Para esto, puedes leer mi entrada de blog sobre cómo crear mapas de calor en R, usando el paquete LeafletLeaflet heatmaps in R

También uso otros paquetes para visualizar la distribución espacial de la demanda del cliente, incluido deckglUso de deckgl en R para la visualización de datos espaciales.

You May Also Like

Leave a Reply

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.