Algorithm 算法:将可加入游戏的用户与距离他最近的用户进行匹配

Algorithm 算法:将可加入游戏的用户与距离他最近的用户进行匹配,algorithm,location,match,Algorithm,Location,Match,我的项目匹配2个陌生人用户。因此,我有一个包含用户状态的数据库,当一个用户可以进行匹配时,我会将他与另一个陌生人进行匹配。 我添加了一个函数,根据该函数,如果用户共享他们的位置,请求匹配的用户将与距离他最近的用户匹配 实际上,尽管我每分钟有600多个活动用户,但当一个用户可用于匹配时,他将与最接近他的用户匹配,但由于没有其他首选项,队列始终由2个用户组成,因此最接近他的用户是第一个仍然可用且未匹配的用户 示例:我加入游戏(我有空)并等待其他用户。另一个用户加入游戏,他离我最近,但仅仅因为他是唯一

我的项目匹配2个陌生人用户。因此,我有一个包含用户状态的数据库,当一个用户可以进行匹配时,我会将他与另一个陌生人进行匹配。 我添加了一个函数,根据该函数,如果用户共享他们的位置,请求匹配的用户将与距离他最近的用户匹配

实际上,尽管我每分钟有600多个活动用户,但当一个用户可用于匹配时,他将与最接近他的用户匹配,但由于没有其他首选项,队列始终由2个用户组成,因此最接近他的用户是第一个仍然可用且未匹配的用户

示例:我加入游戏(我有空)并等待其他用户。另一个用户加入游戏,他离我最近,但仅仅因为他是唯一的一个

我想让它更真实。例如,我想仅当距离小于200公里时匹配用户,但问题是,该用户与200公里范围内的第一个用户匹配,但可能1秒后,距离小于前一个用户的其他用户可能会可用

示例:我加入了游戏,其他用户也加入了游戏,但他们不在200公里范围内。最后,一个用户在200公里的范围内加入游戏,他与我匹配,但可能一秒钟后出现的用户可能比我更接近


我怎样才能使它更真实?开发更好算法的想法。

我将介绍一些参数:

  • 匹配质量:在您的情况下,这似乎只是两个用户之间的距离,但您也可以使其取决于等待时间,例如,通过乘以已用秒数的函数,因此等待时间越长,可接受的距离就越长(最大的缺点是必须不断重新计算距离)
  • 质量保留:如果两个用户之间的匹配质量低于此阈值,则无法匹配
  • 最大等待时间:防止用户等待太久,如果匹配质量随着时间的推移而提高,则可以忽略此参数(它将由最大距离、质量公式和阈值隐式定义),但队列的行为更透明
  • 最短等待时间:允许队列填满(仅针对要匹配的用户,不针对匹配的用户)
  • 队列阈值:如果队列中的用户数高于此阈值,请立即匹配队列中的第一个用户,忽略最小等待时间
  • 可选:第二个更高的质量阈值,高于该阈值的用户将立即匹配,以稍微减少等待时间,因此每次向队列中添加用户时,您都可以计算与队列中第一个用户的匹配质量,如果高于该阈值,则立即匹配
如果您的目标是让所有用户都公平/平衡,那么最好总是将队列中的第一个用户与其最佳匹配者匹配(当他满足匹配条件时)。缺点是来自偏远地区的人可能会阻塞队列以获得“最长等待时间”。但这似乎是最可行的方法,因为用户可以保证被匹配,而不是永远等待(如果您总是试图在队列中找到最佳匹配,而不仅仅是队列中第一个用户的最佳匹配,会发生什么情况)