资源配置(最优策略)

时间:2011-02-28 23:17:24

标签: algorithm math discrete-mathematics game-theory

我知道这不是提出这个问题的正确位置,但也许是一个聪明人遇到并有解决方案。

我正在尝试编写电脑游戏,我需要一种算法来解决这个问题:

游戏在2名玩家之间进行。每边都有1.000美元。有三个“盒子”,每个玩家记下他要放入这些盒子里的钱。然后比较这些数量。谁在一个盒子里放了更多的钱,得分为1分(如果每个人得到半分)。获得更多积分的人赢得了对手1.000美元。示例游戏:

玩家A:[500,500,0] 球员B:[333,333,334]

玩家A获胜是因为他赢得了方框A和方框B(但输掉了方框C)。

问题:放钱的最佳策略是什么?

我还有更多问题要问(算法相关,而不是数学相关),但我需要首先知道这个问题的答案。

更新(1):经过一些研究后,我了解到这些类型的问题/游戏被称为Colonel Blotto Games。我尽了最大努力,发现了很少(高技术性)的文件。简而言之,我所遇到的问题(如上所述)被称为简单的Blotto游戏(只有三个具有对称资源的战场)。困难的是具有10个以上具有非对称资源的战场。我读过的所有文件都说简单的Blotto游戏很容易解决。问题是,他们中没有人真正说出那个“简单”的解决方案。

更新(2):我写了一个小动作文件来演示Tom Sirgedas提到的论文中的策略。您可以在megaswf进行测试。说明:单击三角形内的一个点。红色区域代表胜诉案例。蓝色区域代表失败的情况,微小的白色线代表抽奖。

3 个答案:

答案 0 :(得分:4)

我在本文中找到了一个最佳策略:http://www.rand.org/pubs/research_memoranda/2006/RM408.pdf

让我们称之为Blotto的战略。

enter image description here

请看上面的图表。您所做的任何移动都可以用三角形上的一个点来表示。论文中的策略是在六边形中随机选取一个点。选择更接近六边形边缘的点,概率更高(六边形中心为0概率,六边形轮廓线上最大概率线性缩放。六边形轮廓上的每个点具有相同的概率。)

此解决方案适用于“连续”Blotto,但我认为您对离散情况感兴趣(将N部队划分为3组)。当N是3的倍数时,将Blotto的策略应用于离散情况非常有效。对于N的其他值,我能够对六边形边界进行小幅调整,但效果非常好,但并不完美。

如果有一个策略可以击败这个,那么必须有一些静态的举动能够赢得Blotto的策略。没有,除了当N不是3的倍数时,似乎在大三角形和六边形相遇的线上的移动(例如移动< 0,.5,.5>)将赢得对Blotto的战略略微而不是失败。对于N = 100,差异似乎小于1%,并且对于较大的N继续收缩。

实施Blotto战略的代码:

// generate a random number in the range [0,x) -- compensate for rand()%x being slightly un-uniform
int rnd( int x ) { int r; while ( 1 ) { r = rand(); if ( r < RAND_MAX/x*x ) return r % x; } }

// distance from center of triangle/hexagon to (x,y,z), multiplied by 3 (trilinear coordinates)
int hexagonalDist3( int x, int y, int z, int N ) { return max(max(abs(N-x*3),abs(N-y*3)),abs(N-z*3)); }

void generateRandomSimpleBlottoMove( int& x, int& y, int& z, int totalTroops )
{
   int N = totalTroops;
   while ( true )
   {
      x = rnd(N+1);
      y = rnd(N+1);
      z = N-x-y;

      // keep only moves in hexagon, with moves closer to the border having higher probability
      double relativeProbabilityOfKeepingThisMove = hexagonalDist3(x,y,z,N) > N ? 0 : hexagonalDist3(x,y,z,N);

      // minor adjustment for hexagon border when N is not a multiple of 3 -- not perfect, but "very close"
      if ( N % 3 != 0 && hexagonalDist3(x,y,z,N) == N ) 
         relativeProbabilityOfKeepingThisMove = N*(N%3)/3; 

      // possibly keep our move 
      if ( rnd(N) < relativeProbabilityOfKeepingThisMove )
         break;
   }
}

答案 1 :(得分:0)

所以这实际上是一个博弈论问题(经济学)而不是一个离散的数学问题,重新标记你的问题可能会吸引你想要的那种关注。在博弈论中,“解决方案”的概念通常是Nash equilibrium。对于零和游戏,事实证明你要解决的算法是一个线性规划问题。有关如何设置的示例,请参阅此维基百科page

答案 2 :(得分:-1)

在我看来,证明这场比赛没有纯粹的纳什均衡是相当容易的。纯策略是固定策略,如[333,333,334]。我的证明草图如下:

  

对于玩家所采取的任何纯策略   A,玩家B可以找到另一个纯粹的   获得B 2分的战略。对于   例如,如果A播放[500,500,0]则播放B.   播放[501,0,499],或者如果A播放   [333,333,334]然后B出场   [500,500,0],依此类推。有   总是一种获得2分的方法。的   当然,这意味着玩家A会   得到1分。

     

同样,对于任何策略   玩家B,玩家A可以找到另一个   得到他的纯粹策略2.因此,   没有纯粹的纳什存在。

另外,我认为可以证明

的策略(适用于两者)

1/3 [500,500,0], 1/3 [500,0,500], 1/3 [0,500,500]

(以1/3概率发挥[500,500,0],以1/3概率发挥[500,0,500],以1/3概率发挥[0,500,500])是该游戏的混合纳什均衡。根据这一策略,他们的预期收益(#points)为3/2。这个证据对我来说似乎很费劲。也许别人会有一个简单的证明。

混合纳什关闭到“最佳”,我们可以得到。这场比赛可能还有其他混合的纳什均衡。