R의 질량 중심에 창고 찾기

이전 게시물 에서 잘 알려진 클러스터링 알고리즘을 사용하여 고객을 가장 가까운 창고에 할당 하는 방법을 시연 했습니다. 이 게시물에서는 R의 질량 중심 계산을 적용하여 단일 창고 위치 문제에 접근하는 방법을 보여줍니다. 아이디어는 고객 수요의 공간 분포를 고려하여 평균 수요 중심에 창고를 배치하는 것입니다.

아래에서 질량 중심 함수를 정의합니다. x 및 y 좌표를 고려합니다. 즉, 공간 위치 문제의 수직 z축을 무시하여 문제를 단순화합니다. w는 각 좌표의 가중치를 나타냅니다. 이것은 예를 들어 위치별 수요일 수 있습니다.

center_of_mass <- function(x,y,w){
  c(crossprod(x,w)/sum(w),crossprod(y,w)/sum(w))
}

다음으로 고객 요구를 나타내는 데이터 프레임을 만듭니다. 위도와 경도 좌표를 적용합니다. 위도 값 범위는 -90에서 +90까지입니다. 경도 값 범위는 -180에서 +180까지입니다. 좌표계 내 어딘가에 임의의 위치와 수요를 가진 40명의 고객을 생성합니다.

customer_df <- as.data.frame(matrix(nrow=40,ncol=3))
colnames(customer_df) <- c("lat","long","demand")

customer_df$lat <- runif(n=40,min=-90,max=90)
customer_df$long <- runif(n=40,min=-180,max=180)
customer_df$demand <- sample(x=1:100,size=40,replace=TRUE)

아래에서 해당 데이터 프레임의 헤더를 인쇄합니다.

head(customer_df)
##         lat      long demand
## 1 -46.40781  43.13533      4
## 2 -29.06806  98.97764     72
## 3 -75.84997 127.47619     44
## 4 -54.37377  55.16857     66
## 5  71.67371 178.98597     21
## 6 -34.03587 -42.88747    100

해당 데이터 세트를 사용하여 질량 중심을 계산할 수 있습니다.

center_of_mass(customer_df$lat,customer_df$long,customer_df$demand)
## [1] -2.80068 12.49750

이 결과를 평가하기 위해 ggplot2를 사용하여 고객 수요를 플로팅합니다.

library(ggplot2)
joint_df <- rbind(customer_df,c(center_of_mass(customer_df$lat,customer_df$long,customer_df$demand),50))
joint_df$type <- c(rep(x="customer",times=40),"warehouse")
ggplot(data=joint_df) + geom_point(mapping=aes(x=lat,y=long,size=demand,color=type))

질량 중심 방법은 공간 고객 수요 분포의 히트맵 시각화와 잘 결합될 수 있습니다. 이를 위해 Leaflet 패키지를 사용하여 R에서 히트맵을 생성하는 방법에 대한 내 블로그 게시물을 읽을 수 있습니다. Leaflet heatmaps in R

또한 Deckgl을 포함하여 다른 패키지를 사용하여 고객 수요의 공간 분포를 시각화 합니다. 공간 데이터 시각화를 위해 R에서 deckgl 사용.

You May Also Like

Leave a Reply

Leave a Reply

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

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.