【问题标题】:find common data point in multiple sets [closed]在多个集合中找到共同的数据点[关闭]
【发布时间】:2022-10-04 22:54:11
【问题描述】:

我有多组数据点。例如,第 1 组包含 5 个数据点,第 2 组包含 1 个数据点,第 3 组包含 10 个等。我需要从每组中选择一个数据点,以使这些选定点之间的距离最小。要使用的任何基于 Python 的函数都将非常有帮助

【问题讨论】:

  • 我认为这基本上是旅行推销员问题的一种变体,它是 NP Hard 但有很多实现你可以用谷歌搜索
  • 不同之处在于,在这种情况下,您不能通过给定集合中的多个节点。我必须从每组中选择一个数据点,不超过一个。我认为有一种方法可以在循环中使用一些内置函数。谢谢
  • 据我所知,没有内置程序可以为您解决这个问题...

标签: python optimization regression


【解决方案1】:

一个简单的混合整数规划模型看起来像:

 data:
      dist[i,j] 'distance between points'
      data structure indicating which points are in group g         
 binary variables:
      x[i]    '1 iff point i is selected'
      y[i,j]  '1 iff points i and j are selected'
 objective:
      min sum((i,j) where i<j, dist[i,j]*y[i,j])
 constraints:
      sum(i where i is in group g, x[i]) = 1   for all groups g
      y[i,j] >= x[i] + x[j] - 1                for all i<j
   

第一个约束说:从每个组中选择一个点。第二个说:如果点 i 和 j 被选中,那么 y[i,j]=1。目标计算所选点之间所有距离的总和(注意不要重复计算距离)。

如果 i 和 j 在同一组中,我们可以通过利用 y[i,j]=0 来优化索引。

这是一个线性 MIP 模型,可以由任何 MIP 求解器求解。当然,更好的求解器会更快地求解。

使用 100 个点和 10 个组的随机数据集,使用随机距离找到经过验证的最佳解决方案需要 27 秒。 (这个随机数据集可能会或可能不会比真实数据集困难得多)。

该模型与 TSP 模型几乎没有共同之处。

这是一个较小数据集(50 个点,5 个组,随机坐标,笛卡尔距离)的可视化:

【讨论】:

  • 你用的是什么求解器?
  • 我认为这是与Cplex有关的。
猜你喜欢
  • 1970-01-01
  • 2021-08-09
  • 2018-11-05
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
相关资源
最近更新 更多