【问题标题】:Optimal search, finding a point where the sum of distances to other points is the smallest最优搜索,寻找到其他点的距离之和最小的点
【发布时间】:2019-03-26 21:08:30
【问题描述】:

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

飞机上八点

如何编写一个程序,让我为 n 维空间中的 k 个给定点(例如 10 维空间中的 16 个点)获得这样的点

如何编写这样的求解器?

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

【问题讨论】:

  • 请展示你到目前为止所做的事情。该平台旨在帮助而不是解决您的问题,因此您可以复制粘贴它。
  • @main.c 我尝试使用“lpSolve”和“optim”函数,但我的技能仍然太小,我无法编写工作函数

标签: r optimization solver


【解决方案1】:

到其他点的距离之和最小的点称为这些点的空间中值,也称为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)。

【讨论】:

  • @Stéphane Laurent 非常感谢
猜你喜欢
  • 2020-09-24
  • 2011-06-04
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
相关资源
最近更新 更多