西洋跳棋程序CHINOOK的开发与挑战
繁忙开端与数据库建设
1990年1月十分忙碌,在八个月的“研究”(实则享受)后重新投入教学并非易事,同时还在为婚礼做着紧张的准备。直到4月课程结束,才开始对CHINOOK进行较多工作。Norm每周从温哥华远程登录测试CHINOOK,改进评估函数。当程序出现错误走法时,他会深入分析原因,可能是知识缺失、知识错误或对某些特征评估过高。
Ken Thompson的五棋子数据库让我们渴望更多,六棋子数据库有望大幅提升程序能力。但构建六棋子数据库面临巨大挑战,共有2,503,611,964个位置需要计算。不过,我们通过将问题分解,逐步降低了计算难度:
1. 第一次细分 :将计算分为四个不相交的问题,即6:0、5:1、4:2和3:3。其中,6:0数据库全是胜局无需计算,而5:1有467,999,856个位置,4:2有1,174,279,692个位置,3:3有783,806,128个位置,仍然很大。
2. 第二次细分 :每个部分可根据棋盘上国王和棋子的数量进一步细分。例如,用3030表示三个黑王对三个白王,3021表示三个黑王对两个白王和一个白棋子。计算时需先计算3030,因为3021中的棋子晋升为王后需要3030的位置值。此时最大的问题是2112和2211,各有217,836,864个位置。
3. 第三次细分 :以3021数据库为例,白棋子可能在七个等级中的任意一个,可将其拆分为七个小问题。对于2112计算,考虑双方最靠前的棋子,可将其拆分为49个更小的子问题。最终,最大的子问题是2220.70,有33,543,720个位置。 <
超级会员免费看
订阅专栏 解锁全文
18

被折叠的 条评论
为什么被折叠?



