首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种在常数时间内判断五子棋禁手和棋形属性的方法 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:陕西师范大学

摘要:一种在常数时间内判断五子棋禁手和棋形属性的方法,包括:S100:定义所有棋形和对应的棋形值;S200:在棋型库中用结构体矩阵存储黑白双方在行棋过程中可能遇到的所有棋型;S300:将棋型的总长度、已有的棋子数量及位置、空位置映射成二进制串,依据二进制串所代表的数值,在常数时间内在棋型库中查询到每个棋型中的空位的棋形属性;S400:通过对一个空位点在四个方向上的棋形值分析判断黑方在该空位点行棋是否是黑方的禁手,同时确定受影响的各空位点的棋形值。

主权项:1.一种在常数时间内判断五子棋禁手和棋形属性的方法,包括如下步骤:S100:定义所有棋形和对应的棋形值;S200:在棋型库中用结构体矩阵存储黑白双方在行棋过程中可能遇到的所有棋型;S300:将棋型的总长度、已有的棋子数量及位置、空位置映射成二进制串,依据二进制串所代表的数值,在常数时间内在棋型库中查询到每个棋型中的空位的棋形属性;S400:通过对一个空位点在四个方向上的棋形值分析判断黑方在该空位点行棋是否是黑方的禁手,同时确定受影响的各空位点的棋形值;所述S400步骤进一步包括:S401:如果一个空位点在某方向上棋形值为inf,则该空位点是获胜点,不是禁手;否则,把该空位点在4个方向上的棋形值加起来得到sum,进行下面的判断;S402:如果sum<0,该空位点是禁手;S403:如果包含至少有两个32棋型,则该空位点是禁手;其中,32棋型指该空位落子后成开三;S404:如果包含至少有两个四棋型,所述两个四棋型指双41,或双42,或41+42的组合,则该空位点是禁手;其中41指该空位落子后只能成闭四,42指该空位落子后成开四;S405:sum不满足上述S402至S404条件的,都不是禁手;其中,棋形指棋盘上某个空位的编号;棋形值是棋形编号对应的数值;棋型是指某方棋子和空位在某方向上的排列;棋形属性是棋盘上某空位点的某一方棋形值的总和;inf表示无穷大;开三定义为某方向上的棋型,既符合开的定义,也符合三的定义;开四定义为既符合开的定义,也符合四的定义;闭四定义为某方向上的棋型,既符合闭的定义,也符合四的定义;开的定义是某颜色在某方向上相连棋型,在从其两端点分别出发的正向和负向上、在一定长度范围内,不存在棋子或棋盘边界;闭的定义是某颜色在某方向上相连棋形,在从其两端点分别出发的正向或负向上、在一定长度范围内,存在棋子或棋盘边界;三的定义是同颜色棋子在某方向的边上相连,相连棋型的棋子个数为3;四的定义是同颜色棋子在某方向的边上相连,相连棋型的棋子个数为4。

全文数据:一种在常数时间内判断五子棋禁手和棋形属性的方法技术领域本公开属于人工智能与机器博弈技术领域,具体涉及一种快速判断禁手和棋形属性的五子棋博弈方法。背景技术机器博弈又称计算机博弈,被喻为人工智能皇冠上的明珠,多以下棋为例研究其规律,该领域最著名的事件是深蓝DeepBlue超级电脑于1997年5月以3.5∶2.5击败国际象棋世界冠军卡斯巴罗夫。五子棋是中华民族民间传统文化的代表之一,同时也是一个典型的具有完备信息的双人零和博弈游戏。典型的计算机弈棋系统通常可分为四部分:知识表示、走法生成、评估函数、博弈树搜索。三手交换、五手两打及限制开局棋形等规则用计算机实现起来没有任何难度,编制高智能职业规则五子棋软件的关键是看它能否快速判断“禁手及棋形属性”,因为后面的各类博弈树搜索算法和棋形库匹配等人工智能AI技术必须以此判断为基础。在采用相同搜索算法的情况下,判断的速度越快,同等时间内搜索的范围就越大,棋力也就越强。目前五子棋博弈方法中棋力较强的大都未公开具体方法,对关键问题,即如何定义棋形属性和怎么实现快速判断禁手和查找棋形属性均未说明。发明内容鉴于此,本发明提供了一种在常数时间内判断五子棋禁手和棋形属性的方法,包括如下步骤:S100:定义所有棋形和对应的棋形值;S200:在棋型库中用结构体矩阵存储黑白双方在行棋过程中可能遇到的所有棋型;S300:将棋型的总长度、已有的棋子数量及位置、空位置映射成二进制串,依据二进制串所代表的数值,在常数时间内在棋型库中查询到每个棋型中的空位的棋形属性;S400:通过对一个空位点在四个方向上的棋形值分析判断黑方在该空位点行棋是否是黑方的禁手,同时确定受影响的各空位点的棋形值。通过上述技术方案,本方法不仅能在常数时间判断禁手,还能同时确定棋盘上各空点的棋形属性,理论时间复杂度最优,实际操作步骤少效率高,只在最初载入棋型库时有一次性读取耗时,是编制高性能五子棋人工智能软件的基础。附图说明图1是本发明一个实施例中所提供的一种在常数时间内判断五子棋禁手和棋形属性的方法的流程示意图;图2是本发明一个实施例中LP[6][10]存储的部分黑棋棋型属性;图3是本发明一个实施例中LP[6][10]的第138行的黑棋棋型定义示例图。具体实施方式在一个实施例中,本公开中出现的术语解释如下:1方向:棋盘上共有4种方向即,横从左至右,竖从上至下,左斜从左上至右下,右斜从右上至左下。2正向:棋盘上任意点A的右方、下方、右下方和左下方向统称为“点A的正向”。3负向:棋盘上任意点A的左方、上方、左上方和右上方向统称为“点A的负向”。4空位:棋盘上未落子的位置称为空位。以下举例时用“□”表示棋盘上的空位,用●、○分别表示黑、白方棋子。5棋型:某方棋子和空位在某方向上的排列称为该方的一个棋型,棋型的边界是棋盘边界或另一方的棋子,且棋型不包含另一方的棋子。例如,排列□●□□□●●是黑方的一个棋型。6相连:在某方向上,同种颜色的棋子无间隔地连在一起。7开:某颜色在某方向上相连棋型,在从其两端点分别出发的正向和负向上、在一定长度范围即某个数值的交叉点个数内,不存在棋子或棋盘边界。8闭:某颜色在某方向上相连棋形,在从其两端点分别出发的正向或负向二者只能居其一上、在一定长度范围即某个数值的交叉点个数内,存在棋子或棋盘边界。9一:同颜色棋子在某方向的边上相连,相连棋型的棋子个数为1。10二:同颜色棋子在某方向的边上相连,相连棋型的棋子个数为2。11三:同颜色棋子在某方向的边上相连,相连棋型的棋子个数为3。12四:同颜色棋子在某方向的边上相连,相连棋型的棋子个数为4。13五:同颜色棋子在某方向的边上相连,相连棋型的棋子个数为5。14开一:某方向上的棋型,既符合开的定义,也符合一的定义,则为开一棋型。15开二:某方向上的棋型,既符合开的定义,也符合二的定义,则为开二棋型。16开三:某方向上的棋型,既符合开的定义,也符合三的定义,则为开三棋型。17开四:某方向上的棋型,既符合开的定义,也符合四的定义,则为开四棋型。18闭一:某方向上的棋型,既符合闭的定义,也符合一的定义,则为闭一棋型。19闭二:某方向上的棋型,既符合闭的定义,也符合二的定义,则为闭二棋型。20闭三:某方向上的棋型,既符合闭的定义,也符合三的定义,则为闭三棋型。21闭四:某方向上的棋型,既符合闭的定义,也符合四的定义,则为闭四棋型。22双三:某方在某点落子后,会在两个方向上同时形成开三。双三对黑棋来说是禁手,将立即判负,白方不受此规则限制。23双四:某方在某点落子后,会在两个方向上同时形成开四或闭四、或一个开四一个闭四。双四对黑棋来说是禁手,将立即判负,白方不受此规则限制。24五连:在某方向上,五个同颜色的子相连排列在一起。该颜色一方立即获胜。25长连:某方在某点落子后会在某个方向上形成子数大于5的相连棋型,称为长连。长连对黑棋来说是禁手,将立即判负,白方长连立即判胜。对于黑方来说,长连的优先级大于五连,即尽管长连中包含了五连,还是要当黑方长连来处理。26棋形:棋盘上某个空位的编号称为棋形;对于同一个空位,黑白方可能有不同的编号。以□●□□□●●为例,对于黑方来说,4个空位的编号都是10,对于白方来说,都是-1。在一个实施例中,参见图1,其公开了一种在常数时间内判断五子棋禁手和棋形属性的方法,包括如下步骤:S100:定义所有棋形和对应的棋形值;S200:在棋型库中用结构体矩阵存储黑白双方在行棋过程中可能遇到的所有棋型;S300:将棋型的总长度、已有的棋子数量及位置、空位置映射成二进制串,依据二进制串所代表的数值,在常数时间内在棋型库中查询到每个棋型中的空位的棋形属性;S400:通过对一个空位点在四个方向上的棋形值分析判断黑方在该空位点行棋是否是黑方的禁手,同时确定受影响的各空位点的棋形值。就该实施例而言,本方法能够在常数最优时间内判断当前行棋是否形成五子棋的禁手,并且在判断禁手的同时确定棋盘上各点的棋形属性,提升了五子棋博弈软件计算的速度。常数时间即O1,是算法的时间复杂度的一种表征形式,与输入数据无关,此处是指在落子的同时就能判断该落子点是否会形成禁手。在一个实施例中,定义所有棋形和对应的棋形值,形成棋形编号和棋形值表,如表1所示。表1棋形编号和棋形值就该实施例而言,inf表示无穷大,-inf表示负无穷大。这里的棋形编号是为了方便人记忆而采用的,在实际程序中可以采用连续的编号如1、2、3等来替代。棋形值的具体数值也不是唯一的,只要能达到判断禁手的目的即可。棋型属性定义可参见术语解释和表1,如开,闭,双三双四。对某些特殊的棋型属性,我们可以赋予它一个编号可任意设置,方便记忆即可及棋形值,参照禁手规则对棋形值判断,便于我们判断是否形成黑棋禁手及棋力强弱。在另一个实施例中,所述S200步骤进一步包括:S201:建立棋型库的条目;S202:构建棋型库的数据结构;S203:列出了黑棋的所有棋型的棋形分析结果。就该实施例而言,棋形库记录了黑白双方在行棋过程中可能遇到的所有棋型,并包含了棋型中空位的棋形。库中一共有108960个棋型,黑白双方各占一半。棋型库的作用是让黑白方可以在常数时间,即o1,内来判断某空位点的属性和价值,进而决定是否选择该空位落子。因此,可以将棋型库理解为针对空位建立的库,它利用了以空间换时间的思想。棋型库被组织成一个15×15的结构体矩阵。用LP表示这个结构体矩阵的名称。结构体矩阵的行表示棋型中包含的某方棋子的个数,结构体矩阵的列表示棋型的长度。LP是一个二维结构体矩阵,结构体矩阵元素的长度不一定相等,是一种非线性结构。通过使用棋型的子数确定所在LP行、长度确定所在LP列、特征码和Hash函数确定棋型在LP元素中的具体位置,可以在常数时间内获知每个棋型中的空位的棋形属性。由于这种棋型的数量巨大,靠人工分析耗时费力,还容易出错。本方法列出了黑棋的所有棋型的棋形分析结果,用户只要拿来直接使用即可,避免了分析过程。在另一个实施例中,所述S201步骤进一步包括:棋型库中的任一个条目记录的是某个棋型的棋子和空位的排列,以及空位的棋形属性。下面通过一个黑方棋型条目□□●●□●的例子来说明如何建立一个条目,三个空位从左至右分别称为1号、2号、3号空位。1如果黑棋在1号空位上落子将形成●□●●□●棋型,此后不论黑棋如何填最后的两个空位,都不可能形成5连所有空位都填上的话将形成长连。因此1号空位对黑方来说,符合“棋形定义”中10棋形的定义。2如果黑棋在2号空位上落子将形成□●●●□●棋型,这个棋型中黑方有一个不连续的四,即闭四棋型此后如果黑棋继续填空的话,将填在第3个空位处形成5连。因此2号空位对黑方来说,符合“棋形定义”中41棋形的定义。3如果黑棋在3号空位上落子将形成□□●●●●棋型,这个棋型中黑方有一个连续的四,即闭四棋型此后如果黑棋继续填空的话,将填在第2个空位处形成5连。因此3号空位对黑方来说,符合“棋形定义”中41棋形的定义。这样,棋型条目可建立为“10,41,●●,41,●”。根据“棋形定义”,有子的位置可将棋形定义为-1,因此这个条目可改写成[10,41,-1,-1,41,-1]。对于白方棋型□□○○□○来说,根据“棋形定义”可写作:[31,41,-1,-1,41,-1]。就该实施例而言,在标准15×15棋盘上,某棋型包含的格点数含棋子和空位范围为1-15,因此,理论上黑白双方可能的棋型数目为2×21+22+…+215=131068个。但实际中有些棋型是不可能存在的,例如□●●●●●,由于黑方已经获胜,无需再判断1号空位的属性了,因此,实际的有效棋型条目数量是108960个。在另一个实施例中,所述S202步骤进一步包括:所述棋型库是一个15×15的结构体矩阵,该结构体矩阵的行表示棋型中包含的某方棋子的个数,该结构体矩阵的列表示棋型的长度。仍以□□●●□●棋型为例加以说明。从上一个实施例可知该棋型被表示成[10,41,-1,-1,41,-1],其中棋子数为3即3个-1,长度为6,因此,这个棋型被保存在LP[3][6]位置。其中,LP表示15×15的结构体矩阵的名称。但是,棋型●●●□□□-1,-1,-1,41,41,10也符合棋子数量和长度的规定,也应该保存在LP[3][6]中。事实上,应该保存在LP[3][6]位置的棋型一共有6!3!6-3!=20个,其中!表示阶乘,如表2所示。表2.保存在LP[3][6]位置的所有黑方棋型序号棋型序号棋型1104141-1-1-111-1101010-1-121041-141-1-112-11010-110-131041-1-141-113-14141-1-11044142-1-1-14114-110-11010-1510-14141-1-115-141-141-110610-141-141-116-141-1-14110741-142-1-14117-1-1101010-1810-1-14141-118-1-14141-110941-1-142-14119-1-141-141101041-1-1-1424120-1-1-1414110就该实施例而言,经上面分析看到,LP是一个二维结构体矩阵,结构体矩阵元素的长度不一定相等,是一种非线性结构。在另一个实施例中,图2所示,LP[6][10]中的6表示有6个棋子,10表示棋型长度。事实上,应该保存在LP[6][10]位置的棋型一共有10!6!10-6!=210个,除去不存在的棋型,LP[6][10]实际有185个棋型。LP[6][10]中的-1代表棋盘上的一个黑子;10代表黑棋在该空位落子后,将来会形成长连;31代表该黑棋在此空位落子后只能成闭三;41代表黑棋在该空位落子后只能成闭四;50代表该空位黑子落子后形成五连,黑方立即获胜;60代表黑方在此空位落子后立即形成长连禁手,判负;70代表黑方在此空位落子后形成同一方向上的双四禁手,立即判黑负。在另一个实施例中,图3为图2第138行的黑棋棋型定义示例说明。如果在1号和4号空位插入一个黑棋那么将会形成闭四,如果在2号和3号空位插入一个黑棋,那么将会形成双四禁手,黑棋立即判负。在另一个实施例中,所述S300步骤进一步包括:将棋型的总长度、已有的棋子数量及位置、空位置映射成二进制串,构成每个棋型对应的特征码,利用Hash函数在特征码和棋型库中的棋型的序号之间建立一个映射函数,依据二进制串所代表的数值,在棋型库中用常数时间查询到每个棋型中的空位的棋形属性。所述构建每个棋型对应的特征码具体如下:对于每一个棋型,把有子的位置设为1,把空位设为0,则对应的2进制数即为棋型的特征码。例如□□●●□●棋型对应的2进制数为001101,这个2进制数被称为棋型的特征码或签名,用符号S来表示。就该实施例而言,上述实施例中的每一个在LP[3][6]中的棋型都是唯一的,则对应的2进制数也是唯一的。利用Hash函数在特征码和该棋型在表2中的序号之间建立一个映射函数H,则只要输入棋型特征码就能在表2中找到该棋型,Hash查找的时间复杂度为O1。在另一个实施例中,具体的Hash函数有多种形式,作为示例,针对表2的例子可选为,H=S%32-2,其中%表示求模运算。就该实施例而言,这个Hash空间的大小为26,即比表2空间20略大一些。LP结构体矩阵其他元素位置所对应的Hash函数可能与此不同,可自行设定,以节省空间为目标。在另一个实施例中,以横向、黑棋型为例说明如何在行棋过程中记录棋型,其他3种方向竖、左斜、右斜以及白棋型的记录方法完全相同。1建立一个15×15的棋形值矩阵,每个元素记录3个值,即所属棋型范围的[起点,终点]和棋形值,未开局之前,初始化为[1,15]。2当该横向上落黑子后,起点终点值保持不变。3当该横向上落白子后,该白子左边直至边界或碰到另一个白子之间的所有空位的棋型范围的终点改为该白子左边第1个位置,起点不变;该白子右边直至边界或碰到另一个白子之间的所有空位的棋型范围的起点改为该白子右边第1个位置,终点不变。4根据起点终点组成的编号在棋形编号和棋形值表中提取棋形值,即将该白子左右两边的空位的黑棋形值写入对应棋形值矩阵元素。5此后,当该方向上顺序落子时,重复2、3和4步骤。其中,棋型范围就是一个棋子到另一个棋子之间的距离,因此用到[起点,终点]来表示棋型范围。因为这里是以横向的黑棋举例的,所以所述的棋形值只有横向的棋形值,要叠加四个方向的棋形值才能得到最终的棋形值。这里第1个位置是指最靠近落子点的棋子的位置。就该实施例而言,在同一个局面下,博弈算法可能多次需要用到同一个点的棋形值,因此,最节省时间的方式是用一个棋形值矩阵记录每个点在4个方向上的棋形值,省得每次到棋型库中查找,这仍是以空间换时间的策略。上述步骤中的第4步如果省略,则需每次到棋型库中取棋形值。另外,根据具体的博弈算法要求,实际上可能不必要每个空位都写棋形值,一些已经无价值的点不需要再写入棋形值了,这样可大幅节省算法所需时间。在另一个实施例中,根据一个空位点在4个方向上的棋形值见表1棋形值的和,就可以判断该点是否是黑方的禁手,方法如下:S401:如果一个空位点在某方向上棋形值为inf,则该空位点是获胜点,不是禁手;否则,把该空位点在4个方向上的棋形值加起来得到sum,进行下面的判断;S402:如果sum<0,该空位点是禁手;S403:如果包含至少有两个32棋型,则该空位点是禁手;其中,32棋型指该空位落子后成开三;S404:如果包含至少有两个四棋型,所述两个四棋型指双41,或双42,或41+42的组合,则该空位点是禁手;其中41指该空位落子后只能成闭四,42指该空位落子后成开四;S405:sum不满足上述S402至S404条件的,都不是禁手。尽管以上结合附图对本发明的实施方案进行了描述,但本发明并不局限于上述的具体实施方案和应用领域,上述的具体实施方案仅仅是示意性的、指导性的,而不是限制性的。本领域的普通技术人员在本说明书的启示下和在不脱离本发明权利要求所保护的范围的情况下,还可以做出很多种的形式,这些均属于本发明保护之列。

权利要求:1.一种在常数时间内判断五子棋禁手和棋形属性的方法,包括如下步骤:S100:定义所有棋形和对应的棋形值;S200:在棋型库中用结构体矩阵存储黑白双方在行棋过程中可能遇到的所有棋型;S300:将棋型的总长度、已有的棋子数量及位置、空位置映射成二进制串,依据二进制串所代表的数值,在常数时间内在棋型库中查询到每个棋型中的空位的棋形属性;S400:通过对一个空位点在四个方向上的棋形值分析判断黑方在该空位点行棋是否是黑方的禁手,同时确定受影响的各空位点的棋形值。2.根据权利要求1所述的方法,优选的,所述S200步骤进一步包括:S201:建立棋型库的条目;S202:构建棋型库的数据结构;S203:列出了黑棋的所有棋型的棋形分析结果。3.根据权利要求2所述的方法,所述S201步骤进一步包括:棋型库中的任一个条目记录的是某个棋型的棋子和空位的排列,以及空位的棋形属性。4.根据权利要求2所述的方法,所述S202步骤进一步包括:所述棋型库是一个15×15的结构体矩阵,该结构体矩阵的行表示棋型中包含的某方棋子的个数,该结构体矩阵的列表示棋型的长度。5.根据权利要求1所述的方法,所述S300步骤进一步包括:将棋型的总长度、已有的棋子数量及位置、空位置映射成二进制串,构成每个棋型对应的特征码,利用Hash函数在特征码和棋型库中的棋型的序号之间建立一个映射函数,依据二进制串所代表的数值,在常数时间内在棋型库中查询到每个棋型中的空位的棋形属性。6.根据权利要求5所述的方法,所述Hash函数为棋型的特征码%32-2,其中%表示求模运算。7.根据权利要求1所述的方法,所述S400步骤进一步包括:S401:如果一个空位点在某方向上棋形值为inf,则该空位点是获胜点,不是禁手;否则,把该空位点在4个方向上的棋形值加起来得到sum,进行下面的判断;S402:如果sum<0,该空位点是禁手;S403:如果包含至少有两个32棋型,则该空位点是禁手;其中,32棋型指该空位落子后成开三;S404:如果包含至少有两个四棋型,所述两个四棋型指双41,或双42,或41+42的组合,则该空位点是禁手;其中41指该空位落子后只能成闭四,42指该空位落子后成开四;S405:sum不满足上述S402至S404条件的,都不是禁手。8.根据权利要求1所述的方法,所述S300步骤之后S400步骤之前进一步包括如下步骤:用棋形值矩阵记录每个点在四个方向上的棋形值。9.根据权利要求8所述的方法,所述棋形值矩阵是一个15×15的矩阵,每个元素记录3个值,分别是所属棋型范围[起点,终点]和棋形值。10.根据权利要求9所述的方法,未开局之前,所述棋形值矩阵的所属棋型范围初始化为[1,15]。

百度查询: 陕西师范大学 一种在常数时间内判断五子棋禁手和棋形属性的方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。