博弈论算法:如何进行

时间:2012-06-15 11:11:40

标签: algorithm game-theory

举个例子:Permutation Game(interviewstreet.com)。我想知道如何处理这些问题。

P.S。:请不要发布完整的算法(因为这会破坏乐趣),只需几点。

3 个答案:

答案 0 :(得分:1)

我会设置一个小N和随机排列的小游戏,然后绘制一个完整的 Alpha-Beta树 ......

http://en.wikipedia.org/wiki/Alpha-beta_pruning

所有可能的动作,然后自下而上地为每个玩家在每个点做出最佳选择。

一旦看到模式,就从那里推广。

在博弈论术语中,您需要使用 Backward Induction 来找到子博弈完美均衡

答案 1 :(得分:1)

N相当小。在每个回合中,每个数字有两种可能性:删除该数字或不删除该数字。尝试两种可能性,为每个测试用例生成O(N*2^N)算法。在实践中,这将是较低的,因为游戏通常在所有数字被移除之前结束,并且您可以经常缩短搜索时间。

所以你想要一个回溯函数,它尝试删除数字的所有可能性,如果Alice获胜则返回1,如果Bob获胜则返回2。深度k(第一深度为k = 0),如果k % 2 = 0,那么它就是爱丽丝。如果所有直接递归调用(深度为k + 1)返回1,则获胜。如果其中至少有一个返回2,那么她就输了,因为鲍勃至少有一种方法可以获胜。

1 3 2上运行示例:

k = 0 - Alice removes 1:
    k = 1 - Bob removes 3 => Bob wins because only 2 remains
          - Bob removes 2 => Bob wins because only 3 remains (note: this step
            is not needed, as Bob already proved he can win at this k = 1)
      - Alice removes 3 => Alice wins because 1 2 is increasing
      - Alice removes 2 => Alice wins because 1 3 is increasing

所以,如果她在第一步中移除了32,那么Alice肯定有一个获胜策略(当两者都达到最佳状态时),因为这两者的递归分支从未给Bob带来胜利。< / p>

5 3 2 1 4上运行的示例(部分运行):

k = 0 - Alice removes 5
    k = 1 - Bob removes 3
        k = 2 - Alice removes 2 => 1 4 => Alice wins
    k = 1 - Bob removes 2
        k = 2 - Alice removes 3 => 1 4 => Alice wins
    k = 1 - Bob removes 1
        k = 2 - Alice removes 3 => 2 4 => Alice wins
    k = 1 - Bob removes 4
        k = 2 - Alice removes 3
            k = 3 - Whatever Bob removes, he wins
        k = 2 - Alice removes 2
            k = 3 - Whatever Bob removes, he wins
        k = 2 - Alice removes 1
            k = 3 - Whatever Bob removes, he wins
  ...

正如您所看到的,Bob至少有一种方法可以通过删除Alice5开始获胜。如果你为她的其他可能性做同样的事情,你可能会得到相同的结果。因此,Bob如果他以最佳状态发挥肯定会获胜。

答案 2 :(得分:0)

笔和纸

使用笔和纸,确保您完全理解游戏规则,然后考虑游戏的所有可能策略。

对于这样一个相对简单的问题,从赢得比赛的时候开始思考,一次展开一步并确保做出这一步的玩家不能做得更好,这就是最优性要求。 / p>

对于更复杂的问题,请阅读有关博弈论的维基百科。

相关问题