麻省理工公开课人工智能笔记五

关于博弈的讨论---计算机关于象棋博弈

计算机实现象棋博弈的几种方法的讨论

第一种方式是像人类,计算机讨论兵型,战术,棋局时机等,这显然无法做到。

第二种方法考虑计算机的如果-那么规则;即如果将兵前移一位,那么就那样做。这样做对棋盘没有评估,只是看看棋盘,以当前的情况为依据来下。

如上图,上面的点是棋局形式,下面的点是可能的操作,我们可以根据第一个方向确定下一步如何走。对可能的操作进行排序,选优先级最高的那个。不过这不是一种很好的方式。

第三种方法是对棋局做出评估,看所有移动的可能结果,确定所有可能的下一步中走哪一步是最好的,这需要设法评估形势。

评估的一种方式如上图,我们将当前棋盘上的形式设为f1,f2····fn,分别可能代表王的位置等等棋局形式,这些形式最终构成一个函数g,而这个可以用一个多项式来表示,g = c1*f1+c2*f2+······cn*fn,我们可以找到评估中喜欢的一种方式往下走。

第四种方式是使用搜索算法,这里我们首先考虑大英博物馆算法,用于评估下面的所有可能结果。我们思考下面这棵树

树的度为b,深度为d,叶节点的数目显然为b的d次方,然而对于棋盘来说,所要评估的形式显然很多,要想评估下一步的最好选择,树中大概有10的120次方几点,这显然不可能。

第五种方式我们将不只考虑向下一步的方式,而是考虑向下多步来做评估。

圆圈中的数字为5,代表第五种方式为向下考虑多步

首先使用极小化极大算法

考虑一个简单的b=d=2的树,我们考虑两个棋手,第一层的棋手想要得到极大值,第二层的棋手想要得到极小值,我们从上往下且从左往右给几个结点排号,显然②号结点将得到2,③号结点将得到值1,而①号结点取最大值得到值2。这样可以到达树的底部,一层一层的往上挪,然后决定怎么走。虽然没有得到最大值,但这是对抗性对局,得不到最大值也理所当然。

当b和d比较大时,我们知道,结点数是b^d,这显然比较大,在博弈中我们也可以用一些方法进行剪枝。

如上图,当我们看到2时,极小化者就知道②号结点的值<=2,再遍历到7时,可以确定②号结点的值=2,同时极大化者可以确定①号结点的值>=2,当遍历到1时,极小化者确定③号结点<=1,此时极大化者就可以确定①号结点值=2,这样就进行了剪枝。这就是α-β算法,是对极小化极大算法的优化。

当有四层时,我们同样可以用α-β算法,这时就有较多枝条被剪去。

在较好的情况下,我们需要做的静态评估数大概是S = 2*b^(d/2),这已经大大缩小了工作量。

然而,如果当最后一层节点需要的计算量非常大,耗时很长,我们就需要使用上一层静态评估让结果一个保证,如上图,上一层的计算量比下一层少了一个量级。所以当我们规定下一步棋需要多少时间时,可以有一个保证,从而得到一个较好的评估。

为什么可以使用这种方法,如上图计算,前面所有的评估量相加,约等于b^(d-1)。

所有的博弈程序都是这么走的,极小化极大加α-β算法优化。

然而这仍然不是人工智能,这只能是推土机的智能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章