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

时间:2019-03-26 12:08:42

标签: r optimization solver

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

在飞机上八点

spread sheet image

如何编写一个程序,它将在n维空间中给定k个给定点(例如10维空间中的16个点)给我这样的点

spread sheet image

如何编写这样的求解器?

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

1 个答案:

答案 0 :(得分:0)

与其他点的距离之和最小的点称为这些点的<空间>中位数,也称为geometric median。它可以通过 Weiszfeld算法导出,该算法在R程序包Gmedian中实现。

让我们尝试您的示例:

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)。