Operations Research bietet eine Reihe von Algorithmen zur Ermittlung exakter optimaler Lösungen diskreter Lagerortprobleme. Diese Algorithmen erfordern jedoch eine Kostenmatrix, in der die Kosten für die Lieferung des Kunden i aus dem Lager j für jeden Kunden und jedes Lager angegeben werden.
Im Folgenden schlage ich einen Algorithmus zur Spezifizierung dieser Kostenmatrix vor. Die Berechnung basiert auf euklidischen Abständen als Kostenmaß, d.h. nimmt linear skalierte variable Kosten basierend auf euklidischen Abständen an.
# eine Funktion zur Berechnung euklidischer Abstände basierend auf zwei numerischen Vektoren als Eingabe
euclidean_distance <- function(df1,df2){
sqrt((df1[,1]-df2[,1])**2+(df1[,2]-df2[,2])**2)
}
# Parameter: df mit Lagerkoordinaten, df mit Kundenkoordinaten
cost_matrix <- function(warehouses,customers){
matrix <- as.data.frame(matrix(nrow=nrow(customers),ncol=nrow(warehouses)))
# Anwenden euklidischer Abstände
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)
}
# Rückgabekostenmatrix
matrix
}
Ich führe einen einfachen Test im folgenden Code-Snippet durch und drucke die Kostenmatrix unten aus.
# diskrete Lagerorte der Kandidaten nach Breiten- und Längengrad
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
# Kundenstandorte
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
# Testkostenmatrixfunktion
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
In einigen meiner anderen Beiträge finden Sie Beispiele zur Lokalisierung von Lagern im Massenschwerpunkt (Massenschwerpunktberechnung in R) und auch für die Zuordnung von Kunden zum nächstgelegenen Lager (Kundenzuordnungsproblem). Ich habe auch ein Beispiel gegeben, wie Kunden basierend auf ihrer räumlichen Nähe in Gruppen eingeteilt werden können (räumliche Kundengruppierung in R).
Zuletzt habe ich auch einen Beitrag darüber geschrieben, wie mehrere Lagerhäuser an jedem ihrer Massenschwerpunkte lokalisiert werden können.
Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply