最优搜索,找到与其他点的距离之和最小的点

Optimal search, finding a point where the sum of distances to other points is the smallest

我有k个点,我想找到一个离它们最近的(不同的)点(新点和给定点之间的距离之和最小)

飞机上八分

如何编写一个程序,在 n 维 space 中给定 k 个点(例如 10 维 space 中的 16 个点)

如何编写这样的求解器?

但是,我不想使用现成的功能,虽然我会接受这样的解决方案

与其他点的距离之和最小的点称为这些点的空间中位数,也称为geometric median。可以通过R包Gmedian.

中实现的Weiszfeld算法推导出来

让我们用你的例子试试:

library(Gmedian)

X <- rbind(
  c(3, 4),
  c(5, 3),
  c(1, 8),
  c(4, 6),
  c(6, 6),
  c(0, 1),
  c(4, 6),
  c(2, 1)
)

W <- Weiszfeld(X)

> W
$median
         [,1]     [,2]
[1,] 3.472091 4.607492

$iter
[1] 76

这是获取距离总和的方法:

smedian <- c(W$median)
sum(
  apply(X, 1, function(x){
    sqrt(crossprod(x-smedian))
  })
)
# 21.95253

正如你所看到的,空间中位数与你得到的不同((4,4)),并且距离之和小于你得到的(22.84819)。