【摘要】
围棋程序的编制被称作人工智能的“试金石”,是人工智能技术的一大难题。
本文介绍了人工智能在围棋程序中的应用与发展,对比了围棋与国际象棋博弈算法的差别和复杂度, 从而分析围棋算法的难点,讨论各种博弈算法(气位理论、模式匹配与博弈树)在围棋程序中的融合运用。并给出了围棋死活程序的算法实例(附程序),以供参考。
【正文】
『目录』
一、概述
二、围棋的复杂性
三、博弈(棋类)算法及其在象棋与围棋中的对比
四、围棋算法
五、围棋棋形识别
六、围棋死活的算法与实现
七、展望
一、概述
1、围棋简介
围棋相传为尧所创,纵横一十九道,天元是为太极,太极生两仪,为黑白子;两仪生四象,为四个角。《弈旨》([汉]班固)云:“棋有白黑,阴阳分也,骈罗列布,效天文也。”可知围棋本是仿效天文而制,逐渐演变为博弈游戏。
2、计算机与围棋
计算机运用于棋类方面几乎与计算机的诞生的历史一样长。这方面内容主要属于人工智能技术。人工智能作为一门科学首先是在五十年代提出的,随即便运用于棋类。
由于技术的进步,计算机速度的提高、算法的不断发展,目前电脑国际象棋的水平已极高,然而围棋水平却徘徊不前。
就围棋而言,人弈棋凭的是经验,即“棋感”。人类的优势是模糊判断、灵敏的直觉,高手往往会有灵机一动而弈出妙手。当然事物有其两面性,即人的情感、直觉有时也会误导自己形成错误,而棋手的心态也是至关重要的一环,“成也萧何,败也萧何”,直觉既是人类的法宝,亦是败因(当然是指败给人了)。
计算机的优势是计算速度快,劣势是不擅模糊判断、不能根据经验选点导致搜索量过大。计算机不为情绪所困,不为直觉所惑,故地域广狭、大小之分能较为准确,其耗时亦少,然而计算机毕竟没有棋感,不知道哪步好、哪步不好,只有一点点地去试,要么费时甚巨(也未必有用),要么草草了事,结果也可想而知。
二、围棋的复杂性
围棋全局与其死活问题其复杂性都大致可归纳为如下三点:
1、模糊性
“围棋”之名自是取自围地之意,倘若是双方落子一开始便是紧紧相贴的,那么可想而之行棋的速度(即占领地盘的速度)是极慢的,故而布局、中盘以至大官子阶段,双方只是围出一个大概的轮廓,甚而连轮廓都不明显。黑白势力难分,形状犬牙差互。这对于计算机处理形成了极大的困难。
2、反复性
象棋中棋子一旦被吃,则永远从棋盘上提去,而在围棋棋盘上,被吃的地方仍可重新落子,甚而将对方反吃回来,如此一来,搜索的难度便大大增加。如“倒脱靴”之形,送子后再吃子,一块空可以几易其主。所以“死子”不死,“活子”有时倒是堪虞。所以在计算机处理中不可以简单确定一块棋子的死活和对周围的影响。
3、灵活性
象棋的灵活,至多体现在兑子上,所谓“宁弃一子,不失一先”,也仅是一子而已,若是两子、三子呢?恐怕在双方实力相当的情况下必败无疑。而且在象棋算法中多有将各种棋子折合为一定的价值相加的做法,如,在国际象棋中以一个兵为单位,一个马约可等于三个半兵,一个车约可等于五个半兵,等等,最多再根据棋子所处位置加以一定的折算。
而围棋的灵活远胜于此,有时弃去十来个子以取势,弃去二、三十目的角地以转换。再者,围棋棋子的价值是难以估量的,其价值不完全在其本身,而常于在周围的配置,有些影响甚而可斜跨整个棋盘。