举一个例子:Permutation Game(interviewstreet.com)。我想知道我该如何处理这些问题。游戏理论算法:如何进行
P.S .:请不要发布完整的算法(因为这会破坏乐趣),只是几个指针。
举一个例子:Permutation Game(interviewstreet.com)。我想知道我该如何处理这些问题。游戏理论算法:如何进行
P.S .:请不要发布完整的算法(因为这会破坏乐趣),只是几个指针。
我会设置一个小游戏,用小N和随机排列,然后画一个完整的α-β树 ...
http://en.wikipedia.org/wiki/Alpha-beta_pruning
的所有可能的行动,然后工作底部在每个点上为每个玩家提供最佳选择。
然后从那里一般化,一旦你看到模式。
在博弈论的术语,你需要使用后向归纳找到完美子博弈均衡。
你如何做出最佳选择? Alpha-beta没有处理最佳选择,它处理的是最好的,就像我们可以出现的一样,并猜测最佳选择是什么。 – IVlad
如果我们向前看所有可能移动的__complete__树,没有猜测。为示例游戏画一个完整的树。从底部开始,叶子上方的一层将有一个游戏位置,只有一个人选择要移除哪一块,在这些第一级分支处写下最佳选择。一旦他们完成了移动到二级分行。现在你知道第二级选择的结果是什么,(alpha beta)等等,直到你到达根。然后你将有一个单一的最佳动作序列,并会看到谁会赢得比赛。 –
啊,是的,这也是我的想法。 Alpha-Beta树让我想到了猜测,所以我们不去探索整个树。 +1。 – IVlad
笔和纸
使用笔和纸,请确保您了解游戏的规则完全相同,然后想为游戏中所有可能的策略。
对于这样一个相对简单的问题,从赢得比赛的时候回想一下,一次展开一步,并确保进行该步骤的玩家不能做出更好的步骤,这是最优性要求。
对于更复杂的问题,请阅读关于博弈论的维基百科。
N
比较小。在每个回合中,每个号码都有两种可能性:删除该号码或不删除该号码。尝试两种可能性,为每个测试用例产生一个O(N*2^N)
算法。在实践中,这个数字会比较低,因为游戏通常会在所有数字被移除之前结束,并且您可以经常缩短搜索时间。
所以你想要一个回溯功能,尝试删除数字的所有可能性,如果Alice获胜,则返回1
,如果Bob获胜,则返回2
。在深度k
(第一深度是k = 0
),如果k % 2 = 0
,则轮到Alice了。如果所有即时递归调用(深度为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
于是,爱丽丝肯定有一个成功的策略(当发挥最佳),如果她删除3
或先动2
,因为这两个的递归分支永不放弃鲍勃作为赢家。
实施例上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
落得通过去除5
如果Alice
开始获胜。如果你为她的其他可能性做同样的事情,你可能会得到相同的结果。因此,如果他打得最好,他肯定会赢。
你能否在这里列出问题?无法在浏览器中查看(并且可能会在未来消失)。 –