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
Industriingeniør som gerne beskæftiger sig med optimering, simulation og matematisk modellering i R, SQL, VBA og Python
Leave a Reply