使用消息配对人的算法

时间:2014-01-29 11:23:30

标签: algorithm

想象一下,你有很多人都想从这群人中找到一个伙伴。每个人都可以向整个团体或任何特定的人发布公告。目标是尽可能在成对中结束。

新人可以在配对过程中进入。一旦两个人尽可能最佳地配对,他们就会退出小组。

每个人都有一个"得分"对于每个人。在可能的情况下,人们应该与得分较高的合作伙伴配对。然而,更重要的是人们找到对,而不是那些对是严格最优的。因此,例如,有两个人"临时配对"是合理的。然后等一下,看看是否有更好的合作伙伴出现;如果没有,那么将两者妥善配对,然后他们退出小组。

没有中央控制实体:所有工作都必须通过在人们之间传递信息(或广播到整个组)来完成。

这样做的最佳算法是什么?

显然,我试图避免的问题是A随机选择B然后说'嘿,是我的伴侣"同时B对C&34说:嘿,做我的伙伴"。此外,A不能宣布&34;有人是我的伙伴!"因为A会得到每个人的回复,如果B也宣布了#34;某人是我的伙伴" B应该回应A的公告吗?

这与http://en.wikipedia.org/wiki/Stable_roommates_problem类似,但是(a)关于找到"稳定" (严格优化)解决方案,这在我的问题中是有用的但不是必需的,并且(b)它假定组的大小是固定的并且不会改变,而我的问题允许新的参赛者进入组#34 ;配对选举"正在继续。

3 个答案:

答案 0 :(得分:2)

你似乎没有给出一种方法来描述"善良"配对,或需要什么信息来确定。例如,我能否知道我的善良"适合没有消息传递的人吗?我有完美的信息吗?在这种情况下,有一些众所周知的快速网络流量型配方将找到最佳的整体解决方案。只要每个人"独立"得出这个结论没有问题。

了解这种良性度量是否对称也非常重要。得分(A,B)=得分(B,A)?如果可以建立,传递性也是有用的。但这似乎不太可能。

如果另一方面,我需要给某人发消息以找出我们的合适,那么我们就会遇到菜单类型问题。例如,查找Feynmann's Restaurant problem,它会告诉您如果想要通过一定数量的选择获得最大效用,您应该在固定大小的菜单中尝试多少个菜肴。

还不清楚你是否打算将其作为代表性的代理人类型问题(每个人都必须使用最佳解决方案)或游戏理论类型解决方案(用户应该如何最大化他们的个人得分)。例如,最佳解决方案可能是某种混合均衡,其中一些人广播他们的属性,而其他人计算他们的分数并且看起来最好看。

这是一个引人入胜的问题,但我不确定它是否已经定义得很好。

答案 1 :(得分:0)

似乎你只需要为每对选择一个“棍子或扭曲”加权以允许“足够好”退出,想想“在迪斯科舞厅关闭时间”。

每个人都以一些粘性因子= 0开始。 首先选择一个临时合作伙伴(通过一些合理的启发式/随机哈希/无论如何)

然后迭代这样的事情:

  1. 如果你的临时伴侣也选择了你,你就是一对
  2. 如果您的临时合作伙伴尚未选择您,并且您“足够粘”,他们仍然是您的临时合作伙伴
  3. 如果您的临时合作伙伴尚未选择您,并且您“不够粘”,请选择其他合作伙伴
  4. 如果求婚者已经陷入困境,那么在下一轮认为他们更有吸引力
  5. 如果你还在跑步,增加'粘性'

答案 2 :(得分:0)

取决于所涉及的人数,您可以将所有传入数据存储在一个客户端中,并在客户端广播时将其与消息一起发送。 示例:

现在只有3个人A B C

广播

B商店,{A,msg:xxx}

B broad casts {A,msg:xxx} {me(B),msg:yyy}

商店,{B,msg:yyy}

C商店,{A,msg:xxx},{B,msg:yyy}

D加入,广播以获取所有人的请求

A回送{B,msg:yyy} {me(A),msg:xxx}

B发回{A,msg:xxx} {me(B),msg:yyy}

C不是广播,所以不发送任何内容

D处理所有传入的请求并进行一些分析以确定该区域中可能的人

A和B匹配

A,B广播删除A,B

C商店,{}

D商店,{}