欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
繁忙的海狸是个图灵机游戏,这一篇我们就认真的来看看这个可爱的小动物。
停机问题Halting Problem
之前我们介绍过基本的图灵机,读写头Head可以不停地对纸带上的数字(0或1)进行读取,然后再跟进自身状态State和读取到的数字来决定下一步动作,以及下一步状态切换。
但是图灵机有一个问题,那就是它根据设定好的规则运行,并不一定能够最终自动停下来,不停下来就代表计算没有结束,没结束就代表得不到结果。
一直运行却永远得不到结果的图灵机,是毫无用处的。
所以有效的图灵机必须确保能够自身根据规则最终能切换到停机Halt状态才行。
对于无尽这个事情,《庄 子·天下篇》就讲到一尺之棰,日取其半,万世不竭,这就是一种有规则、能运行,但不能自动停机的图灵机算法。
繁忙的海狸Busy beaver
图灵机本质上是能够自动运行的多个程序指令卡片,如下图所示:
繁忙的海狸游戏是一个图灵机游戏,它遵循两个原则:
- 必须能够自动停止Halt。
- 尽可能在初始都是0的无限长纸带上写出更多的数字1。
在上图中,左侧每个卡片card代表一个指令,也对应一个状态State,而纸带上固定只有0或1两个数字。上图中那么就是有5个状态(4张卡片)2个symbol元素。
1状态繁忙的海狸 BB-1
默认Halt停机(状态State 0)的卡片不计,只有一张卡片(状态State 1)的繁忙海狸,如下图所示。
上图中简化了写法,下面0和1组成的两行分别表示读取的符号为0或者为1执行的动作。而0 101中后面三个数字分别表示把当前位置的数字改写为1,向左移动(0向左1向右),最后一个数字表示下一状态为1。0 101
即[如果读取到0],[那么改写为1][然后向左移动][再跳转到状态1]
,同样1 110
表示[如果读取到1],[那么改写为1][然后向右移动][再跳转到状态0停机]
。
实际上由于纸带数字初始是0,读到0,写成1,向左走,状态不变(还是转到状态1),所以永远读取不到1,也就永远不会进入第二行的情况,也永远不能停下来,会一直向左无限跑过去。
这样的海狸不符合停机规则。
我们必须把第一行规则改为0 100
或者0 110
或者0 010
,0 000
,这样才能实现停机,但这样只能走执行一步,只能在纸带上写出1个1,如下图。
有没有更好的办法?没有了。无论是向左还是向右,无论是先改写再移动还是先移动再改写,在1state和2Symbol的情况下只能最多写出一个1。
BB-2和更多
1状态海狸有多少种可能的走法?答案是64种,当然其中包含了很多无限循环不停机的无效走法。64种走法里,能停机的最好成绩是1.
关于多状态海狸(多卡片海狸)的走法,有个公式可以套用:
可以推算出2卡片海狸共有种可能。
而这20736种可能的走法中,有多少会停机?不停机的最好成绩是多少?——这些都没法用特定算法计算,只能把这两万多种情况都模拟出来,然后看哪些停住了,再找出其中最好成绩。
2卡片海狸即BB-2的最好成绩是4,最多写出4个1,是不是很失望呢?
更失望的是BB-3,它有16777216(1600多万)种走法,但最好成绩是6。
BB-4有256乘以10的8次方那么多走法,最好成绩是13。
BB-5则人类25年来也没有算出确定的最好成绩来,目前的最高纪录是4098。这是由于走法太多太复杂,计算量太大,超级计算机也算不完。
结语
有些事情看上去简单,但实际并没有什么好的算法可以直接得出结果,只能暴力尝试,而遇到庞大数字的时候,现代计算机也无能为力。
实际上每件事都会有确切算法吗?
世上有太多需要模糊算法,或者只能得到一些大约概率,或者什么也得不到。
欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
每个人的智能新时代
如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~
END