基于参数和约束匹配数据

时间:2015-10-10 14:04:57

标签: algorithm sorting nearest-neighbor

我一直在研究k近邻算法,因为我可能正在开发一个在不久的将来匹配战士(拳击手)的应用程序。

我的问题的原因是,根据规则集,找出基于多个参数和约束匹配战斗机时使用的最佳方法/算法。

每架战斗机的相关属性如下:

  • 年龄(战士将被分配到一个年龄组(15,17,19,精英)
  • 重量
  • 战斗量

现在有一些规则集可用于匹配战士时可以允许的内容:

  • 战士之间最长2年(除非是精英)
  • 最大重量差异为3千克

现在显然是完美匹配,所有与会者都会与另一个符合规则集的拳击手相匹配。 而主要的优先事项是尽可能多地匹配战士。

K-nn是走的路还是有更好的方法? 如果是这样的话?

2 个答案:

答案 0 :(得分:1)

评论太长了。

为了获得K-nn的最佳结果,我建议使用主要成分。这些允许您使用更多维度,并且可以很好地将数据传播到整个空间,以获得良好的社区。

至于合并现有规则,您有两种选择。也许,最好的方法是将它构建到你的距离函数中。或者,您可以将一个大的邻域并将其构建到组合函数中。

答案 1 :(得分:0)

我会选择k-Nearest Neighbor搜索。由于您的数据集位于低维空间(即3),因此我将使用CGAL来执行任务。

现在,您唯一需要做的就是创建一个这样的距离函数:

float boxers_dist(Boxer a, Boxer b) {
  if(abs(a.year - b.year) > 2 || abs(a.weight - b.weight) > e)
    return inf;
  // think how you should use the 3 dimensions you have, to compute distance
}

你完成了......现在去战斗吧!