R-kode til konstruktion af en omkostningsmatrix til diskrete lagerplaceringsproblemer

Operations Research tilbyder en række algoritmer til bestemmelse af nøjagtige optimale løsninger, også mht. diskrete lagerplaceringsproblemer. Disse algoritmer kræver imidlertid en omkostningsmatrix. En omkostningsmatrix specificerer omkostningerne ved levering til kunde i fra lager j, for hver kunde og hvert lager.

Nedenfor foreslår jeg en algoritme til at specificere denne omkostningsmatrix. Beregningen er baseret på euklidiske afstande som et omkostningsmål, dvs. antager lineært skalerede variable omkostninger baseret på euklidiske afstande.

# en funktion til beregning af euklidiske afstande, baseret på to numeriske vektorer som input
euclidean_distance <- function(df1,df2){
  sqrt((df1[,1]-df2[,1])**2+(df1[,2]-df2[,2])**2)
}

# parametre: df med lagerkoordinater, df med kundekoordinater
cost_matrix <- function(warehouses,customers){
  matrix <- as.data.frame(matrix(nrow=nrow(customers),ncol=nrow(warehouses)))
  # anvender euklidiske afstande
  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)
  }
  # returomkostningsmatrix
  matrix
}

Jeg udfører en simpel test i nedenstående kodestykke og udskriver omkostningsmatrixen i bunden.

# diskrete kandidatlagerplaceringer efter breddegrad og længdegrad
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
# kundeplaceringer
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
# testomkostningsmatrixfunktion
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

Leave a Reply

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

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

Close

Meta