Lagerplatzierung im Massenmittelpunkt (R code)

In einem früheren Beitrag habe ich gezeigt, wie man Kunden mit einem bekannten Clustering-Algorithmus dem nächstgelegenen Lager zuordnen kann . In diesem Beitrag werde ich demonstrieren, wie ein einzelnes Lagerstandortproblem durch Anwendung der Massenschwerpunktberechnung in R angegangen werden kann. Die Idee ist, das Lager direkt im durchschnittlichen Bedarfszentrum unter Berücksichtigung der räumlichen Verteilung der Kundennachfrage zu platzieren.

Unten definiere ich die Schwerpunktfunktion. Es berücksichtigt x- und y-Koordinaten. Dh wir vereinfachen das Problem, indem wir die vertikale z-Achse unseres räumlichen Ortsproblems vernachlässigen. w steht für die Gewichte der jeweiligen Koordinaten. Dies könnte zB die Nachfrage nach Standort sein.

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

Als Nächstes erstelle ich einen Datenrahmen, der die Kundennachfrage darstellt. Ich wende Breiten- und Längenkoordinaten an. Der Wertebereich für den Breitengrad reicht von -90 bis +90. Der Wertebereich für den Längengrad liegt zwischen -180 und +180. Ich erstelle 40 Kunden mit zufälligem Standort und Nachfrage, irgendwo innerhalb des Koordinatensystems.

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)

Unten drucke ich den Header dieses Datenrahmens:

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

Mit diesem Datensatz kann ich den Massenmittelpunkt berechnen:

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

Um dieses Ergebnis zu bewerten, zeichne ich die Kundennachfrage mit ggplot2 auf:

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))

Die Schwerpunktmethode lässt sich gut mit der Heatmap-Visualisierung der räumlichen Verteilung der Kundennachfrage kombinieren. Lesen Sie dazu meinen Blogbeitrag zum Erstellen von Heatmaps in R mit dem Leaflet-Paket: Leaflet Heatmaps in R

Ich verwende auch andere Pakete, um die räumliche Verteilung der Kundennachfrage zu visualisieren, darunter deckglUsing deckgl in R for räumliche Datenvisualisierung.

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Close

Meta