Placering af lager i massemidtpunkt i R

I et tidligere indlæg demonstrerede jeg, hvordan man kan tildele kunder til det nærmeste lager ved hjælp af en velkendt klyngealgoritme . I dette indlæg vil jeg demonstrere, hvordan et enkelt lagerlokaliseringsproblem kan gribes an ved at anvende massecenterberegning i R. Idéen er at placere lageret lige i det gennemsnitlige efterspørgselscenter, under hensyntagen til den rumlige fordeling af kundernes efterspørgsel.

Nedenfor definerer jeg massecentrets funktion. Den tager højde for x- og y-koordinater. Dvs. vi forenkler problemet ved at negligere den lodrette z-akse af vores rumlige placeringsproblem. w står for vægten af ​​de respektive koordinater. Dette kan f.eks. være efterspørgsel efter lokation.

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

Dernæst opretter jeg en dataramme, der repræsenterer kundernes efterspørgsel. Jeg anvender bredde- og længdegradskoordinater. Breddegradsværdiområdet er fra -90 til +90. Længdegradsværdiområdet er fra -180 til +180. Jeg opretter 40 kunder med tilfældig placering og efterspørgsel, et sted i koordinatsystemet.

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)

Nedenfor udskriver jeg overskriften på den dataramme:

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

Ved at bruge dette datasæt kan jeg beregne massecentret:

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

For at vurdere dette resultat plotter jeg kundernes efterspørgsel ved hjælp af 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))

Center of masse-metoden kan godt kombineres med heatmap-visualisering af rumlig kundebehovsfordeling. Til dette kan du læse mit blogindlæg om, hvordan du laver heatmaps i R, ved hjælp af Folderpakken: Leaflet heatmaps in R

Jeg bruger også andre pakker til at visualisere rumlig fordeling af kundernes efterspørgsel, herunder deckglBrug af deckgl i R til rumlig datavisualisering.

You May Also Like

Leave a Reply

Leave a Reply

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.