博弈问题研究

简介SG函数:

       SG函数是对游戏中每个节点的评估函数。它的定义如下:

              F(v)=mex{f(u)图中有一条vu的边}

       其中,mexminmal excludant)是定义在整数集合上的操作。它的自变量是任意整数集合,函数值是不属于该集合的最小自然数。

       

       事实上,所有的SG-组合游戏都存在相应的游戏图,我们完全可以根据游侠的拓扑关系来逐一算出每个状态点的SG函数(事实上我们只需要知道该节点的SG函数值是否为0.这样,我们就可以知道对于某一个状态,是先手必胜局还是先手必败局。对应问题:

经典SG问题:

       取石子游戏:

桌面上有N堆石子,游戏者轮流取石子。每次只能从一堆中取出任意数目的的石子,但是不能不取。      

(1)   最后取走石子的获胜。

(2)   最后取的失败。Pku 3480

(3)   只能取固定数目的额石子。(回到问题的王道,求SG函数)hdu 1536

SG问题的性质:

对于任意局面如果它的SG函数为0,那么它的任意一个后继局面SG值不为0。对于任意的局面如果它的SG值不为0,那么它一定有一个后继局面的SG值为0

(1)              这个问题的SG函数值就等于石子的数目。原因很简单,取石子的时候,除了0个石子,都能拿,也就是除了了n0n-1都是该状态的前继。所以SGn。然后就是多个石子堆的时候,前一个为0,那么下一个状态一定为1。反之亦是如此。故当所有石子的异或结果为0时,为先手胜。

(2)              这个是anti-sg问题。可以分析。

(a)     当所有石子均为1时,先手胜,石子数目必为偶数SG0

(b)    SG不为0时,若只有一堆石子,数目大于1,先手必能采取最有决策。必胜。若有多对石子,先手将SG变为0(因为SG0,是先手必败局)。

(c)     SG0时。先手决策完后,必定至少有一堆石子大于1,且SG不为0,将会进入先手必胜局(先手必败)。

所以,当SG0max(num)1的时候先手,SG不为0max(num)大于1时,先手必胜。

3        这个问题就是求SG函数。遍历求对应节点的前驱。然后从前向后遍历求SG函数值。

参考:贾思豪   组合游戏略述 ——浅谈SG游戏的若干拓展及变形

阅读更多
文章标签: 游戏 c
想对作者说点什么? 我来说一句

博弈论分析软件gambit16

2018年03月02日 15.49MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭