개별 창고 위치 문제에 대한 비용 매트릭스를 구성하기위한 R 코드

운영 연구는 개별 창고 위치 문제에 대한 정확한 최적의 솔루션을 결정하기위한 다양한 알고리즘을 제공합니다. 그러나 이러한 알고리즘에는 각 고객 및 각 창고에 대해 창고 j에서 고객 i를 공급하는 비용을 지정하는 비용 매트릭스가 필요합니다.

아래에서는 이러한 알고리즘을 적용 할 수 있도록 비용 행렬을 지정하는 알고리즘을 제안합니다. 계산은 비용 측정 값으로 유클리드 거리를 기반으로합니다.

# 두 개의 숫자 벡터를 입력으로 기반으로 유클리드 거리를 계산하는 함수
euclidean_distance <- function(df1,df2){
  sqrt((df1[,1]-df2[,1])**2+(df1[,2]-df2[,2])**2)
}

# 매개 변수 : 창고 좌표가있는 df, 고객 좌표가있는 df
cost_matrix <- function(warehouses,customers){
  matrix <- as.data.frame(matrix(nrow=nrow(customers),ncol=nrow(warehouses)))
  # 유클리드 거리 적용
  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)
  }
  # 반품 비용 매트릭스
  matrix
}

아래 코드 스 니펫에서 간단한 테스트를 수행하고 하단에 비용 매트릭스를 인쇄합니다.

# 위도와 경도에 따른 개별 후보 창고 위치
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
# 고객 위치
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
# test cost matrix function
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

다른 게시물 중 일부는 질량 중심 (R의 질량 중심 계산)에서 창고를 찾는 방법과 가장 가까운 창고에 고객을 할당하는 방법 (고객 할당 문제)에 대한 예를 찾을 수 있습니다. 또한 공간적 근접성 (R의 공간적 근접성 고객 그룹화)을 기반으로 고객을 그룹으로 클러스터링하는 방법에 대한 예제를 제공했습니다.

마지막으로 각 질량 중심에서 여러 창고를 찾는 방법에 대한 게시물도 작성했습니다 (질량 중심에 여러 창고 위치 지정).

You May Also Like

Leave a Reply

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.