中国象棋
大狗狗
这个作者很懒,什么都没留下…
展开
-
象棋AI最佳杀着
显而易见,黑方已在劫难逃。红方只需车四进一就可绝杀。然而我的象棋AI却走出车五平六,虽然最后依然绝杀黑棋,却绕了一大圈。问题出在两个地方,第一个是:function search(){ var WINVALUE = 9000; var best = 0; var result = 0; while(var step = nextStep()){ var vl = alphaBeta(1,step); if(vl >= WI..原创 2022-04-16 20:42:21 · 611 阅读 · 0 评论 -
避免重复局面
重复局面不论是在真人对弈,还是象棋AI中,都要尽量避免。确认局面重复非常简单,遍历zobrist 队列就可以了。但后续处理比较麻烦,要不同情况具体分析。一. 在AI中在搜索算法中,发现局面重复,首先判断重复的性质:(1) 为了进攻而导致重复(具体又可为了捉将和捉子)(2) 遭受攻击,为了逃避而触发重复。(3) 无意义的废棋。仅情况(2)被允许,其它情况予以剪裁。二...原创 2020-03-22 11:22:01 · 313 阅读 · 0 评论 -
PVS技术及其不稳定性探讨
dynamism(depth,upperLeft,left),被搜索点的分值应介于(left,-upperLeft)之间。如果这个区间向两侧扩展,会使得搜索效率降低,但不会影响搜索结果。如果向内收缩,会加快搜索速度,但会影响搜索结果。区间收缩分两种情况讨论,一是left值增大(下边界收缩),二是upperLeft值增大(上边界收缩)。PVS(Principal Variation Search...原创 2020-03-14 13:21:45 · 582 阅读 · 0 评论 -
超出边界搜索和不超出边界的搜索
前文说过,一个点的分值不可以低于其兄弟点分值,否则触发剪裁。假如兄弟点最佳分值为8(left值),那么当前点分值不高于8都可触发剪裁。当前点可以返回其具体分值(7、6、5、4....)这叫超出边界(left == 8)。也可以返回8,这叫不超出边界。function dynamism(depth,upperLeft,left){ if(depth >= MAXDEPTH){ r...原创 2020-03-14 11:56:12 · 437 阅读 · 1 评论 -
对空着裁剪的思考
空着剪裁的形式很简单:比如红棋走完该黑棋走了,黑棋不走,让红棋继续走一步,然后黑棋再走...那么原理是什么?中局阶段,获取某一方的走法,约有40个左右。这其中顶多有两个,甚至只有一个是好的着法。大部分是无用甚至送死着法。这么多坏着,每个都要进行指定深度的搜索,确实是可惜了电脑的时间~回到开头,假设红棋刚走了r1,黑棋不走,让红棋继续走,然后形成了r1,r2,b1,r3,b2,r4,b3...原创 2020-02-12 20:30:05 · 431 阅读 · 0 评论 -
中国象棋left-upperLeft搜索算法
一. 搏弈树红棋走一步后,黑棋有多种应对招法。黑棋走完后,红棋又有多种走法可选。依次类推,就构成了一个搏弈树。 【 图1 】二. 静态评分在某个点上,不考虑后续步法,仅对双方当前形势好坏进行评分。评分以棋子质量为基础。如果该点是红方行棋,得分为红方质量为r减去...原创 2019-07-01 10:55:37 · 408 阅读 · 0 评论