R-Code zur Erstellung einer Kostenmatrix für diskrete Lagerortprobleme

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.

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

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

Close

Meta