将仓库定位在 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 中创建热图:R 中的Leaflet 热图

我还使用其他包来可视化客户需求的空间分布,包括 deckgl:Using deckgl in R for spatial data visualization

Leave a Reply

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Close

其他操作