逻辑游戏:最大化(或最小化)两个代理人见面的机会

时间:2011-12-01 11:09:42

标签: python algorithm optimization language-agnostic logic

  

注意:此问题被标记为语言无关 python ,因为我主要关心的是找出实施解决方案的算法问题,但有关如何在python中有效地实现它(=快速执行!)的信息是一个加号。

游戏规则:

  • 想象两个团队中的一个 A代理An)和一个 B代理Bn)。
  • 在游戏空间中,可以占用一定数量的可用插槽Sn)。
  • 每次转发时,每位代理都会获得一个他/她可以占用的插槽子集。
  • 一个代理可以在时只占用一个插槽,但是每个插槽可以由两个不同的代理占用,前提是它们各自来自不同的团队

问题:

我正在尝试找到 高效方式来计算A代理商的最佳移动,其中“最佳移动”意味着最大化或最小化占用团队B占用的相同位置的机会。团队B的移动事先不知道。

示例方案:

这种情况故意是微不足道的。它只是为了说明游戏机制。

A1 can occupy S1, S2
A2 can occupy S2, S3
B1 can occupy S1, S2

在这种情况下,解决方案很明显:A1 → S1A2 → S2是保证与B1会面的选项[因为B1无法避免占用{{1}或S1],而S2A2 → S3是最大限度地避免A1 → random(S1, S2)的机会。

现实场景:

在现实生活中,插槽可以是数百个,每个团队中的代理可以是几十个。到目前为止我尝试过的天真实施的难点在于我基本上考虑了团队B1的每一个可能的移动集合,并为B评分每个可能的替代移动集。所以,我的计算时间呈指数增长。

尽管如此,我不确定这是一个只能通过“蛮力”解决的问题。即使是这种情况我也不知道:

  1. 如果最佳蛮力解决方案必然呈指数增长(按时间)。
  2. 如果有办法计算非最佳的,本地最佳的解决方案。
  3. 谢谢!

4 个答案:

答案 0 :(得分:5)

两个团队的成员和插槽定义了一个三方图A-S-B,边缘由可能的移动给出。由一个小组的成员和成员组成的二分子图是有意义的;为团队A成员调用这些A-S图表,为团队B成员调用S-B。您可以使用S-B图表为插槽分配值,然后使用S-A图表选择最大化或最小化团队A值的移动。

对插槽值的适当选择是在该插槽中找到B队成员的可能性。这样,团队A的一组移动的值是时隙值的总和,即,将找到团队B成员的预期时隙数。请注意,团队成员的行动并不是独立的,因此这两个阶段都存在一些挑战。

考虑到插槽的值,为团队A选择移动成为标准问题:assignment problem。这与missno的答案中建议的最大二分匹配有关,但需要考虑时隙的值;边缘的权重可以等于边缘入射的槽的值,最大加权的二分匹配等同于分配问题。使用标准算法来解决(或近似)这部分问题。

那么我们如何为插槽分配值?我建议只为团队B的成员生成随机移动,计算插槽的占用频率,并将计数除以您考虑的样本移动次数。从生成一组随机动作的难度来看,这一点并不十分清楚;假设每个团队成员都可以选择留在原地,只需随机选择每个成员的移动即可。

两个阶段的简化因素是有一种简单的方法可以将问题分解为独立的子问题。二分图的连通组件显示哪些团队成员可以以干扰其他人的方式移动,例如,如果团队成员在董事会的不同部分被分成两组,则可以独立地处理这些组。这适用于两个阶段,包括使用S-B图表概率评估广告位并优化A-S图表中的分配。当然,如果任何组件足够小,您可以始终枚举可能性并完全解决子问题。

答案 1 :(得分:3)

这是一种蛮力的解决方案,但可能不如明确列举所有可能性的那些粗暴。正如其他解决方案所述,此问题与matchings上的bipartite graph有关。

第1步:计算每个网站被 B 代理占用的概率

构建以下二分图。顶点是 B 代理B1,B2,...,BK和网站S1,S2,...,SN,如果代理Bi,则SjBi之间存在边缘}可以占用网站Sj。在此图表中找到所有最大匹配(或最大匹配,如果这是 B 代理的算法),比如它们有M。对于每个网站Si,网站被 B 代理占用的概率为

Pi = #(matchings using Si) / M

要考虑的算法

第2步:找到 A 代理商的最高权重匹配

构造以下边缘加权二分图。顶点是 A 代理A1,A2,...,AL和网站S1,S2,...,SN,如果代理Ai,则SjAi之间存在边缘}可以占用网站Sj,此边缘的权重为Pi。找到最大或最小重量的最大匹配。

要考虑的算法

现在,这只不过是对问题的重述,但也许以这种方式思考它会导致一种不那么野蛮的蛮力方法。例如,一旦完成第1步,您可以采用贪婪算法为 A 代理选择游戏,方法是包含具有最高/最低概率的Si。虽然找到匹配可能很困难,但知道是否存在匹配却不是。您可以使用Hall's marriage theorem确定在选择最多/最不可能Si时是否存在完美匹配。

答案 2 :(得分:1)

如果我理解正确,一旦你知道B的位置就找到A的最优策略的问题与在二分图中找到maximum matching相同。

第一组顶点代表A代理,第二组顶点代表B代理所对的槽,如果代理可以选择占用槽,则有一条边。

问题是找到最大边数,你可以在没有顶点接触到一条边的情况下进行重叠。

有简单的多项式算法来解决这个问题。其中最经典的是基于augmenting paths的那个。

while you can find a path, augment the path

a path is a sequence of vertices a1, b1, a2, b2, ... an, bn such that
  ai -> bi is an unmatched edge
  bi -> a(i+1) is a matched edge
  a1 and bn are unmatched

to augment a path
  match all the unmatched edges (ai -> bi)
  unmatch all the matched edges (bi -> a(i+1))
  (this results in one aditional matched edge after the iteration)

这个算法的一个天真的实现是O(V * E),但是你可以在某处找到更高效的二分匹配python实现。

答案 3 :(得分:-3)

这不是编程问题,而是游戏理论问题。以下是该问题的博弈论分析草图。

我们有两个玩家(A和B)的游戏。双人游戏总是零和游戏,即一个玩家的收益是另一个玩家的损失。即使游戏收益不是零和(即有结果给两个玩家带来正面回报),收益总是可以归一化(取其差异),所以我们可以假设这里的游戏也是零而不失一般性。 -sum游戏。由此我们推断,如果A的目标是最大化[最小化]与B代理人的会议次数,那么B的目标是最小化[最大化]与A代理人的会议次数。

基于该描述,进一步假设A和B同时选择它们的移动,即A选择A的代理的时隙而不知道B的代理将采用哪个时隙,反之亦然。如果没有这个假设,即如果B可以看到A的移动,那么B很容易“赢”。

设X是可用时隙的A代理的所有可能分配的集合(遵守当前回合或转弯的约束),即X是时隙的一组子集;每个子集表示代理正好分配给子集中的那些槽。类似地,让Y成为B代理到可用时隙的所有可能分配的集合(类似地遵守B代理的约束)。现在有四场比赛。在每个游戏A中选择一个X的分数x和b选择Y的元素y,之后:

  • 在游戏I.a中,如果x和y共享一个插槽,则A获胜,否则B获胜(在此游戏中,A试图强制至少召开一次会议)
  • 在游戏I.b中,A获得的积极回报相当于x和y中常见位置的数量(在此游戏中,A试图最大化会议次数)
  • 在游戏II.a中,如果x和y不共享一个插槽,则A获胜,否则B获胜(在此游戏中,A试图避免任何会议)
  • 在游戏II.b中,A获得相当于x和y中常见位置数的负收益(在此游戏中,A试图最小化会议数量)

所有这些游戏都可以使用标准的游戏理论技术进行分析。我们专注于游戏I.a,并将其余部分作为练习留给读者。如果Y的元素y可用,使得X中没有x与y共享一个槽,则B选择y并获胜;因此,假设不是,即假设Y中的每个y对应于X中的至少一个x,使得x和y共享一个时隙。 A不能通过任何确定性策略发挥作用,因为B可以通过选择不与确定性选择的x共享时隙的y来对抗它;因此A必须采用混合策略,即一种随机策略,与混合策略1/3 - 1/3 - 1/3完全相同,最适合Roshambo(摇滚剪刀)。 B也将采取混合策略作为回应。 X和Y的不同元素的概率由匹配集的数量决定,即,具有多个Y的公共时隙的X的元素x在混合策略中具有比具有仅具有公共时隙的那些具有更高概率的概率。几个Y.

计算稳定的混合策略(这场比赛的纳什均衡)在理论上是直截了当的,可以参考任何关于博弈论的基本参考。